diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-14 20:03:01 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-14 20:03:01 +0000 |
commit | a453ac31f3428614cceb99027f8efbdb9258a40b (patch) | |
tree | f61f87408f32a8511cbd91799f9cececb53e0374 /collections-debian-merged/ansible_collections/dellemc/os10 | |
parent | Initial commit. (diff) | |
download | ansible-upstream.tar.xz ansible-upstream.zip |
Adding upstream version 2.10.7+merged+base+2.10.8+dfsg.upstream/2.10.7+merged+base+2.10.8+dfsgupstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'collections-debian-merged/ansible_collections/dellemc/os10')
494 files changed, 71887 insertions, 0 deletions
diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/.README.md.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/.README.md.un~ Binary files differnew file mode 100644 index 00000000..bd7e9540 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/.README.md.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/.galaxy.yml.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/.galaxy.yml.un~ Binary files differnew file mode 100644 index 00000000..50e015b2 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/.galaxy.yml.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/.github/workflows/ansible-test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/.github/workflows/ansible-test.yml new file mode 100644 index 00000000..2b94f4cc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/.github/workflows/ansible-test.yml @@ -0,0 +1,33 @@ +name: CI +on: +- pull_request + +jobs: + sanity: + name: Sanity (${{ matrix.ansible }}) + strategy: + matrix: + ansible: + - stable-2.10 + - devel + runs-on: ubuntu-latest + steps: + + - name: Check out code + uses: actions/checkout@v1 + with: + path: ansible_collections/dellemc/os10 + + - name: Set up Python 3.6 + uses: actions/setup-python@v1 + with: + python-version: 3.6 + + - name: Install ansible-base (${{ matrix.ansible }}) + run: pip install https://github.com/ansible/ansible/archive/${{ matrix.ansible }}.tar.gz --disable-pip-version-check + + - name: Install ansible_collections.ansible.netcommon + run: ansible-galaxy collection install ansible.netcommon -p ../../ + + - name: Run sanity tests + run: ansible-test sanity --docker -v --color --python 3.6 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/.gitignore b/collections-debian-merged/ansible_collections/dellemc/os10/.gitignore new file mode 100644 index 00000000..c6fc14ad --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/.gitignore @@ -0,0 +1,387 @@ + +# Created by https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv +# Edit at https://www.gitignore.io/?templates=git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv + +### dotenv ### +.env + +### Emacs ### +# -*- mode: gitignore; -*- +*~ +\#*\# +/.emacs.desktop +/.emacs.desktop.lock +*.elc +auto-save-list +tramp +.\#* + +# Org-mode +.org-id-locations +*_archive + +# flymake-mode +*_flymake.* + +# eshell files +/eshell/history +/eshell/lastdir + +# elpa packages +/elpa/ + +# reftex files +*.rel + +# AUCTeX auto folder +/auto/ + +# cask packages +.cask/ +dist/ + +# Flycheck +flycheck_*.el + +# server auth directory +/server/ + +# projectiles files +.projectile + +# directory configuration +.dir-locals.el + +# network security +/network-security.data + + +### Git ### +# Created by git for backups. To disable backups in Git: +# $ git config --global mergetool.keepBackup false +*.orig + +# Created by git when using merge tools for conflicts +*.BACKUP.* +*.BASE.* +*.LOCAL.* +*.REMOTE.* +*_BACKUP_*.txt +*_BASE_*.txt +*_LOCAL_*.txt +*_REMOTE_*.txt + +#!! ERROR: jupyternotebook is undefined. Use list command to see defined gitignore types !!# + +### Linux ### + +# temporary files which can be created if a process still has a handle open of a deleted file +.fuse_hidden* + +# KDE directory preferences +.directory + +# Linux trash folder which might appear on any partition or disk +.Trash-* + +# .nfs files are created when an open file is removed but is still being accessed +.nfs* + +### PyCharm+all ### +# 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/**/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/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+all Patch ### +# Ignores the whole .idea folder and all .iml files +# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360 + +.idea/ + +# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023 + +*.iml +modules.xml +.idea/misc.xml +*.ipr + +# Sonarlint plugin +.idea/sonarlint + +### pydev ### +.pydevproject + +### Python ### +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +downloads/ +eggs/ +.eggs/ +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 +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# pyenv +.python-version + +# 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 + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# Mr Developer +.mr.developer.cfg +.project + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +### Vim ### +# Swap +[._]*.s[a-v][a-z] +[._]*.sw[a-p] +[._]s[a-rt-v][a-z] +[._]ss[a-gi-z] +[._]sw[a-p] + +# Session +Session.vim +Sessionx.vim + +# Temporary +.netrwhist +# Auto-generated tag files +tags +# Persistent undo +[._]*.un~ + +### WebStorm ### +# 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 + +# Generated files + +# Sensitive or high-churn files + +# Gradle + +# 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/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake + +# Mongo Explorer plugin + +# File-based project format + +# IntelliJ + +# mpeltonen/sbt-idea plugin + +# JIRA plugin + +# Cursive Clojure plugin + +# Crashlytics plugin (for Android Studio and IntelliJ) + +# Editor-based Rest Client + +# Android studio 3.1+ serialized cache file + +### WebStorm Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +.idea/**/sonarlint/ + +# SonarQube Plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator/ + +### Windows ### +# Windows thumbnail cache files +Thumbs.db +Thumbs.db:encryptable +ehthumbs.db +ehthumbs_vista.db + +# Dump file +*.stackdump + +# Folder config file +[Dd]esktop.ini + +# Recycle Bin used on file shares +$RECYCLE.BIN/ + +# Windows Installer files +*.cab +*.msi +*.msix +*.msm +*.msp + +# Windows shortcuts +*.lnk + +# End of https://www.gitignore.io/api/git,linux,pydev,python,windows,pycharm+all,jupyternotebook,vim,webstorm,emacs,dotenv diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/FILES.json b/collections-debian-merged/ansible_collections/dellemc/os10/FILES.json new file mode 100644 index 00000000..3b1af59c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/FILES.json @@ -0,0 +1,5472 @@ +{ + "files": [ + { + "name": ".", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "01ab586b49129af85e3bcaba0d98cd82dd3cd367a7c53a4c076369871aaab3e9", + "format": 1 + }, + { + "name": "tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_after.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da72d3c160dab5f66216b8015a089e13c4dbe56b590ef90edc0e51ed56b07234", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_exact.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ebc38351d32e90f92ce06c812fe22603a9c18db3f2057191efc5a6c125b87e48", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/toplevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "132e93410ded1a25c5f4c8a369cf81ee1833fb7953549e9f5d2b6c552b47506a", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_before.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c849863f62c2c9931adcc28c2e8577272a5cedb6e0e1fc9fad40fd0fce682bc", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_nonidempotent.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "debdb05b673f425e11e012ebfc99b414262a9cbcc475d43725e97c6dd363034f", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_block.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "125038b2e92e2fd5726f5d5f39f4076b3cb54b15178c87e6a277bfafdf344b79", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/sublevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3914a01688bf798cad40e5ece4e35b8e67c586c4e66d8608abea81bf7c25f5a9", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_strict.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ab2f7adc3b49df0e3236c2a11da03d056ec1f6b12d570a5eae47c63fc06a219b", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "046c1f590ecbc9ebc6891a7a266dd61ebc350fee85d1d5e1d4eed2ec013f095f", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac196e55bc80cba08a1cadef71a151160e493ce9cb00cb3ae12e88cf83664c47", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_config/os10_config/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests/cli/output.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f025c2b477efa718d6881c2e1b934dc736b3e7fe4ec49805edae800c55fcd9f1", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests/cli/contains.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "194d8ae3b519873ade2b6f741e45571fa9952588f24e6f9d0226159dd7386cb8", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests/cli/timeout.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "92d1b0d173e831f883d5020d25607ae477fd6e6a82a0855aad18efe9b50753d9", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests/cli/bad_operator.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e7f0921319a9003b8598706124d5382747299ddaf334b4f887d6fe5af4ba65b1", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tests/cli/invalid.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d8cb48a03f2ea31bcd398e6e9d12193c6fc07316e56ef44f06cabd0947c1e614", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ee0b5ac71e5a1585eb464148138380f40e591e6c8365462bc4d54ee40296927", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac196e55bc80cba08a1cadef71a151160e493ce9cb00cb3ae12e88cf83664c47", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_command/os10_command/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/tests/cli/facts.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "866b0fdd2ac28d5d715b7952e65cca599795911d5a968ed0172611f1a632ea82", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9ee0b5ac71e5a1585eb464148138380f40e591e6c8365462bc4d54ee40296927", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac196e55bc80cba08a1cadef71a151160e493ce9cb00cb3ae12e88cf83664c47", + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/os10_facts/os10_facts/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "format": 1 + }, + { + "name": "tests/unit", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/os10_module.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e9349583625868b561568aa6b370e5da954e6567baae5206d649fe005b97497b", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/test_os10_facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d5adc3e2b16b21d21d73cb8a9cdd0e28eaed0715414ab5d7ffd2cccad3e7bb89", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/test_os10_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6c0a64846f3954cea9a644f416bc08b0bf3fde6b097fbf2286aa4c2e4fa65519", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/test_os10_command.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "246875d5c4a286409f2bb523be2f987b7898ef4509fd42a0f11ed32a13274f17", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_system__display-xml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f22f3fe42e53f39403ee015ef68ce551201e6ef6c1a1ae4bc963982c5be7d855", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_version__display-xml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "258f08e34a8dc36e7d5a6c2457526f563172ee3a0ae2f3dd89b93d48d114a883", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_running-config", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e18498e855071e4d4a55d27f71e02cdfc2aee209a9fb1161c0fc260bae9d119c", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_processes_node-id_1__grep_Mem_colon_", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a6dd7743eda61e2a7a4b5baea468a5bd9093790b50004f1d2977db910f65065c", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_version", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "06298058714a4f3e00626004aac888b8cee0e93fc322f78b63902c2ee3daba6e", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/os10_config_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8cfd0377665f893639236d5f87e031a944966b24439fb243962d1c1565069e59", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_lldp_neighbors__display-xml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c4aa2574cf8851166f5d42f53a3c9c4ce4c1c1d42f459d8e4c6f3aa5e8302493", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/show_interface__display-xml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b18e0c951436423f17735b55c4e9db9348402ffd8ec6e384fd929efe88d7386b", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/fixtures/os10_config_src.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "55739f1fb3c63abe984ffcc2c663d1c66d4c5ad90a05d48ec2bdb2b8da1b8da9", + "format": 1 + }, + { + "name": "tests/unit/modules/network/os10/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "tests/sanity", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/sanity/ignore-2.11.txt~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "348a0bd6bba19bb789729af3754ead9f94554e7e8d2923098284fccbfe71dc1d", + "format": 1 + }, + { + "name": "tests/sanity/requirements.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c8a4ac4bfdef88e75d6e748e35a42fb4915947dfa2b7dd788626fd829600e014", + "format": 1 + }, + { + "name": "tests/sanity/.ignore-2.10.txt.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e133d8cdc2caf059defbcdc724bc7a4c0fbd6feed743f1fd4f54438f575bcb3b", + "format": 1 + }, + { + "name": "tests/sanity/ignore-2.10.txt~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "348a0bd6bba19bb789729af3754ead9f94554e7e8d2923098284fccbfe71dc1d", + "format": 1 + }, + { + "name": "tests/sanity/ignore-2.11.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "58d0e17732c82b543be56cf281c1201d627125da7beb72bee8dde0b084179340", + "format": 1 + }, + { + "name": "tests/sanity/.ignore-2.11.txt.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cdbd4947092f258ac7466be207da22f1a4fb1556b5e87f3cb7b4ca365b961bf3", + "format": 1 + }, + { + "name": "tests/sanity/ignore-2.10.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "58d0e17732c82b543be56cf281c1201d627125da7beb72bee8dde0b084179340", + "format": 1 + }, + { + "name": "tests/sanity/ignore-2.9.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "86431366a822d878b060f84a453fc3962a9d4fc8d312b2d519fccf1d662ea30c", + "format": 1 + }, + { + "name": ".gitignore", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "258e4be3cfda40797fe734b375b6f94c110c9a9bebce196fedce319a457ce720", + "format": 1 + }, + { + "name": "roles", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "386719d04640b69c6852d8c8384bd8501e5d2f955026014d383b3f6533b442b9", + "format": 1 + }, + { + "name": "roles/os10_vrf/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_vrf/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a8d9410432844f8dc85022738544ba585f5913e870a5e01942d96e0e340ed99d", + "format": 1 + }, + { + "name": "roles/os10_vrf/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4b39e5f6d223be657b598c57f645780fc7702ffe172edcc6d54acda11a4897cf", + "format": 1 + }, + { + "name": "roles/os10_vrf/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/templates/os10_vrf.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "efdc1703a845b53bf89516f5c00fdda272125c03826be93f04cf28ced504703e", + "format": 1 + }, + { + "name": "roles/os10_vrf/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "48333a7f4910ad871d4166baf30acc13b4ca8272df8e755cc8ed8d230859ae5e", + "format": 1 + }, + { + "name": "roles/os10_vrf/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "20318378249dcdecd863ac6dbf6e9c974e9405508ef0044fb60a9df87bdfcd6f", + "format": 1 + }, + { + "name": "roles/os10_vrf/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "25b33f208a9b255533b417a2789bc76b7e861b2660d99766a4990c2df201c30a", + "format": 1 + }, + { + "name": "roles/os10_vrf/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43a4548f4d185e37899418fbd9cb45007f7abd47d9e6c6bd767d5f528e0b7eb2", + "format": 1 + }, + { + "name": "roles/os10_vrf/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_vrf/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrf/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d45c4bfac82a5c80b7b0084b90a3a9c8df9209e02c335987292be4bed9cbd071", + "format": 1 + }, + { + "name": "roles/os10_qos", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b935d4074fe7dc13aa1fe04076c98d505af414c0733ee7e455be14da2f50537d", + "format": 1 + }, + { + "name": "roles/os10_qos/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/tests/inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2af66e1e4a6ac23b147f9221e9c52e0c1b0756cd9d0acd33ebc6273e94cdcd3f", + "format": 1 + }, + { + "name": "roles/os10_qos/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6d86ce4aedcadcb72a47078a74734369917f32c3c27c1b6b5e997174fb618bd3", + "format": 1 + }, + { + "name": "roles/os10_qos/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4012c691ed8545d2820f04721035e599d78a0521706aff7fa1d1808627d28d54", + "format": 1 + }, + { + "name": "roles/os10_qos/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/templates/os10_qos.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04eb355caed6674616fb61d6bd5326a721937c54bdf77a52a90ce0bf69e5b0b5", + "format": 1 + }, + { + "name": "roles/os10_qos/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1af7dfa2b058753cbddd43826c703f09173f4eaa9ba04f7cb4eadcfc5ae0970f", + "format": 1 + }, + { + "name": "roles/os10_qos/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "25451af055cbfa149bbcfb9e931bf6cb33cf3014a2a94e5d7c52cd19f8ba822a", + "format": 1 + }, + { + "name": "roles/os10_qos/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "769984874a273a9eb32760bb64b4cb5da59f4fbe482f24dff3d9f4cb3a6f9a93", + "format": 1 + }, + { + "name": "roles/os10_qos/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f8741408dd745230550168b627a77abfbf367803b5a0e73edf56a337e2a11477", + "format": 1 + }, + { + "name": "roles/os10_qos/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_qos/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_qos/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ba51d4193d632320fda2caf2c12cd37c99dd3c2d2b7eb20b802e65caa9c87efa", + "format": 1 + }, + { + "name": "roles/os10_dns", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5f254575f9d9453da00af2eed90b9a2a5c7ec787f5caacac0b79c2ae3a9388d", + "format": 1 + }, + { + "name": "roles/os10_dns/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "94f9aebb9791d2731255777fbefe23c60fb22149d6cb6943a4f6929baf4d9689", + "format": 1 + }, + { + "name": "roles/os10_dns/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_dns/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "43934ca8dcf90dbae738eee82b489df8e54d4a897f4f0e3aa7b89512cac2be6f", + "format": 1 + }, + { + "name": "roles/os10_dns/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/templates/os10_dns.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4888c3203fcf4d25339f7d1776d13cc143c516e655af0df26e5d139839d3bb09", + "format": 1 + }, + { + "name": "roles/os10_dns/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5adc81357a3738e7a94b9e4a6ecd2c784219131ec203bb1bcd305fb472a03ff", + "format": 1 + }, + { + "name": "roles/os10_dns/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da15b3c7b3ca860fa29c2b18580dad7256546e7fff3d4f60a213050ef38efbd0", + "format": 1 + }, + { + "name": "roles/os10_dns/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04ee6ff105792050e1812070d4cef75c1e18612e5eab0c7847f1c249598efcc0", + "format": 1 + }, + { + "name": "roles/os10_dns/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "864243055c727f0f5935c1f13bb6f44783890d6762922ea90a88e9eb3ad4a384", + "format": 1 + }, + { + "name": "roles/os10_dns/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_dns/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_dns/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e713093e28077901633582e5023d6f6336be1f394f0b07bdfd484d4539077fdf", + "format": 1 + }, + { + "name": "roles/os10_interface", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "643d0268d34f959605cdf9efb5b12ded6a3d6dd9266b9e6c77acf32bda289566", + "format": 1 + }, + { + "name": "roles/os10_interface/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_interface/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c11d6313eb55efb47ef63b578d91d89c572bd797356a6fd204973ef2d84a5323", + "format": 1 + }, + { + "name": "roles/os10_interface/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e8c70ae112f0b6eedd6f7df1ada479e1a35ba8d1b584270dfd2bde6e207fe38", + "format": 1 + }, + { + "name": "roles/os10_interface/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/templates/os10_interface.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c5bcfbe38fc6197f7d30ed28fcd1f635175a39d37db47011fe12546aca96668", + "format": 1 + }, + { + "name": "roles/os10_interface/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7ac54c9ccb6409b6e8ffd41ffb96db8384a1ff03addf9e25a34e3565fb1fc6d", + "format": 1 + }, + { + "name": "roles/os10_interface/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ecfaae6853318db03899ad122d13731cdb4058ee4e77bb802d64ac0c6ea20824", + "format": 1 + }, + { + "name": "roles/os10_interface/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e5b8ea5bb8a09389a1eadc1eca701b5e9b0f073f5d748b6f28b4cf1bcf0869c", + "format": 1 + }, + { + "name": "roles/os10_interface/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1db1c2b5ac629c9ea3cc9f1c0fc8d56fa230cc1c8a85a7beb975f01a210aee54", + "format": 1 + }, + { + "name": "roles/os10_interface/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_interface/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_interface/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "75d2a975b644cd7fef6108087c834dd4c144810a9945876f9b979d87fcdb3639", + "format": 1 + }, + { + "name": "roles/os10_prefix_list", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97ac09431658905e91560bfca9e5a79164c0c41d49b35417bb530963161d105c", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c5efe4259fe1e8fa9a662aca40abf418b0f48eeeaedf7c59eddd06974f5b1179", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e6e5429b918bcd489a5a07c21f480989d5eb72304eba5f524552b0a899b45fde", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/templates/os10_prefix_list.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7166b7aa4a5eadf5d7036b25ae7e6718b109f909cb768acb963ef6c5346a46bc", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "683ac64d2b9636f2e1469e8d738b88749d6896649b136c62d3c6321512c5a887", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "476f80dc41f83236cc4af3af174451d89d4588cc42ecc1a4e2a3d5b43f63bb3b", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ea5b0afaf9945f59836bedcc4263108995086fd6962443f29658bd8245996c7f", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e9f0a7fc55900b2dd1b724ef42637c401bab31748414f4db0c99c5bc73a1274e", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_prefix_list/meta/.galaxy_install_info", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fff6a8db965bb26187afecc326a56281f74bcde1d5759bedf9874c72aba696fc", + "format": 1 + }, + { + "name": "roles/os10_prefix_list/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a592727b6802b1e47956477d630a6d0f02ac3f38e9ff42e67ff4b00ce553abca", + "format": 1 + }, + { + "name": "roles/os10_system", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9f208151c78ce7fd39c4fd5538679e140bd9860f7f9f53555c36f458efd0234a", + "format": 1 + }, + { + "name": "roles/os10_system/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_system/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5c174145b3348883c81c119c7e941ad4da952b0d02001f04b80a942108939867", + "format": 1 + }, + { + "name": "roles/os10_system/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "520ed65df1e5f3526bba7d6021312a02df0c259019f0667209d142c2cf43ce67", + "format": 1 + }, + { + "name": "roles/os10_system/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/templates/os10_system.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "57e1e32fffef8663700e790e71277ad0e3b8e263f10d21965bcff7115e56898d", + "format": 1 + }, + { + "name": "roles/os10_system/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "238dcdae07f217c1e64583262f8fe18a6de757c5959172b49784e4183ac44516", + "format": 1 + }, + { + "name": "roles/os10_system/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dff73f186ab1079802c73fef50e8e7d533fcf7aa8517cebb39425d6e2b8a18e4", + "format": 1 + }, + { + "name": "roles/os10_system/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e1b14922fe9bf4d9ac307185d8dff8eac7d98d2e33c6237a2b08558ced95061", + "format": 1 + }, + { + "name": "roles/os10_system/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "894b1ec35a60fea55d969c548964de6bb89a50cffbb1ac42cbed481768c4f032", + "format": 1 + }, + { + "name": "roles/os10_system/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_system/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_system/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e43a6cce922b7e77005b4331d27fe3cd205617abe34dcbeb34aaf7f0066e1c89", + "format": 1 + }, + { + "name": "roles/os10_template", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_template/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "154a63fcb1116b2ccc8e73620563975ba771dc9db62acd6f07354ed82fa4d9a7", + "format": 1 + }, + { + "name": "roles/os10_template/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_template/tests/group_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_template/tests/group_vars/all", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b1e93949330f1a344c787df97038cfa6d122285f204fb3a1b6385603c2d248c", + "format": 1 + }, + { + "name": "roles/os10_template/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c21302855000db5fd5e9f1573fdc03b97a7cbe3392efe3e0013da373dce3596", + "format": 1 + }, + { + "name": "roles/os10_template/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b134978967ac2f8ef1951c1246c196caaba06421ec57bccadb8498514e06c26", + "format": 1 + }, + { + "name": "roles/os10_template/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0e703d610802949e54787230fc461f04ad2a8af5e9e65533c6f53d8ffa19c345", + "format": 1 + }, + { + "name": "roles/os10_template/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_template/templates/os10_show_ip_bgp_summary.template", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6f8b1427d59f64f9f23c9ef60b44e3adc2ad5cdb6af65d169ee3542e3df7a226", + "format": 1 + }, + { + "name": "roles/os10_template/templates/os10_show_port-channel_summary.template", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4be2ecbcaeaf7c87edc4dc1c317b50bc90a11e42f3b06178bd58cf8370f15205", + "format": 1 + }, + { + "name": "roles/os10_template/templates/os10_show_lldp_neighbors.template", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "48f9d390a818cb19307f186e715ca09ca0c477666c45e4f95bdc9f00c32d01d7", + "format": 1 + }, + { + "name": "roles/os10_template/templates/os10_show_ip_vrf.template", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bb3661256bf365afd209f1b3cfe63acff96ed605870795452166f0d50359dd3e", + "format": 1 + }, + { + "name": "roles/os10_template/templates/os10_show_vlan.template", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a7b08a9326f7dd8d9a0512cae918f1903a44a55f24e2cf62b8478316fbbc8254", + "format": 1 + }, + { + "name": "roles/os10_template/templates/os10_show_ip_interface_brief.template", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "09c504a2eb0e35fe79e85c2d5b9b417b1c5545583a122bd353563fcac6631fc8", + "format": 1 + }, + { + "name": "roles/os10_template/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_template/tasks/show_lldp_neighbors.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "65b5436254aaf10a5d77b354cc322a5405cc4c44d7a16fa39aa670b0fabe6afa", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/show_ip_bgp_summary.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b51a689d0b09d992ad8b492a754d5e7d6af449f9e801c241738362b211438753", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/show_ip_vrf.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "72b260949bcfc2535794d50deec940eb04f38f8209a7d965f779d81e582c3ade", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/show_vlan.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9118d65024264927e657487606ac92a4eaac1a29d14286886f40194053d6d486", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/textfsm.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a76b1f05772eafab2d95e4bc644a314d97a6a727d7ccb85cce45372081e3c98f", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/show_ip_interface_brief.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3138ce2648d4507a62425dbb76d035083c5bb5310799e619f394b3cc19ff7676", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bc82bdfd47e1866697fdabb0f2cd3d807baa89dd26839dc0f7af477986e5c54f", + "format": 1 + }, + { + "name": "roles/os10_template/tasks/show_port-channel_summary.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6fc9a394046acaec5d9819cb11311d1d39b11c699313e734748fc802a108b4e4", + "format": 1 + }, + { + "name": "roles/os10_template/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_template/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_template/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be70f3f8008d9eb8f8f6012880e576ab29edd59e1c92698f93109d88d2ecff93", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "700e4522b0fb6dd91c4baadf9498a2d81384e649b1b264b6db3523c2eca5d213", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be466b34cc9022a3ac02ae77d8b801efc3609a7cb04f1883a4f3ff4f4469fb1f", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2754f0e1d88508b9378acc6c770239fe810d7149765ccde298e9ec2d15359f2e", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8fd54e1550ea6b41b6272e12f8584779ce043ac0e6a4ef2ee44de2136855bbb6", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/host_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/host_vars/site1-spine2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ed1347840622bc1fd1304558157877cfe22064f0e7b697390f14eebf729e002", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/host_vars/site2-spine1", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ed1347840622bc1fd1304558157877cfe22064f0e7b697390f14eebf729e002", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/host_vars/site2-spine2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ed1347840622bc1fd1304558157877cfe22064f0e7b697390f14eebf729e002", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tests/host_vars/site1-spine1", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ed1347840622bc1fd1304558157877cfe22064f0e7b697390f14eebf729e002", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d9a710654050c8ec0ff24355c999cc7d6b472d30059eafacba139853c5e97b6d", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_fabric_summary/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "72f2a96b9a15847e7e948bae69d8318983d42a7e1e14718484d5f060042206cd", + "format": 1 + }, + { + "name": "roles/os10_bfd", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fd3300c34cfa3713a5efec3ece1401e3d20c0c15a87ad2f4cf6c3d47ef538a7a", + "format": 1 + }, + { + "name": "roles/os10_bfd/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9209c2609e24006f7a95935b3a9c342d776dbe31f537a5f445b9f39c5a7ba8b0", + "format": 1 + }, + { + "name": "roles/os10_bfd/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_bfd/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bae4876627be0da4ae45c11f4e3d14686c98c15ad6ff7c65c95f22a93cbc3998", + "format": 1 + }, + { + "name": "roles/os10_bfd/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/templates/os10_bfd.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8686cc925b9c907512f582c0af0a5e5daff0ea1a9f3818d7f210c2cc3d8b3bc0", + "format": 1 + }, + { + "name": "roles/os10_bfd/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "814fd791e0988bf3397ef69f8f8bd4bf97910fa390f6e9697c2bd8b5cd326457", + "format": 1 + }, + { + "name": "roles/os10_bfd/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "37924af5558f6ca24c1399f212fd0c7de703cbbbe0814cb253cebf09ec03b43c", + "format": 1 + }, + { + "name": "roles/os10_bfd/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dbac54437ce53f90811f0472a8e9f242e17c5cab85fcad5faf818b5e3dc61f8e", + "format": 1 + }, + { + "name": "roles/os10_bfd/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9893b6a378c9bab4d39407e7b9ef878ae7d25ae68134bbc6f4156ed49c682d2c", + "format": 1 + }, + { + "name": "roles/os10_bfd/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_bfd/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bfd/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7f535c91de0a7152f3e8b34e50696e9c5c17b3e0f303e5a0500a7dcf1ad07f1b", + "format": 1 + }, + { + "name": "roles/os10_bgp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1fa1e2638a940b65a8ac34c75654f8485c6a9081a59cbc483816ed20c61a576e", + "format": 1 + }, + { + "name": "roles/os10_bgp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_bgp/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f086475e6199672eec2fe55b746104230b3f5d57b0527a8bb1d7e1da334fd274", + "format": 1 + }, + { + "name": "roles/os10_bgp/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "829f2f19e06879ef781c9f42fbdac798699b92b0aa4f1fa03c20230707ae63ea", + "format": 1 + }, + { + "name": "roles/os10_bgp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/templates/os10_bgp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2bde1642760b9049751f7e28f59799387f75b2fd26fd22ce4f72876263395228", + "format": 1 + }, + { + "name": "roles/os10_bgp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ce824753ae5e51d5096c4d0330d02c7ba7ee2a4d1e9950557457ede4d51ea79", + "format": 1 + }, + { + "name": "roles/os10_bgp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "554908747a3a38554d8d546ac6df4d952dff072db5e5a6887a0e51d0fe92ffee", + "format": 1 + }, + { + "name": "roles/os10_bgp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d2410d1e75d200951a1a323149e6a4b95cfc6fe198a3f068a20ca9049c353bb0", + "format": 1 + }, + { + "name": "roles/os10_bgp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "18e3284fe021e3ccd315d1ee37fb1e50fff6db3dfb39600d22dd13da0339cad3", + "format": 1 + }, + { + "name": "roles/os10_bgp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_bgp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_bgp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8b2e840c2981c38c49f6c8c729312b412b66b6ca2622bc94e38540d446ccc977", + "format": 1 + }, + { + "name": "roles/os10_vlan", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c910d16d4c32577e37d83bedbc2cb002fbfd4f8c7093d73f2884e491a18aa10e", + "format": 1 + }, + { + "name": "roles/os10_vlan/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_vlan/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "90d75c30cf368c94b15f0e67f5dd42bf3be7079727ce68799344fd7fc8f09fed", + "format": 1 + }, + { + "name": "roles/os10_vlan/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a7e6522987551969174daba5973aef288aa6ed91b59855a3406bf2e31ffd6632", + "format": 1 + }, + { + "name": "roles/os10_vlan/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/templates/os10_vlan.j2~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cb84e5374b15872f363a7098b13f5f1347c42cafc513af851fcf19d543728525", + "format": 1 + }, + { + "name": "roles/os10_vlan/templates/os10_vlan.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15464f8002f75d8bee3cebf5c25e9022c21b1cde37987ef8159d768fe8da3ffb", + "format": 1 + }, + { + "name": "roles/os10_vlan/templates/.os10_vlan.j2.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5b4c8790401ddfbd975c8439017b4b1a742f62aaf1fd6a77c9f293212cc4aea", + "format": 1 + }, + { + "name": "roles/os10_vlan/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f6464d917fb54d60e7c03c4f437e12795452246458aa27ea7f674afcdf744c2c", + "format": 1 + }, + { + "name": "roles/os10_vlan/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1e2317f1dad320074b0d71bd2416faefc5007ba40dcd99c196ee79e23cd5ae6c", + "format": 1 + }, + { + "name": "roles/os10_vlan/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e05831587de755162befd688ae927a8b92504f7d7c4e5cde6ce67cf35f7f980", + "format": 1 + }, + { + "name": "roles/os10_vlan/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fe8c107015a54e155ce06dace6919d89837d025d667cee3dc293ac602b7e9b46", + "format": 1 + }, + { + "name": "roles/os10_vlan/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_vlan/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlan/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8970684379fb0f71b0752e70e3b09791dde1e20117403ff98a06333fce205b3a", + "format": 1 + }, + { + "name": "roles/os10_lag", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f26de2ee58e56a99652cb06ff7eb7794fa091be564b72f978b4cd933bb18ac5a", + "format": 1 + }, + { + "name": "roles/os10_lag/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_lag/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fdd9b082fe66bcf825e22a7a2bdb09b5ee000bfca5631a68f97f34bf0dc5e5a9", + "format": 1 + }, + { + "name": "roles/os10_lag/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "42e8ff164312c486ba66a307d8d43c11940ab66a73fda890a316dad2fb49edf9", + "format": 1 + }, + { + "name": "roles/os10_lag/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/templates/os10_lag.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "80d8472ab536a0f16455a593f63ebda55772ee6c9c55ba0f0086f90b79627949", + "format": 1 + }, + { + "name": "roles/os10_lag/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "06492dafca5b9e2d876862aa59bed0855b2a42016f1cf0199846e78d308c90d0", + "format": 1 + }, + { + "name": "roles/os10_lag/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6081a52e02ebdba4b6d50bcf7b939ed072437e0cdbdbf26dbe806e824a03a79", + "format": 1 + }, + { + "name": "roles/os10_lag/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8727a9d0a9b2dfc2123c386c937fa24f137c6f0bad31a0278df0af3eae4b9351", + "format": 1 + }, + { + "name": "roles/os10_lag/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8f80595af9a680584548d1c63a9ec37db0e5d9dc9330824a77640170772ce43c", + "format": 1 + }, + { + "name": "roles/os10_lag/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_lag/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lag/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "596b282692b0c8b54557287c0cac0a30077a34ee1a5f3443cf4e84397750945a", + "format": 1 + }, + { + "name": "roles/os10_ecmp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e5a99c0fc021cf8993d8d31973e09e7e1d42f86187b54e6df944a2ac9f6c4c5", + "format": 1 + }, + { + "name": "roles/os10_ecmp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_ecmp/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dc8b26d113e94f68344b0a73022ec1b6642bee0fdabbd049400860da31d9b36d", + "format": 1 + }, + { + "name": "roles/os10_ecmp/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f5263eac7a34b93e945d4a7703a9fe87f41654453f3b2929583c254c3565967b", + "format": 1 + }, + { + "name": "roles/os10_ecmp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/templates/os10_ecmp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e8acfc826d6090844b4928084c3710b27fac5075987d2a7647a1bc8210794e3", + "format": 1 + }, + { + "name": "roles/os10_ecmp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ad97aa8409e0c4cf2cc23d2e313e208abf6b21e5eadb23d64f424f64b8307ff0", + "format": 1 + }, + { + "name": "roles/os10_ecmp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "763d31c712a86816eff6be981731088c42da2a5b0852f3f1fe57da56b57d7dc8", + "format": 1 + }, + { + "name": "roles/os10_ecmp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5dac42611a9fa57fa6a0a83cd60637d602055c4ae194635d550fb76f7ebacbb2", + "format": 1 + }, + { + "name": "roles/os10_ecmp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c0321e026416b7fd9c2f88159362e8d1f2b65c41beedb3f168fb92ca45f1b2d0", + "format": 1 + }, + { + "name": "roles/os10_ecmp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_ecmp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ecmp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e9c053d2bf170109e3fa13aea5ffb03a9db7441584555c8e2c1459027838dc3", + "format": 1 + }, + { + "name": "roles/os10_snmp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e9b0ce6371616701eb8bf72ac7a391acf34bdd7ff2f7498f66eb4a4ed026780a", + "format": 1 + }, + { + "name": "roles/os10_snmp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_snmp/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e5d59a283ccc11966a31af2db9d3183d83b78266a28e26b15f976b04c66c3a38", + "format": 1 + }, + { + "name": "roles/os10_snmp/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d56b04e4466345436a0cc5a245f7f275ff94faf68fcdad220014a6f92aaffb63", + "format": 1 + }, + { + "name": "roles/os10_snmp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/templates/os10_snmp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8334890fa78dfe6f595e46b74713fbf1f190859ad899fa2091733a13acc20e1d", + "format": 1 + }, + { + "name": "roles/os10_snmp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d2ec9577c90e062a77e6462626fbfb81baa3305f5f8626c7361bb8216b02f47c", + "format": 1 + }, + { + "name": "roles/os10_snmp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9c920ee69d360a4c5a573e78c544024df542232ccea968027262ad7158c641ba", + "format": 1 + }, + { + "name": "roles/os10_snmp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c5eb25123570c203b04de08fc2f50a67e1f447b0f91de636915d22948e194732", + "format": 1 + }, + { + "name": "roles/os10_snmp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "49b9ff32e4872ec4027678a862f12bd9f6a78180ba6ad2b5255e60c9521d5beb", + "format": 1 + }, + { + "name": "roles/os10_snmp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_snmp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_snmp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6f3be0e02ccdca4f08555041789a3a607c9fbfefcca1de808ff929d9388bdf10", + "format": 1 + }, + { + "name": "roles/os10_aaa", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f1dd8c823213a82ce252eb0a829b1df78341bc82b6316ba0e7919ad87a615236", + "format": 1 + }, + { + "name": "roles/os10_aaa/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_aaa/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "66751106dbf88e567300e2b0c835f27fdc1015a2f9da04bb1f22a0c86f4aa41e", + "format": 1 + }, + { + "name": "roles/os10_aaa/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ff5f1b96c5b4ec4a3f9e611de4e239780e7f88b93293fca09ad027129957b22c", + "format": 1 + }, + { + "name": "roles/os10_aaa/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/templates/os10_aaa.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "88e02f764a50d9d5131f21745d8b272717d8036f24b5aba516cee99d60b8138d", + "format": 1 + }, + { + "name": "roles/os10_aaa/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "65d59ffb82e5ebc61e867465058e9d6ae1669f9650498d5d27723dd3b4ae6a62", + "format": 1 + }, + { + "name": "roles/os10_aaa/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7e673f73970ee3ae369f22daa57f0a98574c0068cb8e6c3523dfe633e8be4dd8", + "format": 1 + }, + { + "name": "roles/os10_aaa/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "89cbb0d6f26de9476b2a98ac433755f227dbd7cf1d4458b26f402faafcbb3044", + "format": 1 + }, + { + "name": "roles/os10_aaa/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "873deeb7c99414c615310861f37813e789beb42962a6967c74256cf3a33f15d0", + "format": 1 + }, + { + "name": "roles/os10_aaa/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_aaa/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_aaa/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0370bc97b76c060488b25ad1265ffcad188037ceac6825a22554d9a65cafbb6a", + "format": 1 + }, + { + "name": "roles/os10_logging", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a389de86a67af80d45a48e3997557d7566df8aa3653bdde397fa9d78b8b5a863", + "format": 1 + }, + { + "name": "roles/os10_logging/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "59b2a3a4d5a95dd0991c773d92efb07e68bdd61da98b63dff97cc50ee751dd6b", + "format": 1 + }, + { + "name": "roles/os10_logging/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4959bb39ef5381cb61c508070e175d9a29649865be616e2557a35591d422a578", + "format": 1 + }, + { + "name": "roles/os10_logging/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9600c0f56aab9908ce0299c93e83503a959564caaf3479c0f28c08323061f511", + "format": 1 + }, + { + "name": "roles/os10_logging/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/templates/os10_logging.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "222ed2d729fe13d11e2837b6e7809c3a6b455ef066d96595f42ae2564199ced5", + "format": 1 + }, + { + "name": "roles/os10_logging/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cf4eba7564bf3cf20b2a11f28b0829615f2a1b8853ef5f10432e5e9b50b22fe0", + "format": 1 + }, + { + "name": "roles/os10_logging/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b685be74eefc0378442ad4dcd4be13eb1d1549f360ef93d05e2dcd642e6a7fa1", + "format": 1 + }, + { + "name": "roles/os10_logging/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac88e43708cc564df91c1e8a2ef9f0ee476f891e9a9999cef9896e92bccf3827", + "format": 1 + }, + { + "name": "roles/os10_logging/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5dc2d0ca8bead76638828a9b3b224a4263c4e5d0391990ac876a00d6da638ec2", + "format": 1 + }, + { + "name": "roles/os10_logging/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_logging/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_logging/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "935018e6dd62d4f57fc7e8be1320db76ef26bbb3ab5008bc861c44e50703dc41", + "format": 1 + }, + { + "name": "roles/os10_copy_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "620ba9a2f0f630240c645785df3eaa48a29d8c4151fe86137448ae878b95e88f", + "format": 1 + }, + { + "name": "roles/os10_copy_config/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/tests/inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2af66e1e4a6ac23b147f9221e9c52e0c1b0756cd9d0acd33ebc6273e94cdcd3f", + "format": 1 + }, + { + "name": "roles/os10_copy_config/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "16f179b8972b382463445d13f20888fcb5f5980e8b75fea8510d358e7d31355b", + "format": 1 + }, + { + "name": "roles/os10_copy_config/tests/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f52d711103d50a437830c6fbcd04fb4bab49a0f82f6d26d1c791c6e8488dd090", + "format": 1 + }, + { + "name": "roles/os10_copy_config/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/templates/leaf1.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b8eb520d7a9795fe75d13de190e17201d77da82d4f04674e185dd7dfd66ff0d8", + "format": 1 + }, + { + "name": "roles/os10_copy_config/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d8f7b3839a275bb1dda6cc658b7818f060276dbb1297d7ea5927fd33201ef64f", + "format": 1 + }, + { + "name": "roles/os10_copy_config/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "24b3fb3075b12ef503f3c3df760955b01f8fd64d175ca9435c4cff4fc542421d", + "format": 1 + }, + { + "name": "roles/os10_copy_config/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "652608725cb8231e6e56806713e1cd1613fba1240f53702b9bddf31a1aaf1155", + "format": 1 + }, + { + "name": "roles/os10_copy_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ee2c451634d02a007d669a1ffaafc9715f4013fcf34efb55c391f1aa76d83b41", + "format": 1 + }, + { + "name": "roles/os10_copy_config/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_copy_config/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_copy_config/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "17a4f025b9e7eda4c229c8b319b2f5e342d00d2314b53fae442b4773ba83f844", + "format": 1 + }, + { + "name": "roles/os10_uplink", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b397db9b9314ab9deebaca623b32c2a12731102aa9ad964d851460876ebde495", + "format": 1 + }, + { + "name": "roles/os10_uplink/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "174f8113fac66d0c5cb0ea967a222087bb87cbdd53d157ba82224194ed89ebf7", + "format": 1 + }, + { + "name": "roles/os10_uplink/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_uplink/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "606b5622997bdf5ac5a149016a56a7d09d2e1a06ffac37650e683898958e186b", + "format": 1 + }, + { + "name": "roles/os10_uplink/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/templates/os10_uplink.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4e67a10cc82b935d245200895573fd6de91e5f879ceedac16a08f280f915d9d7", + "format": 1 + }, + { + "name": "roles/os10_uplink/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8c18562de4e1361b781112f1d25b7085081988ed1c4ef81d4bfc3f7e0de97879", + "format": 1 + }, + { + "name": "roles/os10_uplink/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "70bb18eb36b126dd6d0e08692b8ac60c823da65b388684241d263e966a521adf", + "format": 1 + }, + { + "name": "roles/os10_uplink/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "28fa2ba1a0d18a45d80a2fe56bef42892b653a49c1a9e273a32c66db4b259b10", + "format": 1 + }, + { + "name": "roles/os10_uplink/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3a08ced67e2d18f14c3f98a7861e7c1e90676cb98403ff9a194b18841b288632", + "format": 1 + }, + { + "name": "roles/os10_uplink/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_uplink/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_uplink/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e48425fe0a4c069ee2bcd1b326515d3d883156c8c6427ec3acc9145cd194aee0", + "format": 1 + }, + { + "name": "roles/os10_acl", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c80f3b4260002fec8c8895fa00cc496e23cf3103c4cb787fdd6bd32436897adc", + "format": 1 + }, + { + "name": "roles/os10_acl/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_acl/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15d359c83967d4c8065ec202d71f08aa9cfb9cb2ea7f8515ab938298cc7176ea", + "format": 1 + }, + { + "name": "roles/os10_acl/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1d1499e88988365d216eea4383d3771a7da6c7808491aedd366a64a2c26b5bd2", + "format": 1 + }, + { + "name": "roles/os10_acl/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/templates/os10_acl.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "82f512798eafa8b85f27f3caeded8da7e66d80c228d9694c9fcbdbb2056b4e87", + "format": 1 + }, + { + "name": "roles/os10_acl/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "32411f8c331dd03641c3843c4e633b9a186917210b3512149a6d67d8bf0ca3ee", + "format": 1 + }, + { + "name": "roles/os10_acl/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7aa31675d890ccb8f2cba267762146a856aa260fa76793226ad6d1018d767706", + "format": 1 + }, + { + "name": "roles/os10_acl/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "62b435c90d0cd1f418a44a14ea7ba9a0e3d6cce0237c404855a09899abbdde78", + "format": 1 + }, + { + "name": "roles/os10_acl/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "600f3b1f85b778b3a28616390bf94bb4cdb87fbf6bd7372680313c6465205450", + "format": 1 + }, + { + "name": "roles/os10_acl/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_acl/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_acl/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "21cc5b51e05746b675b5a608ae85f7995013476dec3e92c2db809665a4aa5441", + "format": 1 + }, + { + "name": "roles/os10_route_map", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f91f7fd28d3f5164c77cbeae889e2a22b81c720c6879ce7a6a0c27799c20893", + "format": 1 + }, + { + "name": "roles/os10_route_map/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e94645bfd865f3f6ea64b8444a2a6123d65d6ffe7822eff765531ddf59fe5385", + "format": 1 + }, + { + "name": "roles/os10_route_map/tests/inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2af66e1e4a6ac23b147f9221e9c52e0c1b0756cd9d0acd33ebc6273e94cdcd3f", + "format": 1 + }, + { + "name": "roles/os10_route_map/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8f11741f11a0f817750f2fcf95e5be2131344ee420991fedc314cea9a1e8a044", + "format": 1 + }, + { + "name": "roles/os10_route_map/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/templates/os10_route_map.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "44398b74953c02cc8b8d52f41c6a6d8a00ef3aa5e3a6a4f0944f3eb489570678", + "format": 1 + }, + { + "name": "roles/os10_route_map/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d5202f1d5be26d843f185ad282b2a9c79219f29c3e25bb9142e1c3b6aab7c0d3", + "format": 1 + }, + { + "name": "roles/os10_route_map/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9b5223df0608509782741a0b1b1d620489bfee39a22271879a33be226d563e75", + "format": 1 + }, + { + "name": "roles/os10_route_map/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bc5a3a60138702f492afe0615ad779ada4907a0d291ca6f9cd0db99727d5a835", + "format": 1 + }, + { + "name": "roles/os10_route_map/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "feecce89b8551e332335a6ab8f776b01bbc9a28a1646402ea4df83a78a2e2986", + "format": 1 + }, + { + "name": "roles/os10_route_map/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_route_map/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_route_map/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d27725f7db1d7be5e903da8556375be380be2e292991c95d938dcf4de4dc15fb", + "format": 1 + }, + { + "name": "roles/os10_vlt", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e5894a3bdbe4c47da15788f6031cd84115458c31faff6cf7a7b1f985e4a688ab", + "format": 1 + }, + { + "name": "roles/os10_vlt/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_vlt/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d0a27dd63de43769b735d5b49bb2c38ff6ceee6044829802eedb26e876c6764d", + "format": 1 + }, + { + "name": "roles/os10_vlt/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f7c495a659acb9a65c70f99751b8c8a93fff3634bab273a9f5fe4a173372884b", + "format": 1 + }, + { + "name": "roles/os10_vlt/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/templates/os10_vlt.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "25e140862387419273a5c85f3c2c28ef342b13d22554027854e6694ab7f676db", + "format": 1 + }, + { + "name": "roles/os10_vlt/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c826942d39bbbe07afa7ce5ec6b25dd1bee3c45973217a9a8f914c61bc15dd1d", + "format": 1 + }, + { + "name": "roles/os10_vlt/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c99502dbf1431a5fa3b9f6c33bd479eca09dc7c718747b50745904118afff4b", + "format": 1 + }, + { + "name": "roles/os10_vlt/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7084e3f87a0be344172701e0fa030f9739ebb915b6c29e6782044f64b7742348", + "format": 1 + }, + { + "name": "roles/os10_vlt/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "637efe3f2b6ae54f972d9d684751267071fef192150794156b1cf900eb9dd4ba", + "format": 1 + }, + { + "name": "roles/os10_vlt/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_vlt/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vlt/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c086a03ccf6da3e70cb9405ba5fe964a211bcbfc2ebd711ec88fa1de71d76339", + "format": 1 + }, + { + "name": "roles/os10_lldp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a25f28d2bd25ac6b08b6655b234072b747651b1e9a12989d9f994829761db938", + "format": 1 + }, + { + "name": "roles/os10_lldp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_lldp/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "67910b8f7cdd4a708e661f8e9a91ef97535ee5bd2361770a356b87a2a441af36", + "format": 1 + }, + { + "name": "roles/os10_lldp/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84a67763842eb34ce0679295153beed4257949d0a4a2b3591eea13e1b640be41", + "format": 1 + }, + { + "name": "roles/os10_lldp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/templates/os10_lldp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1dd15229ab1883772f6bd6e65a9fa564d88b54d3bfd979c937b11ef9e3b22190", + "format": 1 + }, + { + "name": "roles/os10_lldp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c93bc619c8c0fecf9be10e8738df37455d98ce6ea8f99fb5b4866be24075f5b0", + "format": 1 + }, + { + "name": "roles/os10_lldp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0555b321eefc8953cf1654c41798524e402ad24bfe4e55a3ae5f93a6cca95889", + "format": 1 + }, + { + "name": "roles/os10_lldp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a914d650108a7d69cfba2c389021498b44a53e9c963e0d4e2e4f8863f5477a3c", + "format": 1 + }, + { + "name": "roles/os10_lldp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c931d17e150116110599ed116b9e981dcdeaa25c836b8efa7f45f084b770fecb", + "format": 1 + }, + { + "name": "roles/os10_lldp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_lldp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_lldp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "096051fa88a0f1150e45bee7378a41b58710ee89aec049e7368282325db779b1", + "format": 1 + }, + { + "name": "roles/os10_vrrp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec2abd96c909ed53e7bf3297565a6b999eff1f8f7e554fff02bde2f3f860489a", + "format": 1 + }, + { + "name": "roles/os10_vrrp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_vrrp/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "37bcf358ae65745173b3e91dd31f63b92e3180bd680546149c50a24ccfefdfb9", + "format": 1 + }, + { + "name": "roles/os10_vrrp/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0e0c9f92417513f3c21cb535c11e39a91156a37b676e9ae02639b54f5bcb9d3b", + "format": 1 + }, + { + "name": "roles/os10_vrrp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/templates/os10_vrrp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ea569e3efbe5591cee54852a1c4e93bdaa54e9affd4126a2c37dcdd228584e48", + "format": 1 + }, + { + "name": "roles/os10_vrrp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f89da38e4c4c6dc6f4fdc65d71e0c326b53e53ab28a342e6d0c4838ecb5a0e14", + "format": 1 + }, + { + "name": "roles/os10_vrrp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1ab26d1ff9cb52daa1da7d36ab72fbd9031c0cee28a4a9f2cd402e3ac61ff9f3", + "format": 1 + }, + { + "name": "roles/os10_vrrp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c31a893d2de4391bab63960327186e0030eb3b50d0d454a202b9ad32bf8c1605", + "format": 1 + }, + { + "name": "roles/os10_vrrp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7c3d38e722d0113e681e5bf451fdbf787b772038dab654419eab455874e6490", + "format": 1 + }, + { + "name": "roles/os10_vrrp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_vrrp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vrrp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bc6092e9bba6056bce1edf31b3b1d8ddd50562b4595a05b4714364a289fc3f54", + "format": 1 + }, + { + "name": "roles/os10_network_validation", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_network_validation/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b67dcae05d22abab98dbcb2009e1b39ba8dc045674e2e688a73c4a1b971e15d5", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/group_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/group_vars/all", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9783ff2c833041285b826cdd8818ff86e2dd4a036936057c2b786f90c5d94cfd", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be466b34cc9022a3ac02ae77d8b801efc3609a7cb04f1883a4f3ff4f4469fb1f", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "495543a435f037536ce83135c1c057b29dad18496dcec544d3d0d575412f8e57", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "42f12cce1d2096bd6704d0bded92f0f424f20f6f8fb6bfd43f512ea167a3d535", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/host_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/host_vars/site1-spine2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be466b34cc9022a3ac02ae77d8b801efc3609a7cb04f1883a4f3ff4f4469fb1f", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/host_vars/site2-spine1", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be466b34cc9022a3ac02ae77d8b801efc3609a7cb04f1883a4f3ff4f4469fb1f", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/host_vars/site2-spine2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be466b34cc9022a3ac02ae77d8b801efc3609a7cb04f1883a4f3ff4f4469fb1f", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tests/host_vars/site1-spine1", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "be466b34cc9022a3ac02ae77d8b801efc3609a7cb04f1883a4f3ff4f4469fb1f", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_network_validation/tasks/wiring_validation.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "30189cda8538ba54cce476840c54dbd7b65bae20b81fbe38b5cdd490d267121a", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c93acda8436ce1b6b8ae69b6e0856172c1d4442c95ad26510f6b091511463030", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tasks/mtu_validation.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e88ffb1bdbc1d5111fd4dbcaef9d05122d130f3d92686bc1476cfe8b92d6ed88", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tasks/bgp_validation.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3f231237fccf6b555cb5d603fa5ecb9a2520046052102546d0a49745c322516f", + "format": 1 + }, + { + "name": "roles/os10_network_validation/tasks/vlt_validation.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fc2caadd4b8c67806553d9a09767879e2705cb87b14561821761170b04aae114", + "format": 1 + }, + { + "name": "roles/os10_network_validation/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_network_validation/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_network_validation/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15dd45f3c6b3ef0b9a18068409f2fa06e7658ffa36fc536c61272f60cee19e6a", + "format": 1 + }, + { + "name": "roles/os10_xstp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1f7b8ff3703494a0a9c8f32b2efe8bf73d1755f51551f2c81fb24fa83cef9fe8", + "format": 1 + }, + { + "name": "roles/os10_xstp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "11dc4d3a7f27c9457cb1926ffb4b6941a5698b00693270702b83007f9e6be475", + "format": 1 + }, + { + "name": "roles/os10_xstp/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_xstp/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cbb0ce314389f1a1c62bd36eed69284476da8bdc35ca9f166e524da51a81bab1", + "format": 1 + }, + { + "name": "roles/os10_xstp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/templates/os10_xstp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "91106569ca0f82c69b3987666f2c0988e065ba8c72e6619f1eea38024d7bb459", + "format": 1 + }, + { + "name": "roles/os10_xstp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d104c9a45496afdc6fc6b1b6d0598bc7ba3fa9490bbbb0729aea0721ad6d9ed1", + "format": 1 + }, + { + "name": "roles/os10_xstp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "93faab9ab389ce95078149d446f7393e2f51b15ae26e4bc9e375b18e8f785ae3", + "format": 1 + }, + { + "name": "roles/os10_xstp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "de9efdcd059596d2c0022a19a60bda4e148339b8903195327c22898b690851bf", + "format": 1 + }, + { + "name": "roles/os10_xstp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3bdd9427e1adf15da19c43299ee9e0a80cb614aa975bda7d26c45d87f3853bfc", + "format": 1 + }, + { + "name": "roles/os10_xstp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_xstp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_xstp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5ac22166270a0ff74c299d9fc58db9a5775da1c050b2750e21db38e7688f573", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0cdfb61ac3b2edc88f002673d6f7e835ab72f85c11e10f15507fe0e452674f34", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/tests/inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2af66e1e4a6ac23b147f9221e9c52e0c1b0756cd9d0acd33ebc6273e94cdcd3f", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6acee5a1485b2936d50918c4eeeaf19e935b16a71eb313966613d5f7474af1d6", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/tests/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d5cc592c390f2fdb1b4d2522bd9d3ea1ef44c70f3c93b8f21dcccda6dacf8886", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e87e5811ae377b12e4ab55e05748fd9d633d451d50ddb27b944d35b3391030f", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fae119a8a8b829c96158bb18b129995bbd81bb1f4ce2816a56ebab6e5046dd7b", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f0fa971f5e8f6afc6354c45a243da50223bc28a3bd23544da6029d0ccf379b0", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f4a1807cbb9bfb1bf7d5236ead8df960f56b308a96c7d427bf9c751f2d59189d", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_image_upgrade/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "600ddfdb6ea8958552d6f3c4883ff14e03a03c5baa74fed28c824c69853a630a", + "format": 1 + }, + { + "name": "roles/os10_vxlan", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6269d37a551679fd7d6b5036ce1b8c67d2fa78f85ea422a57999d5e2b17d7b93", + "format": 1 + }, + { + "name": "roles/os10_vxlan/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "93ecaaa721e06f9dfe6714065578aab69faf978ec3d0a052a65dd42bbe45375d", + "format": 1 + }, + { + "name": "roles/os10_vxlan/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f488468fc00c1ebbcd411bccfb79c4c3f969cb4798f545ff04bed1ff9f060295", + "format": 1 + }, + { + "name": "roles/os10_vxlan/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_vxlan/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/templates/os10_vxlan.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b8c620c88dad78855c1d75470657add6b6945ae5033e7e365f6ca61eabf85cfe", + "format": 1 + }, + { + "name": "roles/os10_vxlan/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7b18d0a5d4f4eb08afb13a90bef216e62f14084a7c15c6fd57b2571d2202c11c", + "format": 1 + }, + { + "name": "roles/os10_vxlan/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "86f729a523490d39e8de987c937683b579d9fc5e2c02aad682fd5144d8da243f", + "format": 1 + }, + { + "name": "roles/os10_vxlan/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2b05d46988f0fe03752627f491afbfaf43beb317b498dbfcc186fd51cf9f116b", + "format": 1 + }, + { + "name": "roles/os10_vxlan/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "04323331ccbbbd6f0ed18972b31c11feef04c2fc82f73c276cf49b4c52bba17d", + "format": 1 + }, + { + "name": "roles/os10_vxlan/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_vxlan/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_vxlan/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "08bd15c1af2e5b93adb0c287cd8dbfb89a99c104330532596905cefd633378a7", + "format": 1 + }, + { + "name": "roles/os10_users", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "95ab7b68caed6e49b6e3fb9fa4e562b6258e56545f735aed2a3e028f28447a63", + "format": 1 + }, + { + "name": "roles/os10_users/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_users/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3cad1a913d91373fb343a45090749edccff3e614d29fc20b2be5dd62f1416839", + "format": 1 + }, + { + "name": "roles/os10_users/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "45cb5340cf0daeaa88ce3ef96d6b2f729a9587614b4f2da6d018c01c7007ed05", + "format": 1 + }, + { + "name": "roles/os10_users/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/templates/os10_users.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2a49fd0f145f2397a5320999f4fd2653d123355bd09b7f7f9fc7b08491530d7f", + "format": 1 + }, + { + "name": "roles/os10_users/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "54960fc84fea4a3ca7b680da71f0caf5673ed6cbfe2848b6896e1e09d80daf78", + "format": 1 + }, + { + "name": "roles/os10_users/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5143d119661a1b293a965db175a3e495924ba56ae668293c393f79803987a9ad", + "format": 1 + }, + { + "name": "roles/os10_users/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7ab0972fa0d373e24e87fd2a37bf2d364a35d608c968a8ba3855775c96f7025", + "format": 1 + }, + { + "name": "roles/os10_users/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e757c050d438aa41fd3489ca030b2505af98aa7fa58efcb2af15af9e49f86679", + "format": 1 + }, + { + "name": "roles/os10_users/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_users/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_users/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "51e8bbd65c9e3c0392c9cb365413149869fae597d2ed0d2d1f12b87e39f6ed91", + "format": 1 + }, + { + "name": "roles/os10_ntp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9082ac1ab7017f1b824e669313c7ed10485c1381e322f4d9b691f2ce244427e3", + "format": 1 + }, + { + "name": "roles/os10_ntp/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/tests/inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2af66e1e4a6ac23b147f9221e9c52e0c1b0756cd9d0acd33ebc6273e94cdcd3f", + "format": 1 + }, + { + "name": "roles/os10_ntp/tests/test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a8f0e26fd497d4af28b1f97246262a24e8e890e0b37c6e5045a7e59a75b1027", + "format": 1 + }, + { + "name": "roles/os10_ntp/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bca5f97127de4c4fc5386d8a971e8ce5942b6e1e615eb074a85f84ae3922e2fa", + "format": 1 + }, + { + "name": "roles/os10_ntp/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/templates/os10_ntp.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1787e086f72bea631e43bb0f1550dc3d191b9a25a3427f80ada4a1f50a7a830e", + "format": 1 + }, + { + "name": "roles/os10_ntp/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b6968045572c03408c0ae667b3e3d4bd618d7e44ef3569dc6afbb2f64c8aed3b", + "format": 1 + }, + { + "name": "roles/os10_ntp/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5e30177d599fcae1cd2a5ae7dbe5edb7ae61b54fe8abc8a4a291f7cb2e99cb04", + "format": 1 + }, + { + "name": "roles/os10_ntp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "46b08048f7cf3bbb33953c0eb377ae19d08d19d124af7845b354a32754e4c972", + "format": 1 + }, + { + "name": "roles/os10_ntp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ba28cab4f617eea38d6a9572d6600b035bf3b0aa6a9ea1f16b89c3bca0bd5fef", + "format": 1 + }, + { + "name": "roles/os10_ntp/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_ntp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_ntp/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "119e95d884e66b8699ce7cfb245ef9a295d0ad74f611e91bde10b8de1bf6b6c6", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c426ba47112502d0a4b51038b34acf0375f3931ff6e866feaf836e0366d2d44", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/tests/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f9521ae72a98e24c998e5ca8b57b37b6387fb46ea98bce475c300f7a998f5713", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e587cf6a0634eb27ebaa0d2b09186c2ab9c218b8691d5343d11a2aff7cb4e806", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f522718931e7b47c3e6d7f02a4c31981aa93f71729415a5a9226b098211fd167", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/templates/os10_flow_monitor.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ce701f3f7435a76af19d25fb2c0aef0629baea31f100fca4ffb2d715fa330cdc", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "da543209c815eaf6a292b7e3ba6b251d12218c7ac85973eeb5f347fc23f38d82", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5c69bd67ade82f83cb462931176842e1c15d45d254ed2867937539fde9240056", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5c4fb0eb22d434434842ef2e9f7a66cd480485a13ddedb7cbe4736776ee2660d", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d75f9ff91119f5b2c00a015c32634aef88d63f56446b8a49611baa94950a7109", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_flow_monitor/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "262699aa3cc3f5ca73c44807c385bafe6ace198d295ae0f4d8174c8432d27a30", + "format": 1 + }, + { + "name": "roles/os10_raguard", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "513fa53f3683643953831e0e8542ccdc438b56c8e11083f92c241af762058d85", + "format": 1 + }, + { + "name": "roles/os10_raguard/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/tests/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2af66e1e4a6ac23b147f9221e9c52e0c1b0756cd9d0acd33ebc6273e94cdcd3f", + "format": 1 + }, + { + "name": "roles/os10_raguard/tests/main.os10.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4249ee5e0837a3608674e0ddf5fe786819ff406046561c36d37faf53835a3c15", + "format": 1 + }, + { + "name": "roles/os10_raguard/tests/test.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "897b50f07fd83fdc9d4af3d1f95736df7de6587ecee7eb99656e896f11e57673", + "format": 1 + }, + { + "name": "roles/os10_raguard/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/templates/os10_raguard.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "45b2a163a3a6f4ed91a04eaf1eaf163744dc521e68bcc652f5b9204c8680ccff", + "format": 1 + }, + { + "name": "roles/os10_raguard/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/vars/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3d6921abe30008182bc51398fb297b2e3513e74192f97e5425270f274ee10a72", + "format": 1 + }, + { + "name": "roles/os10_raguard/handlers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/handlers/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5f107b00d4f91ef0488f02bad76bcabf32e37d36ac7dc4b3e13eacd93d7a2ddf", + "format": 1 + }, + { + "name": "roles/os10_raguard/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/tasks/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5076cf62b3808abcd72b0591f6dd79a0edfa2e24506c3c24a54ebeac0b52fc46", + "format": 1 + }, + { + "name": "roles/os10_raguard/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/defaults/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ba3c9242ffb63fbdee8e94263256c4607963147bc30edb716dbbd19760e3a000", + "format": 1 + }, + { + "name": "roles/os10_raguard/LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "roles/os10_raguard/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "roles/os10_raguard/meta/main.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a865bdbfcce0522277b74b9312d4264b3ed3b692d22a6bffd740a8c8cc021fa4", + "format": 1 + }, + { + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "docs/os10_bgp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1fa1e2638a940b65a8ac34c75654f8485c6a9081a59cbc483816ed20c61a576e", + "format": 1 + }, + { + "name": "docs/os10_image_upgrade.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0cdfb61ac3b2edc88f002673d6f7e835ab72f85c11e10f15507fe0e452674f34", + "format": 1 + }, + { + "name": "docs/os10_vrrp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ec2abd96c909ed53e7bf3297565a6b999eff1f8f7e554fff02bde2f3f860489a", + "format": 1 + }, + { + "name": "docs/os10_qos.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b935d4074fe7dc13aa1fe04076c98d505af414c0733ee7e455be14da2f50537d", + "format": 1 + }, + { + "name": "docs/os10_logging.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a389de86a67af80d45a48e3997557d7566df8aa3653bdde397fa9d78b8b5a863", + "format": 1 + }, + { + "name": "docs/os10_vxlan.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6269d37a551679fd7d6b5036ce1b8c67d2fa78f85ea422a57999d5e2b17d7b93", + "format": 1 + }, + { + "name": "docs/os10_uplink.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b397db9b9314ab9deebaca623b32c2a12731102aa9ad964d851460876ebde495", + "format": 1 + }, + { + "name": "docs/roles.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9f91d993dbc32b3691c9e2f79d51d67eda1493d0f0cea841a3cc2816fe1ca724", + "format": 1 + }, + { + "name": "docs/os10_vlan.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c910d16d4c32577e37d83bedbc2cb002fbfd4f8c7093d73f2884e491a18aa10e", + "format": 1 + }, + { + "name": "docs/os10_prefix_list.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "97ac09431658905e91560bfca9e5a79164c0c41d49b35417bb530963161d105c", + "format": 1 + }, + { + "name": "docs/os10_system.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9f208151c78ce7fd39c4fd5538679e140bd9860f7f9f53555c36f458efd0234a", + "format": 1 + }, + { + "name": "docs/os10_interface.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "643d0268d34f959605cdf9efb5b12ded6a3d6dd9266b9e6c77acf32bda289566", + "format": 1 + }, + { + "name": "docs/os10_ntp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9082ac1ab7017f1b824e669313c7ed10485c1381e322f4d9b691f2ce244427e3", + "format": 1 + }, + { + "name": "docs/os10_ecmp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e5a99c0fc021cf8993d8d31973e09e7e1d42f86187b54e6df944a2ac9f6c4c5", + "format": 1 + }, + { + "name": "docs/os10_bfd.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fd3300c34cfa3713a5efec3ece1401e3d20c0c15a87ad2f4cf6c3d47ef538a7a", + "format": 1 + }, + { + "name": "docs/os10_fabric_summary.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "700e4522b0fb6dd91c4baadf9498a2d81384e649b1b264b6db3523c2eca5d213", + "format": 1 + }, + { + "name": "docs/os10_vlt.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e5894a3bdbe4c47da15788f6031cd84115458c31faff6cf7a7b1f985e4a688ab", + "format": 1 + }, + { + "name": "docs/os10_flow_monitor.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c426ba47112502d0a4b51038b34acf0375f3931ff6e866feaf836e0366d2d44", + "format": 1 + }, + { + "name": "docs/os10_vrf.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "386719d04640b69c6852d8c8384bd8501e5d2f955026014d383b3f6533b442b9", + "format": 1 + }, + { + "name": "docs/os10_xstp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1f7b8ff3703494a0a9c8f32b2efe8bf73d1755f51551f2c81fb24fa83cef9fe8", + "format": 1 + }, + { + "name": "docs/os10_template.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "154a63fcb1116b2ccc8e73620563975ba771dc9db62acd6f07354ed82fa4d9a7", + "format": 1 + }, + { + "name": "docs/os10_lag.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f26de2ee58e56a99652cb06ff7eb7794fa091be564b72f978b4cd933bb18ac5a", + "format": 1 + }, + { + "name": "docs/os10_dns.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a5f254575f9d9453da00af2eed90b9a2a5c7ec787f5caacac0b79c2ae3a9388d", + "format": 1 + }, + { + "name": "docs/os10_snmp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e9b0ce6371616701eb8bf72ac7a391acf34bdd7ff2f7498f66eb4a4ed026780a", + "format": 1 + }, + { + "name": "docs/os10_acl.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c80f3b4260002fec8c8895fa00cc496e23cf3103c4cb787fdd6bd32436897adc", + "format": 1 + }, + { + "name": "docs/os10_users.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "95ab7b68caed6e49b6e3fb9fa4e562b6258e56545f735aed2a3e028f28447a63", + "format": 1 + }, + { + "name": "docs/os10_network_validation.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b67dcae05d22abab98dbcb2009e1b39ba8dc045674e2e688a73c4a1b971e15d5", + "format": 1 + }, + { + "name": "docs/os10_copy_config.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "620ba9a2f0f630240c645785df3eaa48a29d8c4151fe86137448ae878b95e88f", + "format": 1 + }, + { + "name": "docs/os10_route_map.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f91f7fd28d3f5164c77cbeae889e2a22b81c720c6879ce7a6a0c27799c20893", + "format": 1 + }, + { + "name": "docs/os10_aaa.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f1dd8c823213a82ce252eb0a829b1df78341bc82b6316ba0e7919ad87a615236", + "format": 1 + }, + { + "name": "docs/os10_lldp.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a25f28d2bd25ac6b08b6655b234072b747651b1e9a12989d9f994829761db938", + "format": 1 + }, + { + "name": "docs/os10_raguard.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "513fa53f3683643953831e0e8542ccdc438b56c8e11083f92c241af762058d85", + "format": 1 + }, + { + "name": "changelogs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "changelogs/.plugin-cache.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "602a5742cd030d1b27d3880caf6c85ccbed7be48461572ebc0f1ca9e8bff5ccb", + "format": 1 + }, + { + "name": "changelogs/.changelog.yaml.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ef9788e1c231c901756bdcc1d02a1b6ac4887b1de78954b09049aac0ace412af", + "format": 1 + }, + { + "name": "changelogs/CHANGELOG.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "61426066c2755ae9c4f2469494456baab007b40ece37cdebcc04320aae9c594f", + "format": 1 + }, + { + "name": "changelogs/changelog.yaml~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4d524d90b6daed4dc1365be9c85780a26b9ecfe7e5fda292e67ab306f037e6ae", + "format": 1 + }, + { + "name": "changelogs/config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b5dbc7f223c6b79feee444ffa052b620913771b52077a69bbe78a93c002ccf67", + "format": 1 + }, + { + "name": "changelogs/changelog.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b8c85f63ac860cdcbeba639fb4e6632b306642d9eb298bdfabf503567a6fb585", + "format": 1 + }, + { + "name": "changelogs/fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "changelogs/fragments/.46-vlan-idempotency-desc-and-members.yaml.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ff745253add331c05877baf8276adcffdc28f7e7a574ac8ff856a7617aa8dde", + "format": 1 + }, + { + "name": ".galaxy.yml.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2ed8479456bf98ecd6e5fe9201c4d490bad578ddedd4df3ca6b5674d13260c77", + "format": 1 + }, + { + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": ".github/workflows/ansible-test.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "372cc6f489143cc505aa1b52c38cd04bc4b6487c3ce5bf613e4b3d4e32a053fc", + "format": 1 + }, + { + "name": ".README.md.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "14960e6cf6f0bf8fd5b183ea4e957cab1df1ae557e77960dd5f77d4c7ffc82bd", + "format": 1 + }, + { + "name": "plugins", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/doc_fragments", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/doc_fragments/os10.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9cd210947b85bbb3c3270a239d73c3e6fe6a5f0e16bc77326eb179a9486593e8", + "format": 1 + }, + { + "name": "plugins/action", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/action/os10.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8d13cba843ee5563bec94849b9255cab43db98ee3369f553bc360ec3d9070513", + "format": 1 + }, + { + "name": "plugins/action/textfsm_parser.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e229a5a0eac4493c04425e825ab50945d7eda4a6bee56a3485dea640f7d209b", + "format": 1 + }, + { + "name": "plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/cliconf/os10.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2fde5ba9d659d487322a300ecb3a433a5a522c4ec2a5383be1c6a661797ea033", + "format": 1 + }, + { + "name": "plugins/terminal", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/terminal/os10.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9633af38e10311856b00de1aee3be7c95c986fb25e6d20cd7827eaa2614d4974", + "format": 1 + }, + { + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/modules/vlt_validate.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a31a1b1341a6cfb695af05233b5d29ef1cef8cc35c945e24b716a7d1445101a2", + "format": 1 + }, + { + "name": "plugins/modules/base_xml_to_dict.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8ce7d403e2dc3e0090faed6853efcf0c3a7de4ff866d140e51839cf54b80efcf", + "format": 1 + }, + { + "name": "plugins/modules/.os10_command.py.un~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4fd0d35f5acde1baf6df7fe9e9e9ae09bf76b086d7b1aa6ee4a7b28bebe7ce11", + "format": 1 + }, + { + "name": "plugins/modules/wiring_validate.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "60306438476482dbf7df288c76a2c5a61a478c4f8e0b99ee2b6218f775153648", + "format": 1 + }, + { + "name": "plugins/modules/os10_command.py~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1c915f11cccda82ac80a2d981169c9b4d1cf92a056168941ccfaa839f66177f2", + "format": 1 + }, + { + "name": "plugins/modules/os10_command.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7ee1bda2f8719396ced20d4fae9d3c15536ed0467190260e8870f256926c0454", + "format": 1 + }, + { + "name": "plugins/modules/os10_facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "76d139099cc94530f8d5f1ffe21e432d5076d284a66699c77f071872e724ab35", + "format": 1 + }, + { + "name": "plugins/modules/mtu_validate.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2e8d0d7bceb4b16c36793c20304cb828274c34e82dcbc00eea80feeabb16fc73", + "format": 1 + }, + { + "name": "plugins/modules/show_system_network_summary.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "eb4c713221503a9a726f74a8d2b54b248b345f554bbe271ef513a32c38b4f56a", + "format": 1 + }, + { + "name": "plugins/modules/bgp_validate.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cae91228b6226f4c6fa5e00b9dba14942075250061f8011ee144a207bb9bddd4", + "format": 1 + }, + { + "name": "plugins/modules/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "plugins/modules/os10_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0693b1edece924d6c8d055acc94e6cc5cb65fcd8b9ea96175fab3257fbbc9c99", + "format": 1 + }, + { + "name": "plugins/module_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/os10.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a0827b94850fda014c103f0c9cd3e2e80bab71bce2dfdef7c2224d62f2a1d60d", + "format": 1 + }, + { + "name": "plugins/module_utils/network/base_network_show.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0f0291c93d3829d2e1c78e1bca681691332e48ca6fb0fabcf1ae35ad378ea89e", + "format": 1 + }, + { + "name": "plugins/module_utils/network/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "format": 1 + }, + { + "name": "README.md~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "870ce733b9129c1b0e188b30801edf58da1b251f787645f8e223907f3c3c6da4", + "format": 1 + }, + { + "name": "playbooks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/group_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/group_vars/all", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "602987ea665844bebae77f58df9682a1e015edb5d18b7ea9259a8209dd08994f", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/group_vars/spine.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9410c561579c34b35fc5239aab55350e3472d93aa0d0cef5dd4438b4b5ced91d", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/datacenter.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2627623980960381195863f4fee460eec8d778be76a096b54857a06e97df23bd", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d8d7d7db2043af3d64bc829dc8fdb9b6c59826ccf0d75c1de55efc48260c89bb", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1dd91b341f01a3a4f397ef739ca40c87c824d07a39038d8ecf293bed2a2d9b8c", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars/leaf4.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "50e9c43b204e412be5cba64f520bbb8bc1d6badfd418729149992494b78cb2ad", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars/leaf3.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f749957a827032a0c6077a83d1f709af736596e68ee9e6e33c5ce2abd928db91", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars/leaf2.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d8696e7b5d612c1f16cc7a0bdbed960a6258baaade83ff7e6cfa55f2fc100e49", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars/spine2.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f795b650bb0a1b6360bef9a63be4ff553cf0ca4496ccfc5d2783247853ee218a", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars/spine1.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "86b4b5ae09553480001d5c459bbbc0c8f188029dfb5f88afdf3e3be6c7466304", + "format": 1 + }, + { + "name": "playbooks/clos_fabric_ebgp/host_vars/leaf1.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "acb008b56cdc437f69f9f95c4cfee68999e573fa6238f91d28597725f7f6f5be", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/datacenter.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "01512d9b68a28d1f437b669edeaa3139209fc605f137b80d9b70c38eda29bf8d", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/README.md", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a4171c46c9d8296384d9f2d944195e4bea20be0eb9d84c759490bf4dfe40ce3c", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/vxlan_evpn_topology.png", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1eb1121f60229ce9d7ffde2625a6d10b3d5bae314f888172bef932a8f1a1713a", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/inventory.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4d7aa907659dffc2df8f9788f353f04081c1853ff959378c4facc618ac1f686c", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars/prim-vtep1.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1e581cc10cd5569e8e188acbdee765b32a143f3c517540cbe314c1f99092f8d5", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars/sec-vtep1.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e86083141c836c8ea7bc9643cd7f47c5e7241fff2288efa9bac68f24b9d9a53f", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars/spine2.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4cb8ed1a4f629eac44ae9577abcf284b918d531b958338fd04a2a42f40488339", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars/prim-vtep2.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a1193c59b99f6954c1fe0098d2c31191802bf4ee697d1b3b4c0e240a45e42d9d", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars/spine1.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a6516ef2547d0aaced10ec03e730bebe67f2432f43797d4c2037dbc912544b96", + "format": 1 + }, + { + "name": "playbooks/vxlan_evpn/host_vars/sec-vtep2.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fe94c0a6f1b5657c1a24373f117a6d71300dfdd2b3b2fcc513df934318e1ff4a", + "format": 1 + }, + { + "name": "LICENSE", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5883eb4c7ece1931e1b25a9071bcbe50c1eaab7b9a38d2515e1b4be29e630fb3", + "format": 1 + }, + { + "name": "galaxy.yml~", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "49d45697e00fbce066a4fde4783c3656189ec4b4143960dfa43e24b6269572c2", + "format": 1 + }, + { + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "meta/runtime.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e89e29376e2d83040beda97f813eadab01df7697a7e9594ca89537d54f95214c", + "format": 1 + } + ], + "format": 1 +}
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/MANIFEST.json b/collections-debian-merged/ansible_collections/dellemc/os10/MANIFEST.json new file mode 100644 index 00000000..a100c66c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/MANIFEST.json @@ -0,0 +1,38 @@ +{ + "collection_info": { + "namespace": "dellemc", + "name": "os10", + "version": "1.0.2", + "authors": [ + "Parameswaran Krishnamurthy <Parameswaran_Krishna@Dell.com>", + "Senthil Ganesan Ganesan <Senthil_Kumar_Ganesa@Dell.com>", + "Shreeja R <Shreeja_R@Dell.com>" + ], + "readme": "README.md", + "tags": [ + "dell", + "dellemc", + "os10", + "emc", + "networking" + ], + "description": "Ansible Network Collection for Dell EMC SmartFabric OS10", + "license": [], + "license_file": "LICENSE", + "dependencies": { + "ansible.netcommon": ">=1.0.0" + }, + "repository": "https://github.com/ansible-collections/dellemc.os10", + "documentation": "https://github.com/ansible-collections/dellemc.os10/tree/master/docs", + "homepage": "https://github.com/ansible-collections/dellemc.os10", + "issues": "https://github.com/ansible-collections/dellemc.os10/issues" + }, + "file_manifest_file": { + "name": "FILES.json", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "42682f9301445095dd943f6272bd5d45ece42419f1899e0065ae7cb9d6553551", + "format": 1 + }, + "format": 1 +}
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/README.md new file mode 100644 index 00000000..9a7d1094 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/README.md @@ -0,0 +1,79 @@ +# Ansible Network Collection for Dell EMC SmartFabric OS10 + +### Collection contents +This collection includes Ansible modules, plugins and roles needed to provision and manage Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. Sample playbooks and documentation are also included to show how the collection can be used. + +### Collection core modules + +- **os10_command.py** — Run commands on devices running OS10 + +- **os10_config.py** — Manage configuration on devices running OS10 + +- **os10_facts.py** — Collect facts from devices running OS10 + +### Collection roles +These roles facilitate the provisioning and administration of devices running SmartFabric OS10. There are over 30 roles available that provide a comprehensive coverage of most OS10 resources, including *os10_interface*, *os10_acl*, *os10_bgp*, and *os10_vxlan*. The documentation for each role is at [OS10 roles](https://github.com/ansible-collections/dellemc.os10/blob/master/docs/roles.rst). + +### Sample use case playbooks +This collection includes the following sample playbooks that illustrate end to end use cases: + +- [CLOS fabric](https://github.com/ansible-collections/dellemc.os10/blob/master/playbooks/clos_fabric_ebgp/README.md) — Example playbook to build a Layer 3 Leaf-Spine fabric + +- [VXLAN EVPN](https://github.com/ansible-collections/dellemc.os10/blob/master/playbooks/vxlan_evpn/README.md) — Example playbook to build a scale-out Leaf-Spine topology using VxLAN, BGP EVPN and Symmetric-IRB + +## Installation +Use this command to install the latest version of the OS10 collection from Ansible Galaxy: + + ansible-galaxy collection install dellemc.os10 + +To install a specific version, a version range identifier must be specified. For example, to install the most recent version that is greater than or equal to 1.0.0 and less than 2.0.0. + + ansible-galaxy collection install 'dellemc.os10:>=1.0.0,<2.0.0' + +## Version compatibility +* Ansible version 2.10 or later. +* Python 2.7 or higher and Python 3.5 or higher + +> **NOTE**: For Ansible versions lower than 2.10, use the legacy [dellos10 modules](https://ansible-dellos-docs.readthedocs.io/en/latest/modules.html#os10-modules) and [dellos roles](https://ansible-dellos-docs.readthedocs.io/en/latest/roles.html). + +## Sample playbook + +**playbook.yaml** + + - hosts: os10_switches + connection: network_cli + collections: + - dellemc.os10 + roles: + - os10_vlan + +**host_vars/os10_sw1.yaml** + + hostname: os10_sw1 + # Parameters for connection type network_cli + ansible_ssh_user: xxxx + ansible_ssh_pass: xxxx + ansible_network_os: dellemc.os10.os10 + + # Create vlan100 and delete vlan888 + os10_vlan: + vlan 100: + description: "Blue" + state: present + vlan 888: + state: absent + +**inventory.yaml** + + [os10_sw1] + os10_sw1 ansible_host=100.104.28.119 + + [os10_sw2] + os10_sw2 ansible_host=100.104.28.120 + + [os10_switches:children] + os10_sw1 + os10_sw2 + + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/README.md~ b/collections-debian-merged/ansible_collections/dellemc/os10/README.md~ new file mode 100644 index 00000000..2c199f83 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/README.md~ @@ -0,0 +1,83 @@ +# Ansible Network Collection for Dell EMC SmartFabric OS10 + +### Collection contents +This collection includes Ansible modules, plugins and roles needed to provision and manage Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. Sample playbooks and documentation are also included to show how the collection can be used. + +### Collection core modules + +- **os10_command.py** — Run commands on devices running OS10 + +- **os10_config.py** — Manage configuration on devices running OS10 + +- **os10_facts.py** — Collect facts from devices running OS10 + +### Collection roles +These roles facilitate the provisioning and administration of devices running SmartFabric OS10. There are over 30 roles available that provide a comprehensive coverage of most OS10 resources, including *os10_interface*, *os10_acl*, *os10_bgp*, and *os10_vxlan*. The documentation for each role is at [OS10 roles](https://github.com/ansible-collections/dellemc.os10/blob/master/docs/roles.rst). + +### Sample use case playbooks +This collection includes the following sample playbooks that illustrate end to end use cases: + +- [CLOS fabric](https://github.com/ansible-collections/dellemc.os10/blob/master/playbooks/clos_fabric_ebgp/README.md) — Example playbook to build a Layer 3 Leaf-Spine fabric + +- [VXLAN EVPN](https://github.com/ansible-collections/dellemc.os10/blob/master/playbooks/vxlan_evpn/README.md) — Example playbook to build a scale-out Leaf-Spine topology using VxLAN, BGP EVPN and Symmetric-IRB + +## Installation +Use this command to install the latest version of the OS10 collection from Ansible Galaxy: + + ansible-galaxy collection install dellemc.os10 + +To install a specific version, a version range identifier must be specified. For example, to install the most recent version that is greater than or equal to 1.0.0 and less than 2.0.0. + + ansible-galaxy collection install 'dellemc.os10:>=1.0.0,<2.0.0' + +### Install paramiko +Use this command to install paramiko python module as modules and roles from this collection require paramiko: + + pip install paramiko + +## Version compatibility +Ansible version 2.10 or later. + +> **NOTE**: For Ansible versions lower than 2.10, use the legacy [dellos10 modules](https://ansible-dellos-docs.readthedocs.io/en/latest/modules.html#os10-modules) and [dellos roles](https://ansible-dellos-docs.readthedocs.io/en/latest/roles.html). + +## Sample playbook + +**playbook.yaml** + + - hosts: os10_switches + connection: network_cli + collections: + - dellemc.os10 + roles: + - os10_vlan + +**host_vars/os10_sw1.yaml** + + hostname: os10_sw1 + # Parameters for connection type network_cli + ansible_ssh_user: xxxx + ansible_ssh_pass: xxxx + ansible_network_os: dellemc.os10.os10 + + # Create vlan100 and delete vlan888 + os10_vlan: + vlan 100: + description: "Blue" + state: present + vlan 888: + state: absent + +**inventory.yaml** + + [os10_sw1] + os10_sw1 ansible_host=100.104.28.119 + + [os10_sw2] + os10_sw2 ansible_host=100.104.28.120 + + [os10_switches:children] + os10_sw1 + os10_sw2 + + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/.changelog.yaml.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/.changelog.yaml.un~ Binary files differnew file mode 100644 index 00000000..1796866f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/.changelog.yaml.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/.plugin-cache.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/.plugin-cache.yaml new file mode 100644 index 00000000..380f99ee --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/.plugin-cache.yaml @@ -0,0 +1,66 @@ +plugins: + become: {} + cache: {} + callback: {} + cliconf: + os10: + description: Use os10 cliconf to run command on Dell OS10 platform + name: os10 + version_added: null + connection: {} + httpapi: {} + inventory: {} + lookup: {} + module: + base_xml_to_dict: + description: Operations for show command output convertion from xml to json + format. + name: base_xml_to_dict + namespace: '' + version_added: null + bgp_validate: + description: Validate the bgp neighbor state,raise error if it is not in established + state + name: bgp_validate + namespace: '' + version_added: null + mtu_validate: + description: Validate the MTU value for lldp neighbors + name: mtu_validate + namespace: '' + version_added: null + os10_command: + description: Run commands on devices running Dell EMC SmartFabric OS10 + name: os10_command + namespace: '' + version_added: null + os10_config: + description: Manage Dell EMC SmartFabric OS10 configuration sections + name: os10_config + namespace: '' + version_added: null + os10_facts: + description: Collect facts from devices running Dell EMC SmartFabric OS10 + name: os10_facts + namespace: '' + version_added: null + show_system_network_summary: + description: Operations for show_system_network output in json/yaml format. + name: show_system_network_summary + namespace: '' + version_added: null + vlt_validate: + description: Validate the vlt info, raise an error if peer is not in up state + name: vlt_validate + namespace: '' + version_added: null + wiring_validate: + description: Validate the wiring based on the planned wiring details + name: wiring_validate + namespace: '' + version_added: null + netconf: {} + shell: {} + strategy: {} + vars: {} +version: 1.0.2 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/CHANGELOG.rst b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/CHANGELOG.rst new file mode 100644 index 00000000..0b805ea5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/CHANGELOG.rst @@ -0,0 +1,77 @@ +====================================================================== +Ansible Network Collection for Dell EMC SmartFabric OS10 Release Notes +====================================================================== + +.. contents:: Topics + + +v1.0.2 +====== + +Bugfixes +-------- + +- Fix issue in using ip_and_mask along with members in os10_vlan role (https://github.com/ansible-collections/dellemc.os10/issues/42) +- Fix issue in using list of strings for `commands` argument for `os10_command` module (https://github.com/ansible-collections/dellemc.os10/issues/43) +- Fixed os10_vlan role idempotency issue with description and members (https://github.com/ansible-collections/dellemc.os10/issues/46) + +v1.0.1 +====== + +Release Summary +--------------- + +Added changelog. + +v1.0.0 +====== + +Major Changes +------------- + +- New role os10_aaa - Facilitates the configuration of Authentication Authorization and Accounting (AAA), TACACS and RADIUS server. +- New role os10_acl - Facilitates the configuration of Access Control lists. +- New role os10_bfd - Facilitates the configuration of BFD global attributes. +- New role os10_bgp - Facilitates the configuration of border gateway protocol (BGP) attributes. +- New role os10_copy_config - This role pushes the backup running configuration into a OS10 device. +- New role os10_dns - Facilitates the configuration of domain name service (DNS). +- New role os10_ecmp - Facilitates the configuration of equal cost multi-path (ECMP) for IPv4. +- New role os10_fabric_summary Facilitates to get show system information of all the OS10 switches in the fabric. +- New role os10_flow_monitor Facilitates the configuration of ACL flow-based monitoring attributes. +- New role os10_image_upgrade Facilitates installation of OS10 software images. +- New role os10_interface Facilitates the configuration of interface attributes. +- New role os10_lag Facilitates the configuration of link aggregation group (LAG) attributes. +- New role os10_lldp Facilitates the configuration of link layer discovery protocol (LLDP) attributes at global and interface level. +- New role os10_logging Facilitates the configuration of global logging attributes and logging servers. +- New role os10_network_validation Facilitates validation of wiring connection, BGP neighbors, MTU between neighbors and VLT pair. +- New role os10_ntp Facilitates the configuration of network time protocol (NTP) attributes. +- New role os10_prefix_list Facilitates the configuration of IP prefix-list. +- New role os10_qos Facilitates the configuration of quality of service attributes including policy-map and class-map. +- New role os10_raguard Facilitates the configuration of IPv6 RA Guard attributes. +- New role os10_route_map Facilitates the configuration of route-map attributes. +- New role os10_snmp Facilitates the configuration of global SNMP attributes. +- New role os10_system Facilitates the configuration of hostname and hashing algorithm. +- New role os10_template The role takes the raw string input from the CLI of OS10 device, and returns a structured text in the form of a Python dictionary. +- New role os10_uplink Facilitates the configuration of uplink attributes like uplink-state group. +- New role os10_users Facilitates the configuration of global system user attributes. +- New role os10_vlan Facilitates the configuration of virtual LAN (VLAN) attributes. +- New role os10_vlt Facilitates the configuration of virtual link trunking (VLT). +- New role os10_vrf Facilitates the configuration of virtual routing and forwarding (VRF). +- New role os10_vrrp Facilitates the configuration of virtual router redundancy protocol (VRRP) attributes. +- New role os10_vxlan Facilitates the configuration of virtual extensible LAN (VXLAN) attributes. +- New role os10_xstp Facilitates the configuration of xSTP attributes. + +New Plugins +----------- + +Cliconf +~~~~~~~ + +- os10 - Use OS10 cliconf to run commands on Dell EMC PowerSwitch devices. + +New Modules +----------- + +- os10_command - Run commands on devices running Dell EMC SmartFabric OS1O. +- os10_config - Manage configuration on devices running OS10. +- os10_facts - Collect facts from devices running OS10. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/changelog.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/changelog.yaml new file mode 100644 index 00000000..be64746d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/changelog.yaml @@ -0,0 +1,87 @@ +ancestor: null +releases: + 1.0.0: + changes: + major_changes: + - New role os10_aaa - Facilitates the configuration of Authentication Authorization + and Accounting (AAA), TACACS and RADIUS server. + - New role os10_acl - Facilitates the configuration of Access Control lists. + - New role os10_bfd - Facilitates the configuration of BFD global attributes. + - New role os10_bgp - Facilitates the configuration of border gateway protocol + (BGP) attributes. + - New role os10_copy_config - This role pushes the backup running configuration + into a OS10 device. + - New role os10_dns - Facilitates the configuration of domain name service (DNS). + - New role os10_ecmp - Facilitates the configuration of equal cost multi-path + (ECMP) for IPv4. + - New role os10_fabric_summary Facilitates to get show system information of + all the OS10 switches in the fabric. + - New role os10_flow_monitor Facilitates the configuration of ACL flow-based + monitoring attributes. + - New role os10_image_upgrade Facilitates installation of OS10 software images. + - New role os10_interface Facilitates the configuration of interface attributes. + - New role os10_lag Facilitates the configuration of link aggregation group + (LAG) attributes. + - New role os10_lldp Facilitates the configuration of link layer discovery protocol + (LLDP) attributes at global and interface level. + - New role os10_logging Facilitates the configuration of global logging attributes + and logging servers. + - New role os10_network_validation Facilitates validation of wiring connection, + BGP neighbors, MTU between neighbors and VLT pair. + - New role os10_ntp Facilitates the configuration of network time protocol (NTP) + attributes. + - New role os10_prefix_list Facilitates the configuration of IP prefix-list. + - New role os10_qos Facilitates the configuration of quality of service attributes + including policy-map and class-map. + - New role os10_raguard Facilitates the configuration of IPv6 RA Guard attributes. + - New role os10_route_map Facilitates the configuration of route-map attributes. + - New role os10_snmp Facilitates the configuration of global SNMP attributes. + - New role os10_system Facilitates the configuration of hostname and hashing + algorithm. + - New role os10_template The role takes the raw string input from the CLI of + OS10 device, and returns a structured text in the form of a Python dictionary. + - New role os10_uplink Facilitates the configuration of uplink attributes like + uplink-state group. + - New role os10_users Facilitates the configuration of global system user attributes. + - New role os10_vlan Facilitates the configuration of virtual LAN (VLAN) attributes. + - New role os10_vlt Facilitates the configuration of virtual link trunking (VLT). + - New role os10_vrf Facilitates the configuration of virtual routing and forwarding + (VRF). + - New role os10_vrrp Facilitates the configuration of virtual router redundancy + protocol (VRRP) attributes. + - New role os10_vxlan Facilitates the configuration of virtual extensible LAN + (VXLAN) attributes. + - New role os10_xstp Facilitates the configuration of xSTP attributes. + modules: + - description: Run commands on devices running Dell EMC SmartFabric OS1O. + name: os10_command + namespace: '' + - description: Manage configuration on devices running OS10. + name: os10_config + namespace: '' + - description: Collect facts from devices running OS10. + name: os10_facts + namespace: '' + plugins: + cliconf: + - description: Use OS10 cliconf to run commands on Dell EMC PowerSwitch devices. + name: os10 + namespace: null + release_date: '2020-07-31' + 1.0.1: + changes: + release_summary: Added changelog. + fragments: + - 1.0.1.yaml + release_date: '2020-08-14' + 1.0.2: + changes: + bugfixes: + - Fix issue in using ip_and_mask along with members in os10_vlan role (https://github.com/ansible-collections/dellemc.os10/issues/42) + - Fix issue in using list of strings for `commands` argument for `os10_command` + module (https://github.com/ansible-collections/dellemc.os10/issues/43) + - Fixed os10_vlan role idempotency issue with description and members (https://github.com/ansible-collections/dellemc.os10/issues/46) + fragments: + - 1.0.2.yaml + - 46-vlan-idempotency-desc-and-members.yaml + release_date: '2020-10-28' diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/changelog.yaml~ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/changelog.yaml~ new file mode 100644 index 00000000..ca3c7761 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/changelog.yaml~ @@ -0,0 +1,87 @@ +ancestor: null +releases: + 1.0.0: + changes: + major_changes: + - New role os10_aaa - Facilitates the configuration of Authentication Authorization + and Accounting (AAA), TACACS and RADIUS server. + - New role os10_acl - Facilitates the configuration of Access Control lists. + - New role os10_bfd - Facilitates the configuration of BFD global attributes. + - New role os10_bgp - Facilitates the configuration of border gateway protocol + (BGP) attributes. + - New role os10_copy_config - This role pushes the backup running configuration + into a OS10 device. + - New role os10_dns - Facilitates the configuration of domain name service (DNS). + - New role os10_ecmp - Facilitates the configuration of equal cost multi-path + (ECMP) for IPv4. + - New role os10_fabric_summary Facilitates to get show system information of + all the OS10 switches in the fabric. + - New role os10_flow_monitor Facilitates the configuration of ACL flow-based + monitoring attributes. + - New role os10_image_upgrade Facilitates installation of OS10 software images. + - New role os10_interface Facilitates the configuration of interface attributes. + - New role os10_lag Facilitates the configuration of link aggregation group + (LAG) attributes. + - New role os10_lldp Facilitates the configuration of link layer discovery protocol + (LLDP) attributes at global and interface level. + - New role os10_logging Facilitates the configuration of global logging attributes + and logging servers. + - New role os10_network_validation Facilitates validation of wiring connection, + BGP neighbors, MTU between neighbors and VLT pair. + - New role os10_ntp Facilitates the configuration of network time protocol (NTP) + attributes. + - New role os10_prefix_list Facilitates the configuration of IP prefix-list. + - New role os10_qos Facilitates the configuration of quality of service attributes + including policy-map and class-map. + - New role os10_raguard Facilitates the configuration of IPv6 RA Guard attributes. + - New role os10_route_map Facilitates the configuration of route-map attributes. + - New role os10_snmp Facilitates the configuration of global SNMP attributes. + - New role os10_system Facilitates the configuration of hostname and hashing + algorithm. + - New role os10_template The role takes the raw string input from the CLI of + OS10 device, and returns a structured text in the form of a Python dictionary. + - New role os10_uplink Facilitates the configuration of uplink attributes like + uplink-state group. + - New role os10_users Facilitates the configuration of global system user attributes. + - New role os10_vlan Facilitates the configuration of virtual LAN (VLAN) attributes. + - New role os10_vlt Facilitates the configuration of virtual link trunking (VLT). + - New role os10_vrf Facilitates the configuration of virtual routing and forwarding + (VRF). + - New role os10_vrrp Facilitates the configuration of virtual router redundancy + protocol (VRRP) attributes. + - New role os10_vxlan Facilitates the configuration of virtual extensible LAN + (VXLAN) attributes. + - New role os10_xstp Facilitates the configuration of xSTP attributes. + modules: + - description: Run commands on devices running Dell EMC SmartFabric OS1O. + name: os10_command + namespace: '' + - description: Manage configuration on devices running OS10. + name: os10_config + namespace: '' + - description: Collect facts from devices running OS10. + name: os10_facts + namespace: '' + plugins: + cliconf: + - description: Use OS10 cliconf to run commands on Dell EMC PowerSwitch devices. + name: os10 + namespace: null + release_date: '2020-07-31' + 1.0.1: + changes: + release_summary: Added changelog. + fragments: + - 1.0.1.yaml + release_date: '2020-08-14' + 1.0.2: + changes: + bugfixes: + - Fix issue in using ip_and_mask along with members in os10_vlan role (https://github.com/ansible-collections/dellemc.os10/issues/42) + - Fix issue in using list of strings for `commands` argument for `os10_command` + module (https://github.com/ansible-collections/dellemc.os10/issues/43) + - Fixed os10_vlan role idempotency issue with description and members (https://github.com/ansible-collections/dellemc.os10/issues/46) + fragments: + - 1.0.2.yaml + - 46-vlan-idempotency-desc-and-members.yaml + release_date: '2020-09-24' diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/config.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/config.yaml new file mode 100644 index 00000000..953ad20a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/config.yaml @@ -0,0 +1,30 @@ +changelog_filename_template: CHANGELOG.rst +changelog_filename_version_depth: 0 +changes_file: changelog.yaml +changes_format: combined +keep_fragments: false +mention_ancestor: true +new_plugins_after_name: removed_features +notesdir: fragments +prelude_section_name: release_summary +prelude_section_title: Release Summary +flatmap: true +sections: +- - major_changes + - Major Changes +- - minor_changes + - Minor Changes +- - breaking_changes + - Breaking Changes / Porting Guide +- - deprecated_features + - Deprecated Features +- - removed_features + - Removed Features (previously deprecated) +- - security_fixes + - Security Fixes +- - bugfixes + - Bugfixes +- - known_issues + - Known Issues +title: Ansible Network Collection for Dell EMC SmartFabric OS10 +trivial_section_name: trivial diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/fragments/.46-vlan-idempotency-desc-and-members.yaml.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/fragments/.46-vlan-idempotency-desc-and-members.yaml.un~ Binary files differnew file mode 100644 index 00000000..db71c3cb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/changelogs/fragments/.46-vlan-idempotency-desc-and-members.yaml.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_aaa.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_aaa.md new file mode 100644 index 00000000..2c397db7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_aaa.md @@ -0,0 +1,136 @@ +AAA role +======== + +This role facilitates the configuration of authentication, authorization, and acccounting (AAA). It supports the configuration of RADIUS server, TACACS server, and AAA. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The AAA role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_aaa keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``radius_server`` | dictionary | Configures the RADIUS server (see ``radius_server.*``) | os10 | +| ``radius_server.retransmit`` | integer | Configures the number of retransmissions | os10 | +| ``radius_server.timeout`` | integer | Configures the timeout for retransmissions | os10 | +| ``radius_server.host`` | dictionary | Configures the RADIUS server host (see ``host.*``) | os10 | +| ``host.ip`` | string | Configures the RADIUS server host address | os10 | +| ``host.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``host.auth_port`` | integer | Configures the authentication port (0 to 65535) | os10 | +| ``host.state`` | string: present,absent | Removes the RADIUS server host if set to absent | os10 | +| ``auth.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``tacacs_server`` | dictionary | Configures the TACACS server (see ``tacacs_server.*``) | os10 | +| ``tacacs_server.timeout`` | integer | Configures the timeout for retransmissions | os10 | +| ``tacacs_server.host`` | dictionary | Configures the TACACS server host (see ``host.*``) | os10 | +| ``host.ip`` | string | Configures the TACACS server host address | os10 | +| ``host.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``host.auth_port`` | integer | Configures the authentication port (0 to 65535) | os10 | +| ``host.state`` | string: present,absent | Removes the TACACS server host if set to absent | os10 | +| ``auth.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``aaa_accounting`` | dictionary | Configures accounting parameters (see ``aaa_accounting.*``) | os10 | +| ``aaa_accounting.accounting.accounting_type`` | dictionary | Configures accounting type | os10 | +| ``aaa_accounting.accounting.connection_type`` | dictionary | Configures accounting connection type | os10 | +| ``aaa_accounting.accounting.account_mode`` | dictionary | Configures accounting mode | os10 | +| ``aaa_accounting.accounting.server_group`` | dictionary | Configures accounting server group | os10 | +| ``aaa_accounting.accounting.state`` | string: present,absent | Configures/unconfigures accounting parameters | os10 | +| ``aaa_authentication`` | dictionary | Configures authentication parameters (see ``aaa_authentication.*``) | os10 | +| ``aaa_authentication.login`` | dictionary | Configures authentication login (see ``aaa_authentication.login.*``)| os10 | +| ``aaa_authentication.login.console`` | dictionary | Configures authentication method for console login | os10 | +| ``aaa_authentication.login.state`` | string: present,absent | Unconfigures authentication login if set to absent | os10 | +| ``aaa_authentication.login.type`` | dictionary | Configures authentication type | os10 | +| ``aaa_authentication.re_authenticate`` | boolean | Configures re-authenticate by enable if set to true | os10 | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_aaa* role to configure AAA for radius and TACACS servers. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in the *build_dir* path. By default, it is set to false and it writes a simple playbook that only references the *os10_aaa* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_aaa: + radius_server: + retransmit: 5 + timeout: 10 + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + tacacs_server: + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + timeout: 6 + aaa_authentication: + login: + - console: true + type: group radius group tacacs+ local + state: present + re_authenticate: true + aaa_accounting: + accounting: + - accounting_type: commands + connection_type: console + account_mode: start-stop + server_group: group tacacs+ + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_aaa + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_acl.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_acl.md new file mode 100644 index 00000000..069de9b9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_acl.md @@ -0,0 +1,130 @@ +ACL role +======== + +This role facilitates the configuration of an access-control list (ACL). It supports the configuration of different types of ACLs (standard and extended) for both IPv4 and IPv6, and assigns the access-class to the line terminals. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The ACL role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_acl keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``type`` | string (required): ipv4, ipv6, mac | Configures the L3 (IPv4/IPv6) or L2 (MAC) access-control list | os10 | +| ``name`` | string (required) | Configures the name of the access-control list | os10 | +| ``description`` | string | Configures the description about the access-control list | os10 | +| ``remark`` | list | Configures the ACL remark (see ``remark.*``) | os10| +| ``remark.number`` | integer (required) | Configures the remark sequence number | os10 | +| ``remark.description`` | string | Configures the remark description | os10 | +| ``remark.state`` | string: absent,present\* | Deletes the configured remark for an ACL entry if set to absent | os10 | +| ``entries`` | list | Configures ACL rules (see ``seqlist.*``) | os10 | +| ``entries.number`` | integer (required) | Specifies the sequence number of the ACL rule | os10 | +| ``entries.permit`` | boolean (required): true,false | Specifies the rule to permit packets if set to true; specifies to reject packets if set to false | os10 | +| ``entries.protocol`` | string (required) | Specifies the type of protocol or the protocol number to filter | os10 | +| ``entries.source`` | string (required) | Specifies the source address to match in the packets | os10 | +| ``entries.src_condition`` | string | Specifies the condition to filter packets from the source address; ignored if MAC | os10 | +| ``entries.destination`` | string (required) | Specifies the destination address to match in the packets | os10 | +| ``entries.dest_condition`` | string | Specifies the condition to filter packets to the destination address | os10 | +| ``entries.other_options`` | string | Specifies the other options applied on packets (count, log, order, monitor, and so on) | os10 | +| ``entries.state`` | string: absent,present\* | Deletes the rule from the ACL if set to absent | os10 | +| ``stage_ingress`` | list | Configures ingress ACL to the interface (see ``stage_ingress.*``) | os10 | +| ``stage_ingress.name`` | string (required) | Configures the ingress ACL filter to the interface with this interface name | os10 | +| ``stage_ingress.state`` | string: absent,present\* | Deletes the configured ACL from the interface if set to absent | os10 | +| ``stage_egress`` | list | Configures egress ACL to the interface (see ``stage_egress.*``) | os10 | +| ``stage_egress.name`` | string (required) | Configures the egress ACL filter to the interface with this interface name | os10 | +| ``stage_egress.state`` | string: absent,present\* | Deletes the configured egress ACL from the interface if set to absent | os10 | +| ``lineterminal`` | list | Configures the terminal to apply the ACL (see ``lineterminal.*``) | os10 | +| ``lineterminal.state`` | string: absent,present\* | Deletes the access-class from line terminal if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the ACL if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOM`E environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (_*_) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_acl* role to configure different types of ACLs (standard and extended) for both IPv4 and IPv6 and assigns the access-class to the line terminals. The example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, it generates the configuration commands as a .part file in the *build_dir* path. By default it is set to false. It writes a simple playbook that only references the *os10_acl* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_acl: + - name: ssh + type: ipv4 + description: acl + remark: + - description: 1 + number: 3 + state: absent + entries: + - number: 14 + permit: true + protocol: tcp + source: any + src_condition: neq 6 + destination: any + dest_condition: eq 4 + other_options: count + state: present + stage_ingress: + - name: ethernet 1/1/1 + state: absent + - name: ethernet 1/1/2 + state: absent + stage_egress: + - name: ethernet 1/1/3 + state: absent + lineterminal: + state: absent + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_acl + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_bfd.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_bfd.md new file mode 100644 index 00000000..f5c3b44b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_bfd.md @@ -0,0 +1,89 @@ +BFD role +=========== + +This role facilitates the configuration of bidirectional forwarding detection (BFD) global attributes. It specifically enables configuration of BFD interval, min_rx, multiplier, and role. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The BFD role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_bfd keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``bfd`` | dictionary | Configures global BFD parameters (see ``bfd.*``) | os10 | +| ``bfd.interval`` | integer | Configures the time interval in ms (100 to 1000) | os10 | +| ``bfd.min_rx`` | integer | Configures maximum waiting time for receiving control packets from BFD peers in ms (100 to 1000)| os10 | +| ``bfd.multiplier`` | integer | Configure the maximum number of consecutive packets that are not received from BFD peers before session state changes to Down (3 to 50) | os10 | +| ``bfd.role`` | string: passive,active\* | Configure the BFD role | os10 | +| ``bfd.state`` | string: absent,present\* | Removes the global BFD if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +******************** + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_bfd role* to completely set the global BFD attributes. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The bfd role writes a simple playbook that only references the *os10_bfd* role. By including the role, you automatically get access to all of the tasks to configure BFD feature. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_bfd: + bfd: + interval: 100 + min_rx: 100 + multiplier: 3 + role: "active" + state: "present" + +**Simple playbook to setup bfd — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_bfd + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_bgp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_bgp.md new file mode 100644 index 00000000..d0f99600 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_bgp.md @@ -0,0 +1,364 @@ +BGP role +======== + +This role facilitates the configuration of border gateway protocol (BGP) attributes. It supports the configuration of router ID, networks, neighbors, and maximum path. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The BGP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, it generates the role configuration commands in a file +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_bgp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``asn`` | string (required) | Configures the autonomous system (AS) number of the local BGP instance | os10 | +| ``router_id`` | string | Configures the IP address of the local BGP router instance | os10 | +| ``graceful_restart`` | boolean | Configures graceful restart capability | os10 | +| ``maxpath_ibgp`` | integer | Configures the maximum number of paths to forward packets through iBGP (1 to 64; default 1) | os10 | +| ``maxpath_ebgp`` | integer | Configures the maximum number of paths to forward packets through eBGP (1 to 64; default 1) | os10 | +| ``log_neighbor_changes`` | boolean | Configures log neighbors up/down | os10 | +| ``fast_ext_fallover`` | boolean | Configures a reset session if a link to a directly connected external peer goes down | os10 | +| ``always_compare_med`` | boolean | Configures comparing MED from different neighbors | os10 | +| ``default_loc_pref`` | integer | Configures the default local preference value | os10 | +| ``confederation`` | dictionary | Configures AS confederation parameters (see ``confederation.*``) | os10 | +| ``confederation.identifier`` | integer | Configures routing domain confederation AS | os10 | +| ``confederation.peers`` | string | Configures peer AS in BGP confederation | os10 | +| ``confederation.peers_state`` | string: absent,present\* | Deletes peer AS in BGP confederation if set to absent | os10 | +| ``route_reflector`` | dictionary | Configures route reflection parameters (see ``route_reflector.*``) | os10 | +| ``route_reflector.client_to_client`` | boolean | Configures client-to-client route reflection | os10 | +| ``route_reflector.cluster_id`` | string | Configures the route-reflector cluster-id | os10 | +| ``address_family_ipv4`` | dictionary | Configures IPv4 address family parameters (see ``address_family_ipv4.*``) | os10 | +| ``address_family_ipv4.aggregate_addr`` | list | Configures IPv4 BGP aggregate entries (see ``aggregate_addr.*``) | os10 | +| ``aggregate_addr.ip_and_mask`` | string | Configures the IPv4 BGP aggregate address | os10 | +| ``address_family_ipv4.summary_only`` | boolean | Sets address to summary-only if true | os10 | +| ``aggregate_addr.state`` | string: absent,present\* | Deletes an IPv4 BGP aggregate entry if set to absent | os10 | +| ``address_family_ipv4.dampening`` | dictionary | Configures route-flap dampening (see ``dampening.*``) | os10 | +| ``dampening.value`` | dictionary | Configures dampening values (<half-life time> <start value to reuse> <start value to suppress> <max duration> format; default 15 750 2000 60) | os10 | +| ``dampening.route_map`` | string | Configures the route-map to specify criteria for dampening | os10 | +| ``dampening.state`` | string: absent,present\* | Deletes dampening if set to absent | os10 | +| ``address_family_ipv6`` | dictionary | Configures IPv6 address family parameters (see ``address_family_ipv6.*``) | os10 | +| ``address_family_ipv6.aggregate_addr`` | list | Configures IPv6 BGP aggregate entries (see ``aggregate_addr.*``) | os10 | +| ``aggregate_addr.ip_and_mask`` | string | Configures the IPv6 BGP aggregate address | os10 | +| ``address_family_ipv6.summary_only`` | boolean | Sets address to summary-only if true | os10 | +| ``aggregate_addr.state`` | string: absent,present\* | Deletes an IPv6 BGP aggregate entry if set to absent | os10 | +| ``address_family_ipv6.dampening`` | dictionary | Configures route-flap dampening (see ``dampening.*``) | os10 | +| ``dampening.value`` | dictionary | Configures dampening values (<half-life time> <start value to reuse> <start value to suppress> <max duration> format; default 15 750 2000 60) | os10 | +| ``dampening.route_map`` | string | Configures the route-map to specify criteria for dampening | os10 | +| ``dampening.state`` | string: absent,present\* | Deletes dampening if set to absent | os10 | +| ``best_path`` | list | Configures the default best-path selection (see ``best_path.*``) | os10 | +| ``best_path.as_path`` | string (required): ignore,multipath-relax | Configures the AS path used for the best-path computation | os10 | +| ``best_path.as_path_state`` | string: absent,present\* | Deletes the AS path configuration if set to absent | os10 | +| ``best_path.ignore_router_id`` | boolean: true,false | Ignores the router identifier in best-path computation if set to true | os10 | +| ``best_path.med`` | list | Configures the MED attribute (see ``med.*``) | os10 | +| ``med.attribute`` | string (required): confed,missing-as-best | Configures the MED attribute used for the best-path computation | os10 | +| ``med.state`` | string: absent,present\* | Deletes the MED attribute if set to absent | os10 | +| ``ipv4_network`` | list | Configures an IPv4 BGP networks (see ``ipv4_network.*``) | os10 | +| ``ipv4_network.address`` | string (required) | Configures the IPv4 address of the BGP network (A.B.C.D/E format) | os10 | +| ``ipv4_network.state`` | string: absent,present\* | Deletes an IPv4 BGP network if set to absent | os10 | +| ``ipv6_network`` | list | Configures an IPv6 BGP network (see ``ipv6_network.*``) | os10 | +| ``ipv6_network.address`` | string (required) | Configures the IPv6 address of the BGP network (2001:4898:5808:ffa2::1/126 format) | os10 | +| ``ipv6_network.state`` | string: absent,present\* | Deletes an IPv6 BGP network if set to absent | os10 | +| ``neighbor`` | list | Configures IPv4 BGP neighbors (see ``neighbor.*``) | os10 | +| ``neighbor.ip`` | string (required) | Configures the IPv4 address of the BGP neighbor (10.1.1.1) | os10 | +| ``neighbor.interface`` | string | Configures the BGP neighbor interface details | os10 | +| ``neighbor.name`` | string (required) | Configures the BGP peer-group with this name; supported only when the neighbor is a peer group; mutually exclusive with *neighbor.ip* | os10 | +| ``neighbor.type`` | string (required): ipv4,ipv6,peergroup | Specifies the BGP neighbor type | os10 | +| ``neighbor.auto_peer`` |string: unnumbered-auto | Enable AUTO discovery of neighbors | os10 | +| ``neighbor.password`` | string | Configures the BGP neighbor password | os10 | +| ``neighbor.peergroup_type`` | string (ibgp, ebgp) | Configures the BGP neighbor peer group type| os10 | +| ``neighbor.ebgp_peergroup`` | string | Configures the peer-group to all auto-discovered external neighbors | os10 | +| ``neighbor.ebgp_peergroup_state`` | string: present,absent | Removes the peer group from all auto-discovered external neighbors | os10 | +| ``neighbor.ibgp_peergroup`` | string | Configures the peer-group to all auto-discovered internal neighbors | os10 | +| ``neighbor.ibgp_peergroup_state`` | string: present,absent | Removes the peer group from all auto-discovered internal neighbors | os10 | +| ``neighbor.route_reflector_client`` | boolean | Configures router reflector client on the BGP neighbor | os10 | +| ``neighbor.local_as`` | integer | Configures the local AS for the BGP peer | os10 | +| ``neighbor.weight`` | integer | Configures the default weight for routes from the neighbor interface | os10 | +| ``neighbor.send_community`` | list | Configures the send community attribute to the BGP neighbor (see ``send_community.*``) | os10 | +| ``send_community.type`` | string (required) | Configures the send community attribute to the BGP neighbor | os10 | +| ``send_community.state`` | string: absent,present\* | Deletes the send community attribute of the BGP neighbor if set to absent | os10 | +| ``neighbor.address_family`` | list | Configures address family commands on the BGP neighbor (see ``address_family.*``)| os10 | +| ``address_family.type`` | string (required): ipv4,ipv6,l2vpn | Configures IPv4/IPv6/EVPN address family command mode on the BGP neighbor | os10 | +| ``address_family.activate`` | boolean | Configures activation/deactivation of IPv4/IPv6 address family command mode on the BGP neighbor | os10 | +| ``address_family.sender_loop_detect`` | boolean | Enable/Disable the sender-side loop detection process for a BGP neighbor of IPv4/IPv6/l2vpn address family | os10 | +| ``address_family.allow_as_in`` | integer | Configures the local AS number in the as-path | os10 | +| ``address_family.next_hop_self`` | boolean | Configures disabling the next-hop calculation for the neighbor | os10 | +| ``address_family.soft_reconf`` | boolean | Configures per neighbor soft reconfiguration | os10 | +| ``address_family.add_path`` | string | Configures send or receive multiple paths (value can be 'both <no of paths>', 'send <no of paths>', 'receive')| os10 | +| ``address_family.route_map`` | list | Configures the route-map on the BGP neighbor (see ``route_map.*``) | os10 | +| ``route_map.name`` | string | Configures the name of the route-map for the BGP neighbor | os10 | +| ``route_map.filter`` | string | Configures the filter for routing updates | os10 | +| ``route_map.state`` | string, choices: absent,present* | Deletes the route-map of the BGP neighbor if set to absent | os10 | +| ``address_family.state`` | string: absent,present\* | Deletes the address family command mode of the BGP neighbor if set to absent | os10 | +| ``neighbor.remote_asn`` | string (required) | Configures the remote AS number of the BGP neighbor | os10 | +| ``neighbor.remote_asn_state`` | string: absent,present\* | Deletes the remote AS number from the peer group if set to absent; supported only when *neighbor.type* is "peergroup" | os10 | +| ``neighbor.timer`` | string | Configures neighbor timers; 5 10, where 5 is the keepalive interval and 10 is the holdtime | os10 | +| ``neighbor.peergroup`` | string | Configures neighbor to BGP peer-group (configured peer-group name) | os10 | +| ``neighbor.peergroup_state`` | string: absent,present\* | Deletes the IPv4 BGP neighbor from the peer-group if set to absent | os10 | +| ``neighbor.distribute_list`` | list | Configures the distribute list to filter networks from routing updates (see ``distribute_list.*``) | os10 | +| ``distribute_list.in`` | string | Configures the name of the prefix-list to filter incoming packets | os10 | +| ``distribute_list.in_state`` | string: absent,present\* | Deletes the filter at incoming packets if set to absent | os10 | +| ``distribute_list.out`` | string | Configures the name of the prefix-list to filter outgoing packets | os10 | +| ``distribute_list.out_state`` | string: absent,present\* | Deletes the filter at outgoing packets if set to absent | os10 | +| ``neighbor.admin`` | string: up,down | Configures the administrative state of the neighbor | os10 | +| ``neighbor.adv_interval`` | integer | Configures the advertisement interval of the neighbor | os10 | +| ``neighbor.fall_over`` | string: absent,present | Configures the session fall on peer-route loss | os10 | +| ``neighbor.sender_loop_detect`` | boolean: true,false | Enables/disables the sender-side loop detect for neighbors | os10 | +| ``neighbor.src_loopback`` | integer | Configures the source loopback interface for routing packets | os10 | +| ``neighbor.ebgp_multihop`` | integer | Configures the maximum-hop count value allowed in eBGP neighbors that are not directly connected (default 255) | os10 | +| ``neighbor.subnet`` | string (required) | Configures the passive BGP neighbor to this subnet | os10 | +| ``neighbor.subnet_state`` | string: absent,present\* | Deletes the subnet range set for dynamic IPv4 BGP neighbor if set to absent | os10 | +| ``neighbor.limit`` | integer | Configures maximum dynamic peers count (key is required together with ``neighbor.subnet``) | os10 | +| ``neighbor.bfd`` | boolean | Enables BDF for neighbor | os10 | +| ``neighbor.description`` | string | Configures neighbor description | os10 | +| ``neighbor.state`` | string: absent,present\* | Deletes the IPv4 BGP neighbor if set to absent | os10 | +| ``redistribute`` | list | Configures the redistribute list to get information from other routing protocols (see ``redistribute.*``) | os10 | +| ``redistribute.route_type`` | string (required): static,connected,imported_bgp | Configures the name of the routing protocol to redistribute | os10 | +| ``redistribute.route_map_name`` | string | Configures the route-map to redistribute | os10 | +| ``redistribute.imported_bgp_vrf_name`` | string | Configures the redistribute imported BGP VRF name | os10 | +| ``redistribute.route_map`` | string: absent,present\* | Deletes the route-map to redistribute if set to absent | os10 | +| ``redistribute.address_type`` | string (required): ipv4,ipv6 | Configures the address type of IPv4 or IPv6 routes | os10 | +| ``redistribute.state`` | string: absent,present\* | Deletes the redistribution information if set to absent | os10 | +| ``bfd_all_neighbors`` | dictionary | Enables BFD for all BGP neighbors | os10 | +| ``bfd_all_neighbors.interval`` | integer: 100 to 1000 | Configures time interval for sending control packets to BFD peers in ms| os10 | +| ``bfd_all_neighbors.min_rx`` | integer: 100 to 1000 | Configures maximum waiting time for receiving control packets from BFD peers in ms| os10 | +| ``bfd_all_neighbors.multiplier`` | integer: 3 to 50 | Configures maximum number of consecutive packets that are not received from BFD peers before session state changes to Down| os10 | +| ``bfd_all_neighbors.role``| string: active, passive | Configures BFD role | os10 | +| ``bfd_all_neighbors.state`` |string: absent,present\* | Deletes BFD for all neighbors if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the local router BGP instance if set to absent | os10 | +| ``vrf`` | dictionary | Enables VRF under BGP | os10 | +| ``vrf.name`` | string (Required)| Configures VRF name | os10 | +| ``vrf.router_id`` | string | Configures Router ID for VRF | os10 | +| ``vrf.address_family`` | dictionary | Enables address familyaddress | os10 | +| ``vrf.address_family.type`` | string (required): ipv4,ipv6 | Configures address type IPv4 or IPv6 | os10 | +| ``vrf.redistribute`` | dictionary | Enables redistribute option | os10 | +| ``vrf.redistribute.imported_bgp_vrf_name`` | string | Configures the redistribute imported BGP VRF name | os10 | +| ``vrf.redistribute.route_type`` | string (l2vpn, ospf, bgp, connected, imported_bgp) | Configure redistribute type | os10 | +| ``vrf.redistribute.address_type`` | string (required): ipv4,ipv6 | Configures address type IPv4 or IPv6 | os10 | +| ``vrf.redistribute.state `` | string (required) | Configures the state as present or absent | os10 | +| ``vrf.neighbor`` | list | Configures IPv4 BGP neighbors under VRF | os10 | +| ``vrf.neighbor.admin`` | string: up,down | Configures the administrative state of the neighbor in VRF | os10 | +| ``vrf.neighbor.type`` | string : ipv4,ipv6 | Specifies the BGP neighbor type under VRF | os10 | +| ``vrf.neighbor.ip`` | string | Configures the IP address of the BGP neighbor in VRF | os10 | +| ``vrf.neighbor.interface`` | string | Configures the BGP neighbor interface in VRF | os10 | +| ``vrf.neighbor.remote_asn`` | integer | Configures the remote AS for the BGP peer in VRF | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_bgp* role to configure the BGP network and neighbors. It creates a *hosts* file with the switch details, a *host_vars* file with connection variables and the corresponding role variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. This example writes a simple playbook that only references the *os10_bgp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_bgp: + asn: 12 + router_id: 90.1.1.4 + maxpath_ibgp: 2 + maxpath_ebgp: 2 + graceful_restart: true + log_neighbor_changes: true + fast_ext_fallover: false + always_compare_med: true + default_loc_pref: 1000 + confederation: + identifier: 25 + peers: 23 24 + peers_state: present + route_reflector: + client_to_client: false + cluster_id: 4294967295 + address_family_ipv4: + aggregate_address: + - ip_and_mask: 1.1.1.1/16 + state: present + summary_only: true + dampening: + value: 15 750 2000 60 + route_map: qq + state: present + address_family_ipv6: + aggregate_address: + - ip_and_mask: 2001:4898:5808:ffa0::/126 + state: present + summary_only: true + best_path: + as_path: ignore + as_path_state: present + ignore_router_id: true + med: + - attribute: confed + state: present + ipv4_network: + - address: 101.1.1.0/30 + state: present + ipv6_network: + - address: "2001:4898:5808:ffa0::/126" + state: present + neighbor: + - name: ebgp_pg + type: peergroup + bfd: yes + state: present + - name: ibgp_pg + type: peergroup + weight: 10 + state: present + - type: ipv4 + interface: vlan20 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + description: "U_site2-spine1" + remote_asn: 11 + ip: 192.168.10.1 + peergroup: peer1 + peergroup_state: present + peergroup_type: ibgp + adv_interval: 40 + fall_over: present + password: bgppassword + route_reflector_client: true + src_loopback: 0 + address_family: + - type: ipv4 + activate: true + state: present + send_community: + - type: standard + state: present + state: present + - type: ipv4 + remote_asn: 13 + local_as: 10 + weight: 10 + ip: 192.168.12.3 + address_family: + - type: ipv4 + activate: true + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + add_path: both 3 + route_map: + - name: qq + filter: in + state: present + state: present + state: present + - type: ipv6 + remote_asn: 14 + ip: 2001:4898:5808:ffa2::1 + state: present + - type: ipv6 + description: "U_site2-spine1-Auto Discovered peers" + auto_peer: unnumbered-auto + ebgp_peergroup: ebgp_pg + ebgp_peergroup_state: absent + ibgp_peergroup: ibgp_pg + ibgp_peergroup_state: present + sender_loop_detect: true + password: bgppassword + address_family: + - type: ipv4 + activate: true + sender_loop_detect: true + state: present + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + - type: l2vpn + activate: true + sender_loop_detect: false + state: present + send_community: + - type: standard + state: present + admin: up + state: present + redistribute: + - route_type: static + route_map_name: aa + address_type: ipv4 + state: present + bfd_all_neighbors: + interval: 200 + min_rx: 200 + multiplier: 3 + role: active + state: present + vrf : + name: "GREEN" + address_family: + type: ipv4 + redistribute: + - route_type: l2vpn + address_type: ipv4 + state: present + neighbor: + - type: ipv4 + ip: "172.16.1.1" + remote_asn: 65400 + admin: up + state: present + + +**Simple playbook to configure BGP — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_bgp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_copy_config.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_copy_config.md new file mode 100644 index 00000000..e5e58a79 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_copy_config.md @@ -0,0 +1,131 @@ +Copy-config role +================ + +This role is used to push the backup running configuration into a Dell EMC PowerSwitch platform running Dell EMC SmartFabric OS10, and merges the configuration in the template file with the running configuration of the device. + +The copy-config role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- No predefined variables are part of this role +- Use *host_vars* or *group_vars* as part of the template file +- Configuration file is host-specific +- Copy the host-specific configuration to the respective file under the template directory in *<host_name>.j2* format +- Variables and values are case-sensitive + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_copy_config* role to push the configuration file into the device. It creates a *hosts* file with the switch details and corresponding variables. It writes a simple playbook that only references the *os10_copy_config* role. By including the role, you automatically get access to all of the tasks to push configuration file. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + + # This variable shall be applied in the below jinja template for each host by defining here + os10_bgp + asn: 64801 + +**Sample roles/os10_copy_config/templates/leaf1.j2** + + ! Leaf1 BGP profile on Dell OS10 switch + snmp-server community public ro + hash-algorithm ecmp crc + ! + interface ethernet1/1/1:1 + no switchport + ip address 100.1.1.2/24 + ipv6 address 2001:100:1:1::2/64 + mtu 9216 + no shutdown + ! + interface ethernet1/1/9:1 + no switchport + ip address 100.2.1.2/24 + ipv6 address 2001:100:2:1::2/64 + mtu 9216 + no shutdown + ! + router bgp {{ os10_bgp.asn }} + bestpath as-path multipath-relax + bestpath med missing-as-worst + router-id 100.0.2.1 + ! + address-family ipv4 unicast + ! + address-family ipv6 unicast + ! + neighbor 100.1.1.1 + remote-as 64901 + no shutdown + ! + neighbor 100.2.1.1 + remote-as 64901 + no shutdown + ! + neighbor 2001:100:1:1::1 + remote-as 64901 + no shutdown + ! + address-family ipv4 unicast + no activate + exit + ! + address-family ipv6 unicast + activate + exit + ! + neighbor 2001:100:2:1::1 + remote-as 64901 + no shutdown + ! + address-family ipv4 unicast + no activate + exit + ! + address-family ipv6 unicast + activate + exit + ! + +**Simple playbook to setup to push configuration file into device — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_copy_config + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_dns.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_dns.md new file mode 100644 index 00000000..023df325 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_dns.md @@ -0,0 +1,125 @@ +DNS role +======== + +This role facilitates the configuration of the domain name service (DNS). This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The DNS role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_dns keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``name_server`` | list | Configures DNS (see ``name_server.*``) | os10 | +| ``name_server.ip`` | list | Configures the name server IP | os10 | +| ``name_server.vrf`` | list | Configures VRF for each IP | os10 | +| ``name_server.state`` | string: absent,present\* | Deletes the name server IP if set to absent | os10 | +| ``domain_list`` | list | Configures domain-list (see ``domain_list.*``) | os10 | +| ``domain_list.name`` | list | Configures the domain-list name | os10 | +| ``domain_list.vrf`` | list | Configures VRF for each domain-list name | os10 | +| ``domain_list.state`` | string: absent,present\* | Deletes the domain-list if set to absent | os10 | + + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_dns* role to completely set up the DNS server configuration. The example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, generates the configuration commands as a .part file in *build_dir* path. By default it is set to false. It writes a simple playbook that only references the *os10_dns* role. By including the role, you automatically get access to all of the tasks to configure DNS. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_dns: + domain_lookup: true + name_server: + - ip: + - 3.1.1.1 + - 3.1.1.2 + vrf: + - test + - test1 + - ip: + - 3.1.1.2 + vrf: + - test1 + state: absent + - ip: + - 2.2.2.2 + - ip: + - 3.3.2.2 + state: absent + domain_list: + - name: + - dname7 + - dname8 + vrf: + - test + - test1 + - name: + - dname7 + vrf: + - test + - test1 + state: absent + - name: + - dname3 + - dname4 + - name: + - dname5 + - dname6 + state: absent + +> **NOTE**: vrf should be present which can be configured using os10_vrf role + +**Simple playbook to setup DNS — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_dns + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_ecmp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_ecmp.md new file mode 100644 index 00000000..8582e04b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_ecmp.md @@ -0,0 +1,78 @@ +ECMP role +========= + +This role facilitates the configuration of equal cost multi-path (ECMP), and it supports the configuration of ECMP for IPv4. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The ECMP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_ecmp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``ecmp_group_max_paths`` | integer | Configures the number of maximum paths per ECMP group | os10 | +| ``trigger_threshold`` | integer | Configures the number of link bundle utilization trigger threshold | os10 | + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_ecmp* role to configure ECMP for IPv4. The example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The example writes a simple playbook that only references the *os10_ecmp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_ecmp: + ecmp_group_max_paths: 3 + trigger_threshold: 50 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_ecmp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_fabric_summary.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_fabric_summary.md new file mode 100644 index 00000000..12f491dc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_fabric_summary.md @@ -0,0 +1,119 @@ +os10_fabric_summary +===================================== +This role is used to get show system information of all devices in the fabric. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Fabric summary role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``os10_cli_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the default value is used | +| ``os10_cli_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Dependencies +------------ + +- *xmltodict* library should be installed to get show command output in dict format from XML +- To install the package use the *pip install xmltodict* command + +Example playbook +---------------- + +This example uses the *os10_fabric_summary* role to completely get the show attributes. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the ansible_network_os variable with the corresponding Dell EMC OS10 name. + +The *os10_fabric_summary* role has a simple playbook that only references the *os10_fabric_summary* role. + +**Sample hosts file** + + site1-spine1 ansible_host=10.11.180.21 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site1-spine2 ansible_host=10.11.180.22 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine1 ansible_host=10.11.180.23 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine2 ansible_host=10.11.180.24 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + [spine] + site1-spine1 + site1-spine2 + site2-spine1 + site2-spine2 + [LeafAndSpineSwitch:children] + spine + +**Sample host_vars/site1-spine1** + + + cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + os10_cli_user: xxxx + os10_cli_pass: xxxx + ansible_network_os: dellemc.os10.os10 + +**Simple playbook to setup fabric summary — provision.yaml** + + --- + - name: show system summary command + hosts: localhost + gather_facts: False + connection: local + roles: + - os10_fabric_summary + +**Run** + + ansible-playbook -i hosts provision.yaml + +**Samaple Output** + + "results": [ + { + "device type": "S6010-ON", + "host": "10.11.180.21", + "hostname": "host3", + "inv_name": "site1-spine1", + "node-mac": "e4:f0:04:9b:e5:dc", + "service-tag": "D33FXC2", + "software-version": "10.4.9999EX" + }, + { + "device type": "S6010-ON", + "host": "10.11.180.22", + "hostname": "host22", + "inv_name": "site1-spine2", + "node-mac": "e4:f0:04:9b:eb:dc", + "service-tag": "J33FXC2", + "software-version": "10.4.9999EX" + }, + { + "device type": "S6010-ON", + "host": "10.11.180.24", + "hostname": "site2-spine1", + "inv_name": "site2-spine1", + "node-mac": "e4:f0:04:9b:ee:dc", + "service-tag": "343FXC2", + "software-version": "10.4.9999EX" + }, + { + "device type": "S6010-ON", + "host": "10.11.180.23", + "hostname": "site2-spine2", + "inv_name": "site2-spine2", + "node-mac": "e4:f0:04:9b:f1:dc", + "service-tag": "543FXC2", + "software-version": "10.4.9999EX" + } + ] + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_flow_monitor.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_flow_monitor.md new file mode 100644 index 00000000..77221904 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_flow_monitor.md @@ -0,0 +1,152 @@ +ACL flow-based monitor role +=========================== + +This role facilitates configuring ACL flow-based monitoring attributes. Flow-based mirroring is a mirroring session in which traffic matches specified policies that are mirrored to a destination port. Port-based mirroring maintains a database that contains all monitoring sessions (including port monitor sessions). This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The ACL flow-based role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take the `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- `os10_flow_monitor` (dictionary) with session ID key (in *session <ID>* format; 1 to 18) +- Variables and values are case-sensitive + +**session ID keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``session_type`` | string: local_*_,rspan-source,erspan-source | Configures the monitoring session type | os10 | +| ``description`` | string | Configures the monitor session description | os10 | +| ``port_match`` | list | Displays a list of interfaces with location source and destination | os10 | +| ``port_match.interface_name`` | string | Configures the interface | os10 | +| ``port_match.location`` | string: source,destination | Configures the source/destination of an interface | os10 | +| ``port_match.state`` | string: absent,present\* | Deletes the interface if set to absent | os10 | +| ``flow_based`` | boolean | Enables flow-based monitoring | os10 | +| ``shutdown`` | string: up,down\* | Enable/disables the monitoring session | os10 | +| ``state`` | string: absent,present\* | Deletes the monitoring session corresponding to the session ID if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_flow_monitor* role to configure session monitor configuration. It creates a *hosts* file with the switch details and corresponding variables. The hosts file defines the `anisble_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in the *build_dir* path. By default, the variable is set to false. +It writes a simple playbook that only references the *os10_flow_monitor* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + os10_flow_monitor: + session 1: + session_type: local + description: "Discription goes here" + port_match: + - interface_name: ethernet 1/1/4 + location: source + state: present + - interface_name: ethernet 1/1/3 + location: destination + state: present + flow_based: true + shutdown: up + state: present + session 2: + session_type: local + description: "Discription of session goes here" + port_match: + - interface_name: ethernet 1/1/6 + location: source + state: present + - interface_name: ethernet 1/1/7 + location: destination + state: present + flow_based: true + shutdown: up + state: present + session 3: + state: absent + os10_acl: + - name: testflow + type: ipv4 + description: testflow description + extended: true + entries: + - number: 5 + permit: true + protocol: icmp + source: any + destination: any + other_options: capture session 1 count + state: present + - number: 10 + permit: true + protocol: ip + source: 102.1.1.0/24 + destination: any + other_option: capture session 1 count byte + state: present + - number: 15 + permit: false + protocol: udp + source: any + destination: any + other_options: capture session 2 count byte + state: present + - number: 20 + permit: false + protocol: tcp + source: any + destination: any + other_options: capture session 2 count byte + state: present + stage_ingress: + - name: ethernet 1/1/1 + state: present + +> **NOTE**: Destination port should not be an L2/L3 port which can be configured using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_flow_monitor + - dellemc.os10.os10_acl + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_image_upgrade.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_image_upgrade.md new file mode 100644 index 00000000..bb79fa34 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_image_upgrade.md @@ -0,0 +1,73 @@ +Image upgrade role +=================================== + +This role facilitates upgrades or installation of a software image. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Image upgrade role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_image_upgrade keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``operation_type`` | string: cancel,install | Displays the type of image operation | os10 | +| ``software_image_url`` | string | Configures the URL path to the image file | os10 | +| ``software_version`` | string | Displays the software version of the image file | os10 | +| ``number_of_retries`` | int | Configures the numbe of retries to check the status of image install process | os10 | + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_image_upgrade* role to upgrade/install software image. It creates a *hosts* file with the switch details, corresponding *host_vars* file, and a simple playbook that references the *os10_image_upgrade* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + os10_image_upgrade: + operation_type: install + software_image_url: tftp://10.16.148.8/PKGS_OS10-Enterprise-10.2.9999E.5790-installer-x86_64.bin + software_version: 10.2.9999E + number_of_retries: 50 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_image_upgrade + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_interface.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_interface.md new file mode 100644 index 00000000..5692285e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_interface.md @@ -0,0 +1,173 @@ +Interface role +============== + +This role facilitates the configuration of interface attributes. It supports the configuration of admin state, description, MTU, IP address, IP helper, suppress_ra, and port mode. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Interface role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- `os10_interface` (dictionary) holds a dictionary with the interface name; interface name can correspond to any of the valid OS interfaces with the unique interface identifier name +- For physical interfaces, the interface name must be in *<interfacename> <tuple>* format; for logical interfaces, the interface must be in *<logical_interfacename> <id>* format; physical interface name can be *ethernet 1/1/32* +- For interface ranges, the interface name must be in *range <interface_type> <node/slot/port[:subport]-node/slot/port[:subport]>* format; *range ethernet 1/1/1-1/1/4* +- Logical interface names can be *vlan 1* or *port-channel 1* +- Variables and values are case-sensitive + +> **NOTE**: Only define supported variables for the interface type, and do not define the *switchport* variable for a logical interface. + +**interface name keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``desc`` | string | Configures a single line interface description | os10 | +| ``portmode`` | string | Configures port-mode according to the device type | os10 | +| ``switchport`` | boolean: true,false\* | Configures an interface in L2 mode | os10 | +| ``admin`` | string: up,down\* | Configures the administrative state for the interface; configuring the value as administratively "up" enables the interface; configuring the value as administratively "down" disables the interface | os10 | +| ``mtu`` | integer | Configures the MTU size for L2 and L3 interfaces (1280 to 65535) | os10 | +| ``fanout`` | string:dual, single; string:10g-4x, 40g-1x, 25g-4x, 100g-1x, 50g-2x (os10) | Configures fanout to the appropriate value | os10 | +| ``suppress_ra`` | string; present,absent | Configures IPv6 router advertisements if set to present | os10 | +| ``ip_type_dynamic`` | boolean: true,false | Configures IP address DHCP if set to true (*ip_and_mask* is ignored if set to true) | os10 | +| ``ipv6_type_dynamic`` | boolean: true,false | Configures an IPv6 address for DHCP if set to true (*ipv6_and_mask* is ignored if set to true) | os10 | +| ``ipv6_autoconfig`` | boolean: true,false | Configures stateless configuration of IPv6 addresses if set to true (*ipv6_and_mask* is ignored if set to true) | os10 | +| ``vrf`` | string | Configures the specified VRF to be associated to the interface | os10 | +| ``min_ra`` | string | Configures RA minimum interval time period | os10 | +| ``max_ra`` | string | Configures RA maximum interval time period | os10 | +| ``ip_and_mask`` | string | Configures the specified IP address to the interface | os10 | +| ``ipv6_and_mask`` | string | Configures a specified IPv6 address to the interface | os10 | +| ``virtual_gateway_ip`` | string | Configures an anycast gateway IP address for a VxLAN virtual network as well as VLAN interfaces| os10 | +| ``virtual_gateway_ipv6`` | string | Configures an anycast gateway IPv6 address for VLAN interfaces| os10 | +| ``state_ipv6`` | string: absent,present\* | Deletes the IPV6 address if set to absent | os10 | +| ``ip_helper`` | list | Configures DHCP server address objects (see ``ip_helper.*``) | os10 | +| ``ip_helper.ip`` | string (required) | Configures the IPv4 address of the DHCP server (A.B.C.D format) | os10 | +| ``ip_helper.state`` | string: absent,present\* | Deletes the IP helper address if set to absent | os10 | +| ``flowcontrol`` | dictionary | Configures the flowcontrol attribute (see ``flowcontrol.*``) | os10 | +| ``flowcontrol.mode`` | string: receive,transmit | Configures the flowcontrol mode | os10 | +| ``flowcontrol.enable`` | string: on,off | Configures the flowcontrol mode on | os10 | +| ``flowcontrol.state`` | string: absent,present\* | Deletes the flowcontrol if set to absent | os10 | +| ``ipv6_bgp_unnum`` | dictionary | Configures the ipv6 bgp unnum attributes (see ``ipv6_bgp_unnum.*``) below | os10 | +| ``ipv6_bgp_unnum.state`` | string: absent,present\* | Disable auto discovery of BGP unnumbered peer if set to absent | os10 | +| ``ipv6_bgp_unnum.peergroup_type`` | string: ebgp,ibgp | Specify the type of template to inherit from | os10 | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_interface* role to set up description, MTU, admin status, port mode, and switchport details for an interface. The example creates a *hosts* file with the switch details and orresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, this variable is set to false. The example writes a simple playbook that only references the *os10_interface* role. + +**Sample hosts file** + + leaf3 ansible_host= <ip_address> + +**Sample host_vars/leaf3** + + hostname: "leaf3" + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_interface: + ethernet 1/1/32: + desc: "Connected to Core 2" + mtu: 2500 + portmode: + admin: up + switchport: False + ip_and_mask: + ip_type_dynamic: True + ipv6_type_dynamic: True + ethernet 1/1/12: + desc: "ipv6 auto config" + switchport: False + mtu: 2500 + admin: up + ipv6_autoconfig: True + ethernet 1/1/14: + fanout: 10g-4x + ethernet 1/1/13: + desc: "set ipv6 address" + switchport: False + admin: up + ipv6_and_mask: 2001:4898:5809:faa2::10/126 + state_ipv6: present + ethernet 1/1/1: + desc: "Connected to Leaf1" + portmode: "trunk" + switchport: True + suppress_ra: present + admin: up + ethernet 1/1/3: + desc: site2-spine2 + ip_and_mask: 10.9.0.4/31 + mtu: 9216 + switchport: False + admin: up + flowcontrol: + mode: "receive" + enable: "on" + state: "present" + + vlan 100: + ip_and_mask: + ipv6_and_mask: 2001:4898:5808:ffaf::1/64 + state_ipv6: present + ip_helper: + - ip: 10.0.0.33 + state: present + admin: up + range ethernet 1/1/1-1/1/32: + mtu: 2500 + port-channel 10: + admin: up + switchport: False + suppress_ra: + ipv6_bgp_unnum: + state: present + peergroup_type: ebgp + vlan 10: + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + admin: up + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf3 + roles: + - dellemc.os10.os10_interface + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_lag.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_lag.md new file mode 100644 index 00000000..c5af266f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_lag.md @@ -0,0 +1,103 @@ +LAG role +======== + +This role facilitates the configuration of link aggregation group (LAG) attributes, and supports the creation and deletion of a LAG and its member ports. It also supports the configuration of an interface type as a static or dynamic LAG and minimum required link. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The LAG role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Object drives the tasks in this role +- `os10_lag` (dictionary) contains the hostname (dictionary) +- Hostname is the value of the *hostname* variable that corresponds to the name of the OS device +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value to any variable negates the corresponding configuration +- `os10_lag` (dictionary) holds a dictionary with the port-channel ID key in `Po <ID>` format (1 to 128) +- Variables and values are case-sensitive + +**port-channel ID keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``type`` | string: static,dynamic | Configures the interface either as a static or dynamic LAG | os10 | +| ``min_links`` | integer | Configures the minimum number of links in the LAG that must be in *operup* status (1 to 32) | os10 | +| ``max_bundle_size`` | integer | Configures the maximum bundle size for the port channel | os10 | +| ``lacp_system_priority`` | integer | Configures the LACP system-priority value | os10 | +| ``lacp_fallback_enable`` | boolean | Configures LACP fallback | os10 | +| ``channel_members`` | list | Specifies the list of port members to be associated to the port-channel (see ``channel_members.*``) | os10 | +| ``channel_members.port`` | string | Specifies valid interface names to be configured as port-channel members | os10 | +| ``channel_members.mode`` | string: active,passive,on | Configures mode of channel members | os10 | +| ``channel_members.port_priority`` | integer | Configures port priority on devices for channel members | os10 | +| ``channel_members.lacp_rate_fast`` | boolean | Configures the LACP rate as fast if set to true | os10 | +| ``state`` | string: absent,present\* | Deletes the LAG corresponding to the port-channel ID if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_lag* role to setup port channel ID and description, and configures hash algorithm and minimum links for the LAG. Channel members can be configured for the port-channel either in static or dynamic mode. You can also delete the LAG with the port-channel ID or delete the members associated to it. This example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_lag* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_lag: + Po 12: + type: dynamic + min_links: 2 + max_bundle_size: 2 + lacp_system_priority: 2 + channel_members: + - port: ethernet 1/1/31 + mode: "active" + port_priority: 3 + lacp_rate_fast: true + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_lag + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_lldp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_lldp.md new file mode 100644 index 00000000..e2f01b33 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_lldp.md @@ -0,0 +1,149 @@ +LLDP role +========= + +This role facilitates the configuration of link layer discovery protocol (LLDP) attributes at a global and interface level. It supports the configuration of hello, mode, multiplier, advertise TLVs, management interface, FCoE, and iSCSI at global and interface level. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The LLDP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_lldp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``enable`` | boolean | Enables or disables LLDP at a global level | os10 | +| ``multiplier`` | integer | Configures the global LLDP multiplier (2 to 10) | os10 | +| ``reinit`` | integer | Configures the reinit value (1 to 10) | os10 | +| ``timer`` | integer | Configures the timer value (5 to 254) | os10 | +| ``advertise`` | dictionary | Configures LLDP-MED and TLV advertisement at the global level (see ``advertise.*``) | os10 | +| ``advertise.med`` | dictionary | Configures MED TLVs advertisement (see ``med_tlv.*``) | os10 | +| ``med.fast_start_repeat_count`` | integer | Configures med fast start repeat count value (1 to 10) | os10 | +| ``med.application`` | list | Configures global MED TLVs advertisement for an application (see ``application.*``) | os10 | +| ``application.name`` | string | Configures the application name for MED TLVs advertisement | os10 | +| ``application.vlan_id`` | integer | Configures the VLAN ID for the application MED TLVs advertisement (1 to 4094) | os10 | +| ``application.l2_priority`` | integer | Configures the L2 priority for the application MED TLVs advertisement (0 to 7) | os10 | +| ``application.code_point_value`` | integer | Configures differentiated services code point values for MED TLVs advertisement (0 to 63) | os10 | +| ``application.vlan_type`` | string: tag, untag | Configures the VLAN type for the application MED TLvs advertisement | os10 | +| ``application.network_policy_id`` | integer | Configures network policy ID for the application MED TLVs advertisement | os10 | +| ``application.state`` | string: present\*,absent | Deletes the application if set to absent | os10 | +| ``local_interface`` | dictionary | Configures LLDP at the interface level (see ``local_interface.*``) | os10 | +| ``local_interface.<interface name>`` | dictionary | Configures LLDP at the interface level (see ``<interface name>.*``) | os10 | +| ``<interface name>.mode`` | string: rx,tx | Configures LLDP mode configuration at the interface level | os10 | +| ``<interface name>.mode_state`` | string: absent,present | Configures transmit/receive at the interface level| os10 | +| ``<interface name>.advertise`` | dictionary | Configures LLDP-MED TLV advertisement at the interface level (see ``advertise.*``) | os10 | +| ``advertise.med`` | dictionary | Configures MED TLVs advertisement at the interface level (see ``med_tlv.*``) | os10 | +| ``med.enable`` | boolean | Enables interface level MED capabilities | os10 | +| ``med.tlv`` | string | Configures MED TLV advertisement at interface level | os10 | +| ``med.tlv_state`` | string: present\*,absent | Deletes the interface level MED configuration if set to absent | os10 | +| ``med.application`` | list | Configures MED TLVs advertisement for the application at the interface level (see ``application.*``) | os10 | +| ``application.network_policy_id`` | integer | Configures the *network_policy_id* for the application of MED | os10 | +| ``application.state`` | string: present\*,absent | Deletes the associated network policy ID for the application if set to absent.| os10 | +| ``advertise.tlv`` | list | Configures TLVs advertisement at interface level (see `<interface_name>.tlv.*`) | os10 | +| ``tlv.name`` | string: basic-tlv,dcbxp,dcbxp-appln,dot1-tlv,dot3-tlv | Configures corresponding to the TLV name specified at the interface | os10 | +| ``tlv.value`` | string | Specifies corresponding TLV value according to the name as a string | os10 | +| ``tlv.state`` | string: present\*,absent | Deletes the interface level TLVs advertisement if set to absent | os10 | + + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_lldp* role to configure protocol lldp. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_lldp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_lldp: + enable: false + multiplier: 3 + reinit: 2 + timer: 5 + advertise: + med: + fast_start_repeat_count: 4 + application: + - name: guest-voice + network_policy_id: 0 + vlan_id: 2 + vlan_type: tag + l2_priority: 3 + code_point_value: 4 + state: present + - name: voice + network_policy_id: 1 + vlan_id: 3 + vlan_type: untag + l2_priority: 3 + code_point_value: 4 + state: absent + local_interface: + ethernet 1/1/1: + mode: rx + mode_state: present + advertise: + med: + enable: true + tlv: inventory + tlv_state: present + application: + - network_policy_id: 4 + state: present + tlv: + - name: basic-tlv + value: management-address port-description + state: present + - name: dcbxp-appln + value: iscsi + state: present + - name: dcbxp + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_lldp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_logging.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_logging.md new file mode 100644 index 00000000..2b65c3ec --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_logging.md @@ -0,0 +1,97 @@ +Logging role +============ + +This role facilitates the configuration of global logging attributes, and it supports the configuration of logging servers. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Logging role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, it generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_logging keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``logging`` | list | Configures the logging server (see ``logging.*``) | os10 | +| ``logging.ip`` | string (required) | Configures the IPv4 address for the logging server (A.B.C.D format) | os10 | +| ``logging.state`` | string: absent,present\* | Deletes the logging server if set to absent | os10 | +| ``console`` | dictionary | Configures logging to the console (see ``console.*``) | os10 | +| ``console.enable`` | boolean | Enables/disables logging to the console | os10 | +| ``console.severity`` | string | Configures the minimum severity level for logging to the console | os10 | +| ``log_file`` | dictionary | Configures logging to a log file (see ``log_file.*``) | os10 | +| ``log_file.enable`` | boolean | Enables/disables logging to a log file | os10 | +| ``log_file.severity`` | string | Configures the minimum severity level for logging to a log file | os10 | +| ``source_interface`` | string | Configures the source interface for logging | os10 | + +> **NOTE**: Asterisk (_*_) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_logging* role to completely set up logging servers. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_logging: + logging: + - ip: 1.1.1.1 + state: absent + console: + enable: True + severity: log-err + log_file: + enable: True + severity: log-err + source_interface: "ethernet1/1/30" + +**Simple playbook to setup logging — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_logging + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_network_validation.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_network_validation.md new file mode 100644 index 00000000..154f5a25 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_network_validation.md @@ -0,0 +1,304 @@ +Network validation role +========================= + +This roles is used to verify network validation. It validates network features of a wiring connection, BGP neighbors, MTU between neighbors, and VLT pairing. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. The Network validation role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +- **Wiring validation** — Based on the LLDP neighbor establishment, the intended neighbor input model is defined by the _group_var/all_ user which is compared with the actual LLDP neighbor; report is generated if there is any mismatch with the intended neighbors + +- **BGP validation** — Based on the BGP neighbor state establishment, report is generated if the BGP neighbor state is not in an established state + +- **MTU validation** — Based on the interface MTU, the report is generated if there is an MTU mismatch between LLDP neighbors + +- **VLT validation** — Based on the VLT information, the report is generated if the backup VLT link is down or not present + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- Variables and values are case-sensitive + +**wiring_validation keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``intended_neighbors`` | list | Defines topology details planned | os10 | +| ``source_switch`` | string | Defines the source switch inventory name planned | os10 | +| ``source_port`` | string | Defines the source port planned | os10 | +| ``dest_switch`` | string | Defines the destination switch inventory name planned | os10 | +| ``dest_port`` | string | Defines the destination port planned | os10 | + +**bgp_validation keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``intended_bgp_neighbors`` | list | Defines topology details planned | os10 | +| ``source_switch`` | string | Defines the source switch inventory name planned | os10 | + +**vlt_validation keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``intended_vlt_pairs`` | list | Defines topology details planned | os10 | +| ``primary`` | string | Defines the primary role of switch inventory name planned | os10 | +| ``secondary`` | string | Defines the secondary role of switch inventory name planned | os10 | + +Connection variables +-------------------- + +Ansible Dell EMC roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible _group_vars_ or _host_vars_ directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if the value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; defaults to 22 | +| ``os10_cli_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the default value is used | +| ``os10_cli_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the _become_ method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use, if required, to enter privileged mode on the remote device; if `ansible_become` is set to no, this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Value is used to load the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Dependencies +------------ + +- The _xmltodict_ library should be installed to convert show command output in dictionary format from XML +- To install the package, use the pip install xmltodict command +- The *os10_fabric_summary* role must be included to query system network summary information + +Example playbook +---------------- + +This example uses the *os10_network_validation* role to verify network validations. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + + +**Sample hosts file** + + site1-spine1 ansible_host=10.11.180.21 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site1-spine2 ansible_host=10.11.180.22 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine1 ansible_host=10.11.180.23 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine2 ansible_host=10.11.180.24 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + [spine] + site1-spine1 + site1-spine2 + site2-spine1 + site2-spine2 + [LeafAndSpineSwitch:children] + spine + + +**Sample host_vars/site1-spine1** + + cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + + os10_cli_user: xxxx + os10_cli_pass: xxxx + ansible_network_os: dellemc.os10.os10 + + +#### Sample ``group_var/all`` + +**Sample input for wiring validation** + + + intended_neighbors: + - source_switch: site1-spine2 + source_port: ethernet1/1/5 + dest_port: ethernet1/1/29 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/6 + dest_port: ethernet1/1/30 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/7 + dest_port: ethernet1/1/31 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/8 + dest_port: ethernet1/1/32 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/9 + dest_port: ethernet1/1/21 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/7 + dest_port: ethernet1/1/29 + dest_switch: site1-spine3 + +**Sample input for BGP validation** + + intended_bgp_neighbors: + - source_switch: site1-spine1 + neighbor_ip: ["10.11.0.1","10.9.0.1","10.9.0.3","10.9.0.5","1.1.1.1"] + - source_switch: site1-spine2 + neighbor_ip: ["10.11.0.0","10.9.0.9","10.9.0.11","10.9.0.15"] + +**Sample input for VLT validation** + + intended_vlt_pairs: + - primary: site1-spine1 + secondary: site2-spine2 + - primary: site2-spine1 + secondary: site2-spine2 + + +#### Simple playbook to setup network validation + +**Sample playbook of ``validation.yaml`` to run complete validation** + + --- + - name: setup network validation + hosts: localhost + gather_facts: no + connection: local + roles: + - os10_network_validation + +**Sample playbook to run wiring validation** + + --- + - name: setup wiring validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: wiring_validation.yaml + +**Sample playbook to run BGP validation** + + --- + - name: setup bgp validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: bgp_validation.yaml + +**Sample playbook to run VLT validation** + + --- + - name: setup vlt validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: vlt_validation.yaml + +**Sample playbook to run MTU validation** + + --- + - name: setup mtu validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: mtu_validation.yaml + + +**Run** + +Execute the playbook and examine the results. + + ansible-playbook -i inventory.yaml validation.yaml + +**sample output of wiring validation** + + "results": [ + { + "dest_port": "ethernet1/1/1", + "dest_switch": "site2-spine2", + "error_type": "link-missing", + "reason": "link is not found for source switch: site2-spine1,port: ethernet1/1/1", + "source_port": "ethernet1/1/1", + "source_switch": "site2-spine1" + }, + { + "dest_port": "ethernet1/1/2", + "dest_switch": "site2-spine1", + "error_type": "link-mismatch", + "reason": "Destination switch is not an expected value, expected switch: site2-spine1,port: ethernet1/1/2; actual switch: site1-spine2(svc-tag:J33FXC2, node_mac:e4:f0:04:9b:eb:dc), port: ethernet1/1/1", + "source_port": "ethernet1/1/1", + "source_switch": "site1-spine1" + } + ] + +**sample output of BGP validation** + + "results": [ + { + "bgp_neighbor": "10.9.0.1", + "bgp_state": "idle", + "error_type": "remote_port_down", + "possible_reason": "remote port site2-spine1 ethernet1/1/2 is down", + "source_switch": "site1-spine1" + }, + { + "bgp_neighbor": "-", + "bgp_state": "idle", + "error_type": "not_an_intended_neighbor", + "possible_reason": "neighbor 10.9.0.7 is not an intended, please add this neighbor in the intended_bgp_neighbors", + "source_switch": "site1-spine1" + }, + { + "bgp_neighbor": "1.1.1.1", + "error_type": "config_missing", + "possible_reason": "neighbor config missing", + "source_switch": "site1-spine1" + }, + { + "bgp_neighbor": "10.9.0.9", + "bgp_state": "idle", + "error_type": "remote_port_down", + "possible_reason": "remote port site2-spine1 ethernet1/1/3 is down", + "source_switch": "site1-spine2" + } + ] + +**sample output of VLT validation** + + "results": [ + { + "error_type": "secondary_mismatch", + "intended_primary": "site1-spine1", + "intended_secondary": "site2-spine2", + "possible_reason": "config mismatch as site2-spine2 is expected, but the actual secondary is site1-spine2 ", + "secondary": "site1-spine2" + }, + { + "error_type": "peer_missing", + "intended_primary": "site2-spine1", + "intended_secondary": "site2-spine2", + "possible_reason": "peer info is not configured or peer interface is down" + } + ] + +**sample output of MTU validation** + + "msg": { + "results": "There is no MTU mistmatch between neighbors" + } + + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_ntp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_ntp.md new file mode 100644 index 00000000..1fa151de --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_ntp.md @@ -0,0 +1,116 @@ +NTP role +======== + +This role facilitates the configuration of network time protocol (NTP) attributes. It specifically enables configuration of NTP server, NTP source, authentication, and broadcast service. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The NTP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_ntp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``server`` | list | Configures the NTP server (see ``server.*``) | os10 | +| ``server.ip`` | string (required) | Configures an IPv4 address for the NTP server (A.B.C.D format) | os10 | +| ``server.key`` | integer | Configures the peer authentication key for the NTP server | os10 | +| ``server.prefer`` | boolean | Configures the peer preference | os10 | +| ``server.state`` | string: absent,present\* | Deletes the NTP server if set to absent | os10 | +| ``source`` | string | Configures the interface for the source address | os10 | +| ``master`` | integer | Configures the local clock to act as the server | os10 | +| ``authenticate`` | boolean | Configures authenticate time sources | os10 | +| ``authentication_key`` | list | Configures authentication key for trusted time sources (see ``authentication_key.*``) | os10 | +| ``authentication_key.key_num`` | integer | Configures authentication key number | os10 | +| ``authentication_key.key_string_type`` | integer: 0,7 | Configures hidden authentication key string if the value is 7, and configures unencrypted authentication key string if the value is 0 | os10 | +| ``authentication_key.key_string`` | string | Configures the authentication key string | os10 | +| ``authentication_key.state`` | string: absent,present\* | Deletes the authenticaton key if set to absent | os10 | +| ``trusted_key`` | list | Configures key numbers for trusted time sources (see ``trusted_key.*``) | os10 | +| ``trusted_key.key_num`` | integer | Configures the key number | os10 | +| ``trusted_key.state`` | string: absent,present\* | Deletes the trusted key if set to absent | os10 | +| ``intf`` | dictionary | Configures NTP on the interface (see ``intf.*``) | os10 | +| ``intf.<interface name>`` | dictionary | Configures NTP on the interface (see ``<interface name>.*``) | os10 | +| ``<interface name>.disable`` | boolean | Configures NTP disable on the interface | os10 | +| ``<interface name>.broadcast`` | boolean | Configures NTP broadcast client service on the interface | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_ntp* role to set the NTP server, source ip, authentication and broadcast service. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When the `os10_cfg_generate` variable is set to true, it generates the configuration commands as a .part file in *build_dir* path. By default it is set to false. The example writes a simple playbook that only references the *os10_ntp* role. + +By including the role, you automatically get access to all of the tasks to configure NTP attributes. The sample *host_vars* is for os10. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + host: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_ntp: + source: ethernet 1/1/2 + master: 5 + authenticate: true + authentication_key: + - key_num: 123 + key_string_type: 7 + key_string: test + state: present + trusted_key: + - key_num: 1323 + state: present + server: + - ip: 2.2.2.2 + key: 345 + prefer: true + state: present + intf: + ethernet 1/1/2: + disable: true + broadcast: true + +**Simple playbook to setup NTP — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_ntp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_prefix_list.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_prefix_list.md new file mode 100644 index 00000000..d0a3128d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_prefix_list.md @@ -0,0 +1,104 @@ +Prefix-list role +================ + +This role facilitates the configuration of a prefix-list. It supports the configuration of an IP prefix-list, and assigns the prefix-list to line terminals. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The prefix-list role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` value +- If `os10_cfg_generate` set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_prefix_list keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``type`` | string (required): ipv4,ipv6 | Configures an L3 (IPv4/IPv6) prefix-list | os10 | +| ``name`` | string (required) | Configures the prefix-list name | os10 | +| ``description`` | string | Configures the prefix-list description | os10 | +| ``entries`` | list | Configures rules in the prefix-list (see ``seqlist.*``) | os10 | +| ``entries.number`` | int (required) | Specifies the sequence number of the prefix-list rule | os10 | +| ``entries.permit`` | boolean (required): true,false | Specifies the rule to permit packets if set to true, and specifies to reject packets if set to false | os10 | +| ``entries.net_num`` | string (required) | Specifies the network number | os10 | +| ``entries.mask`` | string (required) | Specifies the mask | os10 | +| ``entries.condition_list`` | list | Configures conditions to filter packets (see ``condition_list.*``)| os10 | +| ``condition_list.condition`` | list | Specifies the condition to filter packets from the source address | os10 | +| ``condition_list.prelen`` | string (required) | Specifies the allowed prefix length | os10 | +| ``entries.state`` | string: absent,present\* | Deletes the rule from the prefix-list if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the prefix-list if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_prefix_list* role to configure prefix-list for both IPv4 and IPv6. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_prefix_list* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_prefix_list: + - name: testpl + type: ipv4 + description: pl + entries: + - number: 19 + permit: true + net_num: 20.0.0.0 + mask: 16 + condition_list: + - condition: ge + prelen: 17 + - condition: le + prelen: 18 + state: present + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_prefix_list + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_qos.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_qos.md new file mode 100644 index 00000000..e8588a38 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_qos.md @@ -0,0 +1,90 @@ +QoS role +======== + +This role facilitates the configuration quality of service (QoS) attributes like policy-map and class-map. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The QoS role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_qos keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``policy_map`` | list | Configures the policy-map (see ``policy_map.*``) | os10 | +| ``policy_map.name`` | string (required) | Configures the policy-map name | os10 | +| ``policy_map.type`` | string: qos\*, application, control-plane, network-qos, queuing in os10 | Configures the policy-map type | os10 | +| ``policy_map.state`` | string: present\*,absent | Deletes the policy-map if set to absent | os10 | +| ``class_map`` | list | Configures the class-map (see ``class_map.*``) | os10 | +| ``class_map.name`` | string (required) | Configures the class-map name | os10 | +| ``class_map.type`` | string: qos\*,application,control-plane,network-qos,queuing | Configures the class-map type | os10 | +| ``class_map.state`` | string: present\*,absent | Deletes the class-map if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_qos* role to configure the policy-map class-map. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_qos* role. By including the role, you automatically get access to all of the tasks to configure QoS features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_qos: + policy_map: + - name: testpolicy + type: qos + state: present + class_map: + - name: testclass + type: application + state: present + +**Simple playbook to setup qos — leaf.yaml** + + - hosts: leaf1 + roles: + - Dell-Networking.os10.os10_qos + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_raguard.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_raguard.md new file mode 100644 index 00000000..eb6c05c5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_raguard.md @@ -0,0 +1,126 @@ +IPv6 RA uard role +=================== + +This role facilitates the configuration of IPv6 RA Guard attributes. It specifically enables configuration of IPv6 RA Guard feature enable/disable, IPv6 RA Guard policy definition and policy parameter configuration, and attachment of IPv6 RA Guard policy to an interface. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The IPv6 RA Guard role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_raguard keys** + + +| Key | Type | Description |Support | +|--------------------------------------|-------------------------|----------------------------------------------------------|---------| +| ``enable`` | boolean | Enables IPv6 RA-Guard feature | os10 | +| ``policy`` | list | Configures the IPv6 RA Guard policy (see ``policy.*``) | os10 | +| ``policy.state`` | string: absent/present\*| Deletes the policy if set to absent | os10 | +| ``policy.name`` | string (required) | Configures the IPv6 RA Guard policy name | os10 | +| ``policy.device_role.value`` | string (required) | Configures the device role for a policy | os10 | +| ``policy.device_role.state`` | string: absent,present\*| Deletes the device role if set to absent | os10 | +| ``policy.managed_config_flag.value`` | string | Configures the managed config flag param for a policy | os10 | +| ``policy.managed_config_flag.state`` | string: absent,present\*| Deletes the managed config flag if set to absent | os10 | +| ``policy.other_config_flag.value`` | string | Configures the other config flag param for a policy | os10 | +| ``policy.other_config_flag.state`` | string: absent,present\*| Deletes the other config flag if set to absent | os10 | +| ``policy.mtu.value`` | integer | Configures the MTU param for a policy | os10 | +| ``policy.mtu.state`` | string: absent,present\*| Deletes the MTU if set to absent | os10 | +| ``policy.reachable_time.value`` | integer | Configures the reachable time param for a policy | os10 | +| ``policy.reachable_time.state`` | string: absent,present\*| Deletes the reachable time if set to absent | os10 | +| ``policy.retrans_timer.value`` | integer | Configures the retransmit timer param for a policy | os10 | +| ``policy.retrans_timer.state`` | string: absent,present\*| Deletes the retransmit timer if set to absent | os10 | +| ``policy.router_lifetime.value`` | integer | Configures the router lifetime param for a policy | os10 | +| ``policy.router_lifetime.state`` | string: absent,present\*| Deletes the router lifetime if set to absent | os10 | +| ``policy.router_preference.value`` | string | Configures the router preference param for a policy | os10 | +| ``policy.router_preference.state`` | string: absent,present\*| Deletes the router preference if set to absent | os10 | +| ``policy.match`` | list | Configures the prefix/ACL/MAC list param for a policy | os10 | +| ``policy.match.type`` | string | Configures the prefix/ACL/MAC type for a policy | os10 | +| ``policy.match.name`` | string | Configures the prefix/ACL/MAC name for a policy | os10 | +| ``policy.match.state`` | string: absent,present\*| Deletes the prefix/ACL/MAC if set to absent | os10 | +| ``intf`` | dictionary | Configures IPv6 RA Guard on the interface (see``intf.*``) | os10 | +| ``intf.<interface name>`` | dictionary | Configures RA Guard on the interface (see``<interface name>.*``)| os10 | +| ``<interface name>.policy_name`` | String | Configures RA Guard policy name to be attached on an interface | os10 | +| ``<interface name>.vlan`` | String | Configures VLAN name to which policy to be attached on an interface| os10| +| ``<interface name>.state`` | String: absent,present\*| Deletes the policy if set to absent an interface | os10| + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_raguard* role to configure the IPv6 RA Guard feature enable/disable, IPv6 RA Guard Policy defination and policy parameter configuration, Attachment of IPv6 RA Guard policy to an interface. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, it generates the configuration commands as a .part file in *build_dir* path. By default it is set to false. The example writes a simple playbook that only references the *os10_raguard* role. By including the role, you automatically get access to all of the tasks to configure IPv6 RA Guard attributes. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + host: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_raguard: + enable: true + policy: + - policy_name: test + device_role: + value: router + state: present + managed_config_flag: + value: "on" + state: present + mtu: + value: 1280 + state: present + match: + - type: prefix_list + name: test_prefix + state: present + state: present + intf: + ethernet 1/1/2: + policy_name: test + vlan: 10 + state: present + +**Simple playbook to setup IPv6 RA Guard — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_raguard + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_route_map.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_route_map.md new file mode 100644 index 00000000..1976df38 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_route_map.md @@ -0,0 +1,190 @@ +Route-map role +============== + +This role facilitates the configuration of route-map attributes. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The route-map role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_route_map keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``route_map`` | list | Configures the route-map (see ``route_map.*``) | os10 | +| ``route_map.name`` | string (required) | Configures the route-map name | os10 | +| ``route_map.permit`` | boolean | Configures permit/deny set operations | os10 | +| ``route_map.seq_num`` | integer | Configures the sequence number | os10 | +| ``route_map.continue`` | integer | Configures the next sequence number | os10 | +| ``route_map.set`` | dictionary | Configures route-map to set values in the destination routing protocol (see ``set.*``) | os10 | +| ``set.local_pref`` | integer | Configures the BGP local preference path attribute | os10 | +| ``set.metric`` | string | Configures a specific value to add or subtract from the existing metric value ("+ <value>", "- <value>", <value> format) | os10 | +| ``set.metric_type`` | string: internal,type-1,type-2 | Configures the metric type for the destination routing protocol | os10 | +| ``set.origin`` | string: igp,egp,incomplete | Configures the BGP origin attribute | os10 | +| ``set.weight`` | integer | Configures the weight for the BGP route | os10 | +| ``set.comm_list`` | dictionary | Configures the BGP community list (see ``comm_list.*``) | os10 | +| ``comm_list.add`` | string | Adds the community attribute of a BGP update | os10 | +| ``comm_list.delete`` | string | Deletes a community attribute of a BGP update | os10 | +| ``set.community`` | string | Configures the community attribute for a BGP route update | os10 | +| ``set.extcomm_list`` | dictionary | Configures the BGP extcommunity list (see ``extcomm_list.*``) | os10 | +| ``extcomm_list.add`` | string | Adds an extended community attribute of a BGP update | os10 | +| ``extcomm_list.delete`` | string | Deletes the extended community attribute of a BGP update | os10 | +| ``set.extcommunity`` | string | Configures the extended community attribute for a BGP route update | os10 | +| ``set.next_hop`` | list | Configures the next-hop address (see ``next_hop.*``) | os10 | +| ``next_hop.type`` | string: ip,ipv6 | Configures the type of the next-hop address | os10 | +| ``next_hop.address`` | string | Configures the next-hop address | os10 | +| ``next_hop.track_id`` | integer | Configures the object track ID | os10 | +| ``next_hop.state`` | string: present\*,absent | Deletes the next-hop address if set to absent | os10 | +| ``route_map.match`` | list | Configures the route-map to match values from the route table (see ``match.*``) | os10 | +| ``match.ip_type`` | string (required): ipv4,ipv6 | Configures the IPv4/IPv6 address to match | os10 | +| ``match.access_group`` | string | Configures the access-group or list to match | os10 | +| ``match.source_protocol_ebgp`` | string | Configures the source protocol to eBGP to match | os10 | +| ``match.source_protocol_ibgp`` | string | Configures the source protocol to iBGP to match | os10 | +| ``match.source_protocol_evpn`` | string | Configures the source protocol to EVPN to match | os10 | +| ``match.source_protocol_static`` | string | Configures the source protocol to static to match | os10 | +| ``match.source_protocol_connected`` | string | Configures the source protocol to connected to match | os10 | +| ``match.source_protocol_ospf`` | string | Configures the source protocol to OSPF to match | os10 | +| ``match.prefix_list`` | string | Configures the IP prefix-list to match against | os10 | +| ``route_map.state`` | string, choices: present\*,absent | Deletes the route-map if set to absent | os10 | +| ``as_path`` | list | Configures the BGP AS path filter (see ``as_path.*``) | os10 | +| ``as_path.access_list`` | string (required) | Configures the access-list name | os10 | +| ``as_path.permit`` | boolean (required) | Configures an AS path to accept or reject | os10 | +| ``as_path.regex``| string (required) | Configures a regular expression | os10 | +| ``as_path.state`` | string: absent,present\* | deletes the BGP as path filter if set to absent | os10 | +| ``community_list`` | list | Configures a community list entry (see ``community_list.*``) | os10 | +| ``community_list.type`` | string (required): standard,expanded | Configures the type of community-list entry | os10 | +| ``community_list.name`` | string (required) | Configures the name of community-list entry | os10 | +| ``community_list.permit`` | boolean(required) | Configures the community to accept or reject | os10 | +| ``community_list.regex`` | string (required) | Configures the regular expression for extended community list; mutually exclusive with *community_list.community* | os10 | +| ``community_list.community`` | string (required) | Configures a well-known community or community number for standard community list; mutually exclusive with *community_list.regex* | os10 | +| ``community_list.state`` | string: absent,present\* | Deletes the community list entry if set to absent | os10 | +| ``extcommunity_list`` | list | Configures extcommunity-list entry (see ``extcommunity_list.*``) | os10 | +| ``extcommunity_list.type`` | string (required): standard,expanded | Configures the type of extcommunity-list entry | os10 | +| ``extcommunity_list.name`` | string (required) | Configures the name of extcommunity-list entry | os10 | +| ``extcommunity_list.permit`` | boolean(required) | Configures the extcommunity to accept or reject | os10 | +| ``extcommunity_list.regex`` | string (required) | Configures the regular expression for the extended extcommunity list; mutually exclusive with *extcommunity_list.community* | os10 | +| ``extcommunity_list.community`` | string (required) | Configures the extended community for standard community-list; mutually exclusive with *extcommunity_list.regex* | os10 | +| ``extcommunity_list.state`` | string: absent,present\* | Deletes the extcommunity-list entry if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_route_map* role for the route-map, policy-map, and class-map. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_route_map* role. By including the role, you automatically get access to all of the tasks to configure route-map features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_route_map: + as_path: + - access_list: aa + permit: true + regex: www + state: present + community_list: + - type: expanded + name: qq + permit: true + regex: aaa + state: present + - type: standard + name: qqq + permit: false + community: internet + state: present + extcommunity_list: + - type: expanded + name: qq + permit: true + regex: aaa + state: present + - type: standard + name: qqq + permit: false + community: "rt 22:33" + state: present + route_map: + - name: test + permit: true + seq_num: 1 + continue: 20 + match: + - ip_type: ipv4 + access_group: testaccess + prefix_list: testprefix + source_protocol_ebgp: present + source_protocol_ibgp: present + source_protocol_evpn: present + source_protocol_static: present + source_protocol_ospf: present + source_protocol_connected: present + set: + local_pref: 1200 + metric_type: internal + metric: + 30 + origin: igp + weight: 50 + next_hop: + - type: ip + address: 10.1.1.1 + track_id: 3 + state: present + community: internet + comm_list: + add: qq + delete: qqq + extcommunity: "22:33" + extcomm_list: + add: aa + delete: aa + state: present + +**Simple playbook to setup QoS —leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_route_map + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_snmp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_snmp.md new file mode 100644 index 00000000..e5eb0512 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_snmp.md @@ -0,0 +1,122 @@ +SNMP role +========= + +This role facilitates the configuration of global SNMP attributes. It supports the configuration of SNMP server attributes including users, group, community, location, and traps. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The SNMP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_snmp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``snmp_contact`` | string | Configures SNMP contact information | os10 | +| ``snmp_location`` | string | Configures SNMP location information | os10 | +| ``snmp_community`` | list | Configures SNMP community information (see ``snmp_community.*``) | os10 | +| ``snmp_community.name`` | string (required) | Configures the SNMP community string | os10 | +| ``snmp_community.access_mode`` | string: ro,rw | Configures access-mode for the community | os10 | +| ``snmp_community.state`` | string: absent,present\* | Deletes the SNMP community information if set to absent | os10 | +| ``snmp_host`` | list | Configures SNMP hosts to receive SNMP traps (see ``snmp_host.*``) | os10 | +| ``snmp_host.ip`` | string | Configures the IP address of the SNMP trap host | os10 | +| ``snmp_host.communitystring`` | string | Configures the SNMP community string of the trap host | os10 | +| ``snmp_host.udpport`` | string | Configures the UDP number of the SNMP trap host (0 to 65535) | os10 | +| ``snmp_host.version`` | string (required) | Specifies the SNMP version of the host (1 or 2c in os10) | os10 | +| ``snmp_host.state`` | string: absent,present\* | Deletes the SNMP trap host if set to absent | os10 | +| ``snmp_traps`` | list | Configures SNMP traps (see ``snmp_traps.*``) | os10 | +| ``snmp_traps.name`` | string | Enables SNMP traps | os10 | +| ``snmp_traps.state`` | string: absent,present\* | Deletes the SNMP trap if set to absent | os10 | +| ``snmp_view`` | list | Configures SNMPv3 view information (see ``snmp_view.*``) | os10 | +| ``snmp_view.name`` | string | Configures the SNMP view name (up to 20 characters) | os10 | +| ``snmp_view.oid_subtree`` | integer | Configures the SNMP view for the OID subtree | os10 | +| ``snmp_view.include`` | boolean: true,false | Specifies if the MIB family should be included or excluded from the view | os10 | +| ``snmp_view.state`` | string: absent,present\* | Deletes the SNMP view if set to absent | os10 | + + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_snmp* role to completely set up the SNMP server attributes. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_snmp* role. By including the role, you automatically get access to all of the tasks to configure SNMP features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_snmp: + snmp_contact: test + snmp_location: Chennai + snmp_community: + - name: public + access_mode: ro + state: present + snmp_traps: + - name: all + state: present + snmp_view: + - name: view_1 + oid_subtree: 2 + include: true + state: absent + snmp_host: + - ip: 1.1.1.1 + communitystring: c1 + version: "2c" + udpport: 4 + state: present + - ip: 2.2.2.2 + version: 1 + communitystring: c3 + state: present + +**Simple playbook to setup SNMP — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_snmp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_system.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_system.md new file mode 100644 index 00000000..955d3e76 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_system.md @@ -0,0 +1,126 @@ +System role +=========== + +This role facilitates the configuration of global system attributes. It specifically enables configuration of hostname and hashing algorithm. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The System role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_system keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``hostname`` | string | Configures a hostname to the device (no negate command) | os10 | +| ``hardware_forwarding`` | string: scaled-l2,scaled-l3-routes,scaled-l3-hosts | Configures hardware forwarding mode | os10 | +| ``hash_algo`` | dictionary | Configures hash algorithm commands (see ``hash_algo.*``) | os10 | +| ``hash_algo.algo`` | list | Configures hashing algorithm (see ``algo.*``) | os10 | +| ``algo.name`` | string (required) | Configures the name of the hashing algorithm | os10 | +| ``algo.mode`` | string (required) | Configures the hashing algorithm mode | os10 | +| ``algo.state`` | string: absent,present\* | Deletes the hashing algorithm if set to absent | os10 | +| ``load_balance`` | dictionary | Configures the global traffic load balance (see ``load_balance.*``) | os10 | +| ``load_balance.ingress_port`` | boolean: true,false | Specifies whether to use the source port ID for the hashing algorithm | os10 | +| ``load_balance.ip_selection`` | list | Configures IPv4 key fields to use in hashing algorithm; | os10 | +| ``ip_selection.field`` | string | Configures IPv4 key fields to use in hashing algorithm | os10 | +| ``ip_selection.state`` | string: absent,present\* | Deletes the IPv4 key fields if set to absent | os10 | +| ``load_balance.ipv6_selection`` | list | Configures IPv6 key fields to use in hashing algorithm | os10 | +| ``ipv6_selection.field`` | string | Configures IPv6 key fields to use in hashing algorithm | os10 | +| ``ipv6_selection.state`` | string: absent,present\* | Deletes the IPv6 key fields if set to absent | os10 | +| ``load_balance.mac_selection`` | list | Configures MAC key fields to use in hashing algorithm (see ``mac_selection.*``) | os10 | +| ``mac_selection.field`` | string | Configures MAC key fields to use in hashing algorithm | os10 | +| ``mac_selection.state`` | string: absent,present\* | Deletes the MAC key fields if set to absent | os10 | +| ``load_balance.tcp_udp_selection`` | list | Configures TCP UDP ports for load balancing configurations (see ``tcp_udp_selection.*``) | os10 | +| ``tcp_udp_selection.field`` | string | Configures TCP UDP port fields to use in hashing algorithm | os10 | +| ``tcp_udp_selection.state`` | string: absent,present\* | Deletes the TCP UDP ports if set to absent | os10 | +| ``min_ra`` | string | Configure global RA minimum interval value, applicable to all interfaces across VRFs | os10 | +| ``max_ra`` | string | Configure global RA maximum interval value, applicable to all interfaces across VRFs | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_system role* to completely set the NTP server, hostname, enable password, management route, hash alogrithm, clock, line terminal, banner and reload type. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The system role writes a simple playbook that only references the *os10_system* role. By including the role, you automatically get access to all of the tasks to configure system features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_system: + hostname: os10 + hardware_forwarding: scaled-l3-hosts + hash_algo: + algo: + - name: lag + mode: crc + state: present + - name: ecmp + mode: xor + state: present + load_balance: + ingress_port: true + ip_selection: + - field: source-ip + state: present + ipv6_selection: + - field: source-ip + state: present + mac_selection: + - field: source-mac + state: present + tcp_udp_selection: + - field: l4-source-port + state: present + max_ra: 15 + min_ra: 10 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_system + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_template.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_template.md new file mode 100644 index 00000000..8369b37f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_template.md @@ -0,0 +1,75 @@ +Template role +============== + +This role provides access to structured data from show commands. This role facilitates the TEXTFSM parsing engine. TextFSM is a template based state machine . It takes the raw string input from the CLI of network devices, run them through a TEXTFSM template and return structured text in the form of a Python dictionary. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Template role is highly customizable, and it works with separate template definitions which contain variables and rules with regular expressions. This library is very helpful to parse any text-based CLI output from network devices. The Template role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- Variables and values are case-sensitive + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_template* role to parse any text-based CLI output. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. All the supported CLI commands are imported as tasks in tasks/main.yml. + +For the *os10_template* role plugins to be used, you may need to specify the actual path of role in *ansible.cfg* file. + +**Sample ansible.cfg** + + action_plugins = ../../plugins/modules/ + + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> ansible_network_os=dellemc.os10.os10 ansible_ssh_user=xxxxx ansible_ssh_pass=xxxxx + + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_template + +**Example playbook to run specific show command — leaf.yaml** + + + --- + - name: PARSE SHOW IP INTERFACE BRIEF + hosts: leaf1 + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_template + tasks_from: show_ip_interface_brief.yaml + + + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_uplink.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_uplink.md new file mode 100644 index 00000000..5cf478f3 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_uplink.md @@ -0,0 +1,101 @@ +Uplink role +=========== + +This role facilitates the configuration of uplink failure detection feature attributes. It specifically enables configuration of association between upstream and downstream interfaces known as uplink-state group. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Uplink role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_uplink keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``uplink_state_group`` | list | Configures the uplink state group (see ``uplink_state_group.*``) | os10 | +| ``uplink_state_group.id`` | integer | Configures the uplink state group instance | os10 | +| ``uplink_state_group.enable`` | boolean: True,False | Enables the uplink state group instance | os10 | +| ``uplink_state_group.uplink_type`` | list | Configures the upstream and downstream attribute (see ``uplink_type.*``) | os10 | +| ``uplink_type.type`` | string: upstream,downstream | Configures the uplink type | os10 | +| ``uplink_type.intf`` | string | Configures the uplink interface | os10 | +| ``uplink_type.state`` | string: absent,present\* | Removes the uplink stream if set to absent | os10 | +| ``uplink_state_group.state`` | string: absent,present\* | Removes the uplink state group instance if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +******************** + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_uplink role* to completely set the uplink sate group instance, and upstream, downstream interfaces. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The uplink role writes a simple playbook that only references the *os10_uplink* role. By including the role, you automatically get access to all of the tasks to configure uplink features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_uplink: + uplink_state_group: + - id: 1 + enable: True + uplink_type: + - type: "upstream" + intf: "port-channel1" + state: "present" + - type: "downstream" + intf: "ethernet1/1/2-1/1/5" + state: "present" + state: "present" + - id: 2 + enable: True + state: "present" + +> **NOTE**: Interfaces should be created using the *os10_interface* role. + +**Simple playbook to setup uplink — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_uplink + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_users.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_users.md new file mode 100644 index 00000000..337010dd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_users.md @@ -0,0 +1,89 @@ +Users role +========== + +This role facilitates the configuration of global system user attributes, and it supports the configuration of CLI users. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Users role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_users list keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``username`` | string (required) | Configures the username which must adhere to specific format guidelines (valid usernames begin with A-Z, a-z, or 0-9 and can also contain `@#$%^&*-_= +;<>,.~` characters) | os10 | +| ``password`` | string | Configures the password set for the username; password length must be at least eight characters | os10 | +| ``role`` | string | Configures the role assigned to the user | os10 | +| ``state`` | string: absent,present\* | Deletes a user account if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_users* role to configure global system user attributes. It creates a hosts file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file. It writes a simple playbook that only references the *os10_users* role. By including the role, you automatically get access to all of the tasks to configure user features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_users: + - username: test + password: a1a2a3a4!@#$ + role: sysadmin + state: present + - username: u1 + password: a1a2a3a4!@#$ + role: netadmin + state: present + +**Simple playbook to setup users — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_users + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vlan.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vlan.md new file mode 100644 index 00000000..275181e5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vlan.md @@ -0,0 +1,123 @@ +VLAN role +========= + +This role facilitates configuring virtual LAN (VLAN) attributes. It supports the creation and deletion of a VLAN and its member ports. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VLAN role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- For variables with no state variable, setting an empty value for the variable negates the corresponding configuration +- `os10_vlan` (dictionary) holds the key with the VLAN ID key and default-vlan key. +- VLAN ID key should be in format "vlan ID" (1 to 4094) +- Variables and values are case-sensitive + +**os10_vlan** + +| Key | Type | Notes | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``default_vlan_id`` | integer | Configures the vlan-id as the default VLAN for an existing VLAN | os10 | + +**VLAN ID keys** + +| Key | Type | Notes | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``description`` | string | Configures a single line description for the VLAN | os10 | +| ``tagged_members`` | list | Specifies the list of port members to be tagged to the corresponding VLAN (see ``tagged_members.*``) | os10 | +| ``tagged_members.port`` | string | Specifies valid device interface names to be tagged for each VLAN | os10 | +| ``tagged_members.state`` | string: absent,present | Deletes the tagged association for the VLAN if set to absent | os10 | +| ``untagged_members`` | list | Specifies the list of port members to be untagged to the corresponding VLAN (see ``untagged_members.*``) | os10 | +| ``untagged_members.port`` | string | Specifies valid device interface names to be untagged for each VLAN | os10 | +| ``untagged_members.state`` | string: absent,present | Deletes the untagged association for the VLAN if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the VLAN corresponding to the ID if set to absent | os10 | +| ``virtual_gateway_ip`` | string | Configures an anycast gateway IPv4 address for VLAN interfaces| os10 | +| ``virtual_gateway_ipv6`` | string | Configures an anycast gateway IPv6 address for VLAN interfaces| os10 | +| ``ip_and_mask`` | string | Configures the specified IP address to the interface | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars directories* or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +## Example playbook + +This example uses the *os10_vlan* role to setup the VLAN ID and name, and it configures tagged and untagged port members for the VLAN. You can also delete the VLAN with the ID or delete the members associated to it. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_vlan* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_vlan: + default_vlan_id: 2 + vlan 100: + description: "Blue" + tagged_members: + - port: ethernet 1/1/32 + state: present + - port: ethernet 1/1/31 + state: present + untagged_members: + - port: ethernet 1/1/30 + state: present + - port: ethernet 1/1/29 + state: present + state: present + vlan 888: + description: "NSX_Cluster" + untagged_members: + - port: port-channel 1 + state: "present" + state: "present" + vlan 10: + description: "vlan with anycast GW" + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + state: "present" + +> **NOTE**: Interfaces should be created using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vlan + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vlt.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vlt.md new file mode 100644 index 00000000..ed24d38d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vlt.md @@ -0,0 +1,108 @@ +VLT role +======== + +This role facilitates the configuration of the basics of virtual link trunking (VLT) to provide a loop-free topology. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VLT role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables . + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_vlt keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``domain`` | integer (required) | Configures the VLT domain identification number (1 to 1000) | os10 | +| ``backup_destination`` | string | Configures an IPv4 address for the VLT backup link (A.B.C.D format or X:X:X:X::X format) | os10 | +| ``destination_type`` | string | Configures the backup destination based on this destination type (IPv4 or IPv6)| os10 | +| ``backup_destination_vrf`` | string | Configures the virtual routing and forwarding (VRF) instance through which the backup destination IP is reachable (*vrfname* must be present) | os10 | +| ``discovery_intf`` | string | Configures the discovery interface for the VLT domain (range of interfaces)| os10 | +| ``discovery_intf_state`` | string: absent,present | Deletes the discovery interfaces for the VLT domain if set to absent | os10 | +| ``peer_routing`` | boolean | Configures VLT peer routing | os10 | +| ``priority`` | integer (default:32768) | Configures VLT priority | os10 | +| ``vlt_mac`` | string | Configures the VLT MAC address | os10 | +| ``vlt_peers`` | dictionary | Contains objects to configure the VLT peer port-channel (see ``vlt_peers.*``) | os10 | +| ``vlt_peers.<portchannelid>`` | dictionary | Configures the VLT peer port-channel (`Po <portchannelid> value`) | os10 | +| ``vlt_peers.<portchannelid>.peer_lag`` | integer | Configures the port-channel ID of the VLT peer lag | os10 | +| ``state`` | string: absent,present | Deletes the VLT instance if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network OS roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Dependencies +------------ + +The *os10_vlt* role is built on modules included in the core Ansible code. These modules were added in ansible version 2.2.0. + +Example playbook +---------------- + +This example uses the *os10_vlt* role to setup a VLT-domain. It creates a *hosts* file with the switch details and corresponding variables.The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_vlt* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_vlt: + domain: 1 + backup_destination: "192.168.211.175" + destination_type: "ipv4" + backup_destination_vrf: + discovery_intf: 1/1/12 + discovery_intf_state: present + peer_routing: True + vlt_mac: aa:aa:aa:aa:aa:aa + vlt_peers: + Po 12: + peer_lag: 13 + state: present + +> **NOTE**: Discovery interface must not be in switchport mode and can be configured using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vlt + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vrf.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vrf.md new file mode 100644 index 00000000..000ba102 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vrf.md @@ -0,0 +1,143 @@ +VRF role +======== + +This role facilitates to configure the basics of virtual routing and forwarding (VRF) that helps in the partition of physical routers to multiple virtual routers. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VRF role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the variable `ansible_network_os` that can take the `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_vrf keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``vrfdetails`` | list | Configures the list of VRF instances (see ``instances.*``) | os10 | +| ``vrfdetails.vrf_name`` | string | Specifies the VRF instance name (default is management) | os10 | +| ``vrfdetails.state`` | string | Deletes the VRF instance name if set to absent | os10 | +| ``vrfdetails.ip_route_import`` | string | Configures VRF IP subcommands | os10 | +| ``ip_route_import.community_value`` | string | Configures the route community value | os10 | +| ``ip_route_import.route_map_value`` | string | Configures the route-map value | os10 | +| ``ip_route_import.state`` | string | Deletes the IP configuration if set to absent | os10 | +| ``vrfdetails.ip_route_export`` | string | Configures VRF IP subcommands | os10 | +| ``ip_route_export.community_value`` | string | Configures the route community value | os10 | +| ``ip_route_export.route_map_value`` | string | Configures the route-map value | os10 | +| ``ip_route_export.state`` | string | Deletes the IP config if set to absent | os10 | +| ``vrfdetails.ipv6_route_import`` | string | Configures VRF IPv6 subcommands | os10 | +| ``ipv6_route_import.community_value`` | string | Configures the route community value | os10 | +| ``ipv6_route_import.route_map_value`` | string | Configures the route-map value | os10 | +| ``ipv6_route_import.state`` | string | Deletes the IP config if set to absent | os10 | +| ``vrfdetails.ipv6_route_export`` | string | Configures VRF IPv6 subcommands | os10 | +| ``ipv6_route_import.community_value`` | string | Configures the route community value | os10 | +| ``ipv6_route_export.route_map_value`` | string | Configures the route-map value | os10 | +| ``ipv6_route_import.state`` | string | Deletes the IP config if set to absent | os10 | +| ``vrfdetails.map_ip_interface`` | list | Specifies a list of valid interface names | os10 | +| ``map_ip_interface.intf_id`` | string | Specifies a valid interface name | os10 | +| ``map_ip_interface.state`` | string | Deletes VRF association in the interface if set to absent | os10 | +| ``upd_src_ip_loopback_id`` | string | Configures the source IP for any leaked route in VRF from the provided loopback ID, delete if empty string| os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Dependencies +------------ + +The *os10_vrf* role is built on modules included in the core Ansible code. These modules were added in ansible version 2.2.0 + +Example playbook +---------------- + +This example uses the *os10_vrf* role to setup a VRF and associate it to an interface. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that references the *os10_vrf* role. +*upd_src_ip_loopback_id* has an dependency with association of the interface in a VRF, and the *os10_vrf* role needs to be invoked twice with different input dictionary one for the create and one for *upd_src_ip_loopback_id*. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + os10_vrf: + vrfdetails: + - vrf_name: "os10vrf" + state: "present" + ip_route_import: + community_value: "10:20" + state: "present" + route_map_value: "test4" + ip_route_export: + community_value: "30:40" + state: "present" + route_map_value: "test3" + ipv6_route_import: + community_value: "40:50" + state: "absent" + route_map_value: "test2" + ipv6_route_export: + community_value: "60:70" + state: "absent" + route_map_value: "test2" + map_ip_interface: + - intf_id : "loopback11" + state : "present" + + os_vrf_upd_src_loopback: + vrfdetails: + - vrf_name: "os10vrf" + state: "present" + upd_src_ip_loopback_id: 11 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vrf + +**Simple playbook with `upd_src_ip_loopback_id` — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vrf + - hosts: leaf1 + vars: + os10_vrf: "{{ os_vrf_upd_src_loopback }}" + roles: + - dellemc.os10.os10_vrf + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vrrp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vrrp.md new file mode 100644 index 00000000..1771c50f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vrrp.md @@ -0,0 +1,139 @@ +VRRP role +========= + +This role facilitates configuring virtual router redundancy protocol (VRRP) attributes. It supports the creation of VRRP groups for interfaces and setting the VRRP group attributes. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VRRP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- `os10_vrrp` (dictionary) holds a dictionary with the interface name key +- Interface name can correspond to any of the valid OS10 interface with a unique interface identifier name +- Physical interfaces names must be in *<interfacename> <tuple>* format (for example *fortyGigE 1/1*) +- Variables and values are case-sensitive + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``vrrp`` | dictionary | Configures VRRP commands (see ``vrrp.*``) | os10 | +| ``version`` | dictionary | Configures VRRP version | os10 | +| ``vrrp_active_active_mode`` | dictionary | Configures VRRP active-active mode | os10 | +| ``delay_reload`` | integer | Configures the minimum delay timer applied after boot (0 to 900) | os10 | +| ``vrrp_group`` | list | Configures VRRP group commands (see ``vrrp_group.*``) | os10 | +| ``vrrp_group.type`` | string: ipv6,ipv4 | Specifies the type of the VRRP group | os10 | +| ``vrrp_group.group_id`` | integer (required) | Configures the ID for the VRRP group (1 to 255) | os10 | +| ``vrrp_group.virtual_address`` | string | Configures a virtual-address to the VRRP group (A.B.C.D format) | os10 | +| ``virtual_address.ip`` | string | Configures a virtual ip address (A.B.C.D format) | os10 | +| ``virtual_address.state`` | string: present\*,absent | Configures/unconfigures a virtual-address (A.B.C.D format) | os10 | +| ``vrrp_group.preempt`` | boolean: true\*,false | Configures preempt mode on the VRRP group | os10 | +| ``vrrp_group.priority`` |integer | Configures priority for the VRRP group (1 to 255; default 100) | os10 | +| ``vrrp_group.adv_interval_centisecs`` | integer | Configures the advertisement interval for the VRRP group in centiseconds (25 to 4075; default 100) and in multiple of 25; centisecs gets converted into seconds in version 2 | os10 | +| ``vrrp_group.track_interface`` | list | Configures the track interface of the VRRP group (see ``track.*``) | os10 | +| ``track_interface.resource_id`` | integer | Configures the object tracking resource ID of the VRRP group; mutually exclusive with *track.interface* | os10 | +| ``track_interface.interface`` | string | Configures the track interface of the VRRP group (<interface name> <interface number> format) | os10 | +| ``track_interface.priority_cost`` | integer | Configures the priority cost for track interface of the VRRP group (1 to 254; default 10) | os10 | +| ``track_interface.state`` | string: present\*,absent | Deletes the specific track interface from the VRRP group if set to absent | os10 | +| ``vrrp_group.track_interface.state`` | string: present*,absent | Deletes all track interfaces from the VRRP group if set to absent | os10 | +| ``vrrp_group.state`` | string: present\*,absent | Deletes the VRRP group from the interface if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_vrrp* role to configure VRRP commands at the interfaces. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_vrrp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_vrrp: + vrrp: + delay_reload: 2 + version: 3 + ethernet1/1/1: + vrrp_group: + - group_id: 2 + type: ipv6 + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + virtual_address: + - ip: 2001:4828:5808:ffa3::9 + state: present + - ip: 3001:4828:5808:ffa3::9 + state: present + - ip: 4001:4828:5808:ffa3::9 + state: absent + adv_interval_centisecs: 200 + state: present + - group_id: 4 + virtual_address: + - ip: 4.1.1.1 + state: present + - ip: 4.1.1.2 + state: present + - ip: 4.1.1.3 + state: absent + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + adv_interval_centisecs: 200 + state: present + vlan100: + vrrp_active_active_mode: true + +> **NOTE**: Interface VRRP cannot exist with L2 modes and can be configured using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vrrp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vxlan.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vxlan.md new file mode 100644 index 00000000..c517baf6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_vxlan.md @@ -0,0 +1,258 @@ +VxLAN role +======== + +This role facilitates the configuration of virtual extensible LAN (VxLAN) attributes. It supports the configuration of virtual networks, Ethernet virtual private network (EVPN), and network virtualization edge (NVE). This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VxLAN role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, it generates the role configuration commands in a file +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_vxlan keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``anycast_gateway_mac`` | string | Configures an anycast gateway IP address for a VXLAN virtual network | os10 | +| ``loopback`` | dictionary | Configures the loopback interface (see ``loopback.*``) | os10 | +| ``loopback.loopback_id`` | integer | Configures the loopback interface number (0 to 16383) | os10 | +| ``loopback.description`` | string | Configures the interface description | os10 | +| ``loopback.ip_address`` | string | Configure the IP address | os10 | +| ``loopback.state`` | string: absent,present\* | Removes loopback interface if set to absent | os10 | +| ``nve`` | dictionary | Configures network virtualization edge (see ``nve.*``) | os10 | +| ``nve.source_interface`` | integer | Configures source loopback interface | os10 | +| ``nve.controller`` | dictionary | Configures controller; supports only one controller connection at a time (see ``controller.*``) | os10 | +| ``controller.name`` | string: NSX, ovsdb | Configures the nve controller | os10 | +| ``controller.max_backoff`` | integer | Configures max_backoff value (Setting an empty value negates the corresponding configuration) | os10 | +| ``controller.control_cfg`` | list | Configures the controller IP and port (see ``control_cfg.*``) | os10 | +| ``control_cfg.ip_addr`` | string | Configures the controller IP | os10 | +| ``control_cfg.port`` | integer | Configures the controller port | os10 | +| ``control_cfg.state`` | string: absent,present\* | Removes the controller IP and port configuration if set to absent | os10 | +| ``controller.state`` | string: absent,present\* | Removes the controller if set to absent | os10 | +| ``nve.state`` | string: absent,present\* | Removes the network virtualization edge if set to absent | os10 | +| ``evpn`` | dictionary | Enable the EVPN in control plane (see ``evpn.*``) | os10 | +| ``evpn.autoevi`` | boolean: True, False | Configures auto-EVI; no further manual configuration is allowed in auto-EVI mode | os10 | +| ``evpn.rmac`` | string | Configures router MAC address | os10 | +| ``evpn.evi`` | list | Configures EVPN instance (see ``evi.*``)| os10 | +| ``evpn.dis_rt_asn`` | boolean | Enables/disables AS number usage in route target | os10 | +| ``evpn.vrf`` | dictionary | Enable VRF for EVPN| os10 | +| ``vrf.name`` | string | Configures VRF name | os10 | +| ``vrf.vni`` | integer | Configures VNI for the VRF | os10 | +| ``vrf.rd`` | string | Configures RD for the VRF | os10 | +| ``vrf.route_target`` | dictionary | Enable route target for the VRF | os10 | +| ``route_target.type`` | string (manual, auto) | Configure the route target type | os10 | +| ``route_target.asn_value`` | string | Configure AS number | os10 | +| ``route_target.state`` | string (present,absent) | Configures/unconfigures the route target | os10 | +| ``route_target.route_target_type`` | string | Configure the route target type | os10 | +| ``vrf.adv_ipv4`` | dictionary | Enables IPv4 advertisement VRF | os10 | +| ``adv_ipv4.type`` | string | Configures IPv4 advertisement type | os10 | +| ``adv_ipv4.rmap_name`` | string | Configures route map for advertisement | os10 | +| ``adv_ipv4.unconfig`` | boolean | Configures/unconfigures route map for advertisement | os10 | +| ``evi.id`` | integer | Configures the EVPN instance ID (1 to 65535) | os10 | +| ``evi.rd`` | string | Configure the route distinguisher | os10 | +| ``evi.vni`` | dictionary | Configures VNI value (see ``vni.*``) | os10 | +| ``vni.id`` | integer | Configures VNI value; configure the same VNI value that you configure for the VxLAN virtual network | os10 | +| ``vni.state`` | string: absent,present\* | Removes the VNI if set to absent | os10 | +| ``evi.route_target`` | list | Configures route target (see ``route_target.*``) | os10 | +| ``route_target.type`` | string: manual,auto | Configures the route target (auto mode auto-configures an import and export value for EVPN routes) | os10 | +| ``route_target.asn_value`` | string | Configures the route target asn value | os10 | +| ``route_target.route_target_type`` | string: import,export,both | Configures the route target type | os10 | +| ``route_target.state`` | string: absent,present\* | Removes the route target if set to absent | os10 | +| ``evi.state`` | string: absent,present\* | Removes EVPN instance id if set to absent | os10 | +| ``evpn.state`` | string: absent,present\* | Removes the EVPN configuration if set to absent | os10 | +| ``virtual_network`` | dictionary | Configures the virtual network attributes (see ``virtual_network.*``) | os10 | +| ``virtual_network.untagged_vlan`` | integer | Configures the reserved untagged VLAN ID, from 1 to 4093 | os10 | +| ``virtual_network.virtual_net`` | list | Configures the virtual network attributes for VxLAN tunneling (see ``virtual_net.*``) | os10 | +| ``virtual_net.id`` | integer | Configures a virtual network ( virtual-network ID, from 1 to 65535) | os10 | +| ``virtual_net.description`` | string | Configures the Description for Virtual Network | os10 | +| ``virtual_net.vlt_vlan_id`` | integer | Configures VLTi VLAN ID | os10 | +| ``virtual_net.member_interface`` | list | Configures the trunk member interface attributes to the virtual network (see ``member_interface.*``) | os10 | +| ``member_interface.ifname`` | string | Configures interface name to provision the virtual network member interface | os10 | +| ``member_interface.type`` | string: tagged,untagged | Configures the type to provision the virtual network member interface | os10 | +| ``member_interface.vlanid`` | integer | Configures the VLAN ID to provision the virtual network member interface | os10 | +| ``member_interface.state`` | string: absent,present\* | Removes the virtual network member interface if set to absent | os10 | +| ``virtual_net.vxlan_vni`` | dictionary | Configures the VxLAN attributes to virtual network (see ``vxlan_vni.*``) | os10 | +| ``vxlan_vni.id`` | integer | Configures the VXLAN ID to a virtual network | os10 | +| ``vxlan_vni.remote_endpoint`` | list | Configures the IP address of a remote tunnel endpoint in a VxLAN network (see ``remote_endpoint.*``) | os10 | +| ``remote_endpoint.ip`` | string | Configures the IP address of a remote tunnel endpoint (1.1.1.1) | os10 | +| ``remote_endpoint.state`` | string: absent,present\* | Removes the remote tunnel endpoint in a VxLAN network if set to absent | os10 | +| ``vxlan_vni.state`` | string: absent,present\* | Removes the VxLAN ID if set to absent | os10 | +| ``virtual_net.state`` | string: absent,present\* | Removes a virtual network if set to absent | os10 | +| ``vlan_association`` | list | Configures the VLAN association with virtual network (see ``vlan_association.*``) | os10 | +| ``vlan_association.vlan_id`` | integer | Specifies the VLAN ID | os10 | +| ``vlan_association.virtual_net`` | integer | Specifies the virtual netwrok ID which is to be associated with VLAN | os10 | + + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_vxlan* role to configure the VxLAN network, source IP address on VxLAN tunnel endpoint and virtual networks. It creates a *hosts* file with the switch details, a *host_vars* file with connection variables and the corresponding role variables. The hosts file should define the ansible_network_os variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. This example writes a simple playbook that only references the *os10_vxlan* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_vxlan: + anycast_gateway_mac: "00:22:33:44:55:66" + loopback: + loopback_id: 10 + description: "HARDWARE_VXLAN" + ip_address: "10.8.0.1/32" + state: "present" + nve: + source_interface: 10 + controller: + name: "ovsdb" + max_backoff: 2000 + control_cfg: + - ip_addr: "1.2.3.4" + port: 30 + state: "present" + state: "present" + state: "present" + evpn: + autoevi: False + evi: + - id: 111 + rd: "auto" + vni: + id: 111 + state: "present" + route_target: + - type: "manual" + asn_value: "111:111" + route_target_type: "both" + state: "present" + - type: "manual" + asn_value: "11:11" + route_target_type: "export" + state: "present" + state: "present" + - id: 222 + rd: "2.2.2.2:222" + vni: + id: 222 + state: "present" + route_target: + - type: "auto" + asn_value: + route_target_type: + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + - name: "blue" + state: "absent" + rmac: 00:11:11:11:11:11 + dis_rt_asn: "true" + state: "present" + virtual_network: + untagged_vlan: 1001 + virtual_net: + - id: 111 + description: "NSX_Cluster_VNI_111" + vlt_vlan_id: 11 + member_interface: + - ifname: "ethernet 1/1/15" + type: "tagged" + vlanid: 15 + state: "present" + - ifname: "port-channel 12" + type: "tagged" + vlanid: 11 + state: "present" + vxlan_vni: + id: 111 + remote_endpoint: + - ip: "1.1.1.1" + state: "present" + - ip: "11.11.11.11" + state: "present" + - ip: "111.111.111.111" + state: "present" + state: "present" + state: "present" + - id: 222 + description: "NSX_Cluster_VNI_222" + vlt_vlan_id: 22 + member_interface: + - ifname: "ethernet 1/1/16" + type: "tagged" + vlanid: 16 + state: "present" + vxlan_vni: + id: 222 + remote_endpoint: + - ip: "2.2.2.2" + state: "present" + - ip: "22.22.22.22" + state: "present" + state: "present" + state: "present" + vlan_association: + - vlain_id: 111 + virtual_net: 111 + +> **NOTE**: Member interfaces should be in switchport trunk mode which can be configured using the *os10_interface* role. + +**Simple playbook to configure VxLAN — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vxlan + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_xstp.md b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_xstp.md new file mode 100644 index 00000000..1ad914b7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/os10_xstp.md @@ -0,0 +1,196 @@ +# xSTP role + +This role facilitates the configuration of xSTP attributes. It supports multiple version of spanning-tree protocol (STP), rapid spanning-tree (RSTP), rapid per-VLAN spanning-tree (Rapid PVST+), multiple spanning-tree (MST), and per-VLAN spanning-tree (PVST). It supports the configuration of bridge priority, enabling and disabling spanning-tree, creating and deleting instances, and mapping virtual LAN (VLAN) to instances. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The xSTP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- `os10_xstp` (dictionary) contains the hostname (dictionary) +- Hostname is the value of the *hostname* variable that corresponds to the name of the device +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value to any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**hostname keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|----------------------| +| ``type`` | string (required) | Configures the type of spanning-tree mode specified that can vary according to the device including RSTP, rapid-PVST, and MST | os10 | +| ``enable`` | boolean: true,false | Enables/disables the spanning-tree protocol specified in the type variable | os10 | +| ``mac_flush_timer`` | integer | Configures the mac_flush_timer value (0 to 500) | os10 | +| ``rstp`` | dictionary | Configures rapid spanning-tree (see ``rstp.*``) | os10 | +| ``rstp.bridge_priority`` | integer | Configures bridge-priority for the spanning-tree (0 to 61440 in multiples of 4096) | os10 | +| ``rstp.max_age`` | integer | Configures the max_age timer for RSTP (6 to 40) | os10 | +| ``rstp.hello_time`` | integer | Configures the hello-time for RSTP (1 to 10) | os10 | +| ``rstp.forward_time`` | integer | Configures the forward-time for RSTP (4 to 30) | os10 | +| ``rstp.force_version`` | string: stp | Configures the force version for the BPDUs transmitted by RSTP | os10 | +| ``rstp.mac_flush_threshold`` | integer | Configures the MAC flush threshold for RSTP (1 to 65535) | os10 | +| ``pvst`` | dictionary | Configures per-VLAN spanning-tree protocol (see ``pvst.*``) | os10 | +| ``pvst.vlan`` | list | Configures the VLAN for PVST (see ``vlan.*``) | os10 | +| ``vlan.range_or_id`` | string | Configures a VLAN/range of VLANs for the per-VLAN spanning-tree protocol | os10 | +| ``vlan.max_age`` | integer | Configures the max_age timer for a VLAN (6 to 40) | os10 | +| ``vlan.hello_time`` | integer | Configures the hello-time for a VLAN (1 to 10) | os10 | +| ``vlan.forward_time`` | integer | Configures the forward-time for a VLAN (4 to 30) | os10 | +| ``vlan.enable`` | boolean: true,false | Enables/disables spanning-tree for the associated VLAN range_or_id | os10 | +| ``vlan.mac_flush_threshold`` | integer | Configures the MAC flush threshold for a VLAN (1 to 65535) | os10 | +| ``vlan.root`` | string: primary,secondary | Designates the primary or secondary root for the associated VLAN range_or_id; mutually exclusive with *vlan.bridge_priority* | os10 | +| ``vlan.bridge_priority`` | integer | Configures bridge-priority for the per-VLAN spanning-tree (0 to 61440 in multiples of 4096); mutually exclusive with *vlan.root* | os10 | +| ``mstp`` | dictionary | Configures multiple spanning-tree protocol (see ``mstp.*``) | os10 | +| ``mstp.max_age`` | integer | Configures the max_age timer for MSTP (6 to 40) | os10 | +| ``mstp.max_hops`` | integer | Configures the max-hops for MSTP (6 to 40) | os10 | +| ``mstp.hello_time`` | integer | Configures the hello-time for MSTP (1 to 10) | os10 | +| ``mstp.forward_time`` | integer | Configures the forward-time for MSTP (4 to 30) | os10 | +| ``mstp.force_version`` | string: stp,rstp | Configures the force-version for the BPDUs transmitted by MSTP | os10 | +| ``mstp.mstp_instances`` | list | Configures a MSTP instance (see ``mstp_instances.*``) | os10 | +| ``mstp_instances.number_or_range`` | integer | Configures the multiple spanning-tree instance number| os10 | +| ``mstp_instances.bridge_priority`` | integer | Configures the bridge-priority for the spanning-tree (0 to 61440 in multiples of 4096); mutually exclusive with *mstp_instances.root* | os10 | +| ``mstp_instances.enable`` | boolean: true,false | Enables/disables spanning-tree for the associated MSTP instance | os10 | +| ``mstp_instances.mac_flush_threshold`` | integer | Configures the MAC flush-threshold for an MSTP instance (1 to 65535) | os10 | +| ``mstp_instances.root`` | string: primary,secondary | Designates the primary or secondary root for the associated MSTP instance; mutually exclusive with *mstp_instances.bridge_priority* | os10 | +| ``mstp.mst_config`` | dictionary | Configures multiple spanning-tree (see ``mstp.mst_config.*``); supported | os10 | +| ``mst_config.name`` | string | Configures the name which is specified for the MSTP | os10 | +| ``mst_config.revision`` | integer | Configures the revision number for MSTP | os10 | +| ``mst_config.cfg_list`` | list | Configures the multiple spanning-tree list (see ``mst_config.cfg_list.*``) | os10 | +| ``cfg_list.number`` | integer | Specifies the MSTP instance number | os10 | +| ``cfg_list.vlans`` | string | Configures a VLAN/range of VLANs by mapping it to an instance number | os10 | +| ``cfg_list.vlans_state`` | string: absent,present\* | Deletes a set of VLANs mapped to the spanning-tree instance if set to absent | os10 | +| ``intf`` | list | Configures multiple spanning-tree in an interface (see ``intf.*``) | os10 | +| ``intf <interface name>``| dictionary | Configures the interface name (see ``intf.<interface name>.*``) | os10 | +| ``intf.<interface name>.edge_port`` | boolean: true,false | Configures the EdgePort as dynamic if set to true | os10 | +| ``intf.<interface name>.bpdu_filter``| boolean: true,false | Enables/disables bpdufilter at the interface | os10 | +| ``intf.<interface name>.bpdu_guard``| boolean: true,false | Enables/disables bpduguard at the interface | os10 | +| ``intf.<interface name>.guard``| string: loop,root,none | Configures guard on the interface | os10 | +| ``intf.<interface name>.enable`` | boolean: true,false | Enables/disables spanning-tree at the interface level | os10 | +| ``intf.<interface name>.link_type``| string: auto,point-to-point,shared | Configures the link type at the interface | os10 | +| ``intf.<interface name>.rstp`` | dictionary | Configures the RSTP interface name (see ``intf.<interface name>.rstp.*``) | os10 | +| ``rstp.priority``| integer | Configures the RSTP priority value at the interface | os10 | +| ``rstp.cost`` | integer | Configures the RSTP cost value at the interface | os10 | +| ``intf.<interface name>.msti`` | list | Configures the MSTi interface name (see ``intf.<interface name>.msti``) | os10 | +| ``msti.instance_number`` | integer or range | Specifies the MSTP instance number or range | os10 | +| ``msti.priority`` | integer | Specifies the priority value to be configured at the interface | os10 | +| ``msti.cost`` | integer | Specifies the cost value to be configured at the interface | os10 | +| ``intf.<interface name>.vlan`` | list | Configures the VLAN interface name (see ``intf.<interface name>.vlan``) | os10 | +| ``vlan.range_or_id`` | integer or range | Specifies the VLAN ID or range | os10 | +| ``vlan.priority`` | integer | Specifies the priority value to be configured at the interface | os10 | +| ``vlan.cost`` | integer | Specifies the cost value to be configured at the interface | os10 | + +> **NOTE**: Asterisk (_*_) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOM`E environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_xstp* role to configure different variants of spanning-tree. Based on the type of STP and defined objects, VLANs are associated and bridge priorities are assigned. It creates a *hosts* file with the switch details, and a *host_vars* file with connection variables. The corresponding role variables are defined in the *vars/main.yml* file at the role path. + +It writes a simple playbook that only references the *os10_xstp* role. By including the role, you automatically get access to all of the tasks to configure xSTP. + +**Sample hosts file** + + spine1 ansible_host= <ip_address> + +**Sample host_vars/spine1** + + hostname: spine1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + +**Sample vars/main.yml** + + os10_xstp: + type: rstp + enable: true + path_cost: true + mac_flush_timer: 4 + rstp: + max_age: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + bridge_priority: 4096 + mac_flush_threshold: 5 + pvst: + vlan: + - range_or_id: 10 + max_age: 6 + enable: true + hello_time: 7 + forward_time: 7 + bridge_priority: 4096 + mac_flush_threshold: 9 + mstp: + max_age: 6 + max_hops: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + mstp_instances: + - number_or_range: 1 + enable: true + mac_flush_threshold: 9 + bridge_priority: 4096 + mst_config: + name: cfg1 + revision: 5 + cfg_list: + - number: 1 + vlans: 10,12 + vlans_state: present + intf: + ethernet 1/1/8: + edge_port: true + bpdu_filter: true + bpdu_guard: true + guard: loop + enable: true + link_type: point-to-point + msti: + - instance_number: 1 + priority: 32 + cost: 1 + rstp: + priority: 32 + cost: 7 + vlan: + - range_or_id: 6 + priority: 16 + cost: 8 + + +**Simple playbook to setup system — spine.yml** + + - hosts: spine + roles: + - dellemc.os10.os10_xstp + +**Run** + + ansible-playbook -i hosts spine.yml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/docs/roles.rst b/collections-debian-merged/ansible_collections/dellemc/os10/docs/roles.rst new file mode 100644 index 00000000..12e37212 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/docs/roles.rst @@ -0,0 +1,193 @@ +############################################################## +Ansible Network Collection Roles for Dell EMC SmartFabric OS10 +############################################################## + +The roles facilitate provisioning of devices running Dell EMC SmartFabric OS10. This document describes each of the roles. + +AAA role +-------- + +The `os10_aaa <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_aaa/README.md>`_ role facilitates the configuration of Authentication Authorization and Accounting (AAA), and supports the configuration of TACACS and RADIUS server and AAA. + + +ACL role +-------- + +The `os10_acl <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_acl/README.md>`_ role facilitates the configuration of Access Control lists. It supports the configuration of different types of ACLs (standard and extended) for both IPv4 and IPv6, and assigns the access-class to line terminals. + + +BFD role +-------- + +The `os10_bfd <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_bfd/README.md>`_ role facilitates the configuration of BFD global attributes. It specifically enables configuration of BFD interval , min_rx, multiplier, and role. + + +BGP role +-------- + +The `os10_bgp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_bgp/README.md>`_ role facilitates the configuration of border gateway protocol (BGP) attributes, and supports router ID, networks, neighbors, and maximum path configurations. + + +Copy configuration role +----------------------- + +The `os10_copy_config <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_copy_config/README.md>`_ role pushes the backup running configuration into a device. This role merges the configuration in the template file with the running configuration of the Dell EMC Networking OS10 device. + + +DNS role +-------- + +The `os10_dns <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_dns/README.md>`_ role facilitates the configuration of domain name service (DNS). + + +ECMP role +--------- + +The `os10_ecmp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_ecmp/README.md>`_ role facilitates the configuration of equal cost multi-path (ECMP). It supports the configuration of ECMP for IPv4. + + +Fabric-summary role +------------------- + +The `os10_fabric_summary <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_fabric_summary/README.md>`_ role facilitates to get show system information of all the switches in the fabric. + + +Flow-monitor role +----------------- + +The `os10_flow_monitor <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_flow_monitor/README.md>`_ role facilitates the configuration of ACL flow-based monitoring attributes. In Flow-based mirroring, the ingress traffic, matching the specified policies are mirrored to a destination port. Port-based mirroring maintains a database that contains all monitoring sessions, including port monitor sessions. + + +Image-upgrade role +------------------ + +The `os10_image_upgrade <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_image_upgrade/README.md>`_ role facilitates installation of OS10 software images. + + +Interface role +-------------- + +The `os10_interface <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_interface/README.md>`_ role facilitates the configuration of interface attributes. It supports the configuration of administrative state, description, MTU, IP address, IP helper, and port mode. + + +LAG role +-------- + +The `os10_lag <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_lag/README.md>`_ role facilitates the configuration of link aggregation group (LAG) attributes. This role supports the creation and deletion of a LAG and its member ports, and supports the configuration of type (static/dynamic), hash scheme, and minimum required link. + + +LLDP role +--------- + +The `os10_lldp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_lldp/README.md>`_ role facilitates the configuration of link layer discovery protocol (LLDP) attributes at global and interface level. This role supports the configuration of hello, mode, multiplier, advertise tlvs, management interface, fcoe, iscsi at global and interface levels. + + +Logging role +------------ + +The `os10_logging <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_logging/README.md>`_ role facilitates the configuration of global logging attributes, and supports the configuration of logging servers. + + +Network-Validation role +----------------------- + +The `os10_network_validation <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_network_validation/README.md>`_ role facilitates to verify the Networks. It validates networking features of wiring connection, BGP neighbors, MTU between neighbors and VLT pair. + + +NTP role +-------- + +The `os10_ntp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_ntp/README.md>`_ role facilitates the configuration of network time protocol attributes. + + +Prefix-list role +---------------- + +The `os10_prefix_list <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_prefix_list/README.md>`_ role facilitates the configuration of a prefix-list, supports the configuration of IP prefix-list, and assigns the prefix-list to line terminals. + + +QoS role +-------- + +The `os10_qos <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_qos/README.md>`_ role facilitates the configuration of quality of service attributes including policy-map and class-map. + + +RA Guard role +------------- + +The `os10_raguard <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_raguard/README.md>`_ role facilitates the configuration of IPv6 RA Guard attributes. + + +Route-map role +-------------- + +The `os10_route_map <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_route_map/README.md>`_ role facilitates the configuration of route-map attributes. + + +SNMP role +--------- + +The `os10_snmp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_snmp/README.md>`_ role facilitates the configuration of global snmp attributes. It supports the configuration of SNMP server attributes like users, group, community, location, traps, and so on. + + +System role +----------- + +The `os10_system <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_system/README.md>`_ role facilitates the configuration of global system attributes. This role specifically enables configuration of hostname and hashing algorithm for OS10. + + +TEMPLATE role +------------- + +The `os10_template <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_template/README.md>`_ role facilitates the TEXTFSM parsing engine. TextFSM is a template based state machine . It takes the raw string input from the CLI of network devices OS10, run them through a TEXTFSM template and return structured text in the form of a Python dictionary. + + +UPLINK role +----------- + +The `os10_uplink <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_uplink/README.md>`_ role facilitates the configuration of uplink attributes, and is abstracted for OS10. It specifically enables configuration of association between upstream and downstream interfaces known as uplink-state group. + + +Users role +---------- + +The `os10_users <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_users/README.md>`_ role facilitates the configuration of global system user attributes. This role supports the configuration of CLI users. + + +VLAN role +--------- + +The `os10_vlan <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_vlan/README.md>`_ role facilitates configuring virtual LAN (VLAN) attributes. This role supports the creation and deletion of a VLAN and its member ports. + + +VLT role +-------- + +The `os10_vlt <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_vlt/README.md>`_ role facilitates the configuration of the basics of virtual link trunking (VLT) to provide a loop-free topology. + + +VRF role +-------- + +The `os10_vrf <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_vrf/README.md>`_ role facilitates the configuration of basic virtual routing and forwarding (VRF) that helps in the partition of physical routers to multiple virtual routers. + + +VRRP role +--------- + +The `os10_vrrp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_vrrp/README.md>`_ role facilitates configuration of virtual router redundancy protocol (VRRP) attributes. This role supports the creation of VRRP groups for interfaces, and setting the VRRP group attributes. + + +VXLAN role +---------- + +The `os10_vxlan <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_vxlan/README.md>`_ role facilitates the configuration of virtual extensible LAN (VXLAN) attributes. It supports the configuration of virtual networks, Ethernet virtual private network (EVPN), and network virtualization edge (NVE). + + +xSTP role +--------- + +The `os10_xstp <https://github.com/ansible-collections/dellemc.os10/blob/master/roles/os10_xstp/README.md>`_ role facilitates the configuration of xSTP attributes. This role supports multiple version of spanning-tree protocol (STP), rapid spanning-tree (RSTP) protocol, multiple spanning-tree (MST), and per-VLAN spanning-tree (PVST). This role supports the configuration of bridge priority, enabling and disabling spanning-tree, creating and deleting instances, and mapping virtual LAN (VLAN) to instances. + + +\(c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/galaxy.yml~ b/collections-debian-merged/ansible_collections/dellemc/os10/galaxy.yml~ new file mode 100644 index 00000000..655b5f7d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/galaxy.yml~ @@ -0,0 +1,17 @@ +authors: +- Parameswaran Krishnamurthy <Parameswaran_Krishna@Dell.com> +- Senthil Ganesan Ganesan <Senthil_Kumar_Ganesa@Dell.com> +- Shreeja R <Shreeja_R@Dell.com> +dependencies: + ansible.netcommon: '>=1.0.0' +description: Ansible Network Collection for Dell EMC SmartFabric OS10 +license_file: LICENSE +name: os10 +namespace: dellemc +readme: README.md +tags: [dell, dellemc, os10, emc, networking] +version: 1.0.2 +repository: https://github.com/ansible-collections/dellemc.os10 +documentation: https://github.com/ansible-collections/dellemc.os10/tree/master/docs +homepage: https://github.com/ansible-collections/dellemc.os10 +issues: https://github.com/ansible-collections/dellemc.os10/issues diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/meta/runtime.yml b/collections-debian-merged/ansible_collections/dellemc/os10/meta/runtime.yml new file mode 100644 index 00000000..e211415c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/meta/runtime.yml @@ -0,0 +1,8 @@ +plugin_routing: + action: + os10_config: + redirect: dellemc.os10.os10 + os10_command: + redirect: dellemc.os10.os10 + os10_facts: + redirect: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/README.md new file mode 100644 index 00000000..f0affd95 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/README.md @@ -0,0 +1,37 @@ + + +# Provision CLOS fabric using the Ansible collection for Dell EMC SmartFabric OS10 + +This example describes how to use Ansible to build a CLOS fabric using Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. The sample topology is a two-tier CLOS fabric with two spines and four leaves connected as mesh. eBGP is running between the two tiers. All switches in spine have the same AS number, and each leaf switch has a unique AS number. All AS numbers used are private. + +For application load-balancing purposes, the same prefix is advertised from multiple leaf switches and uses _BGP multipath relax_ feature. + +![CLOS FABRIC Topology](https://ansible-dellos-docs.readthedocs.io/en/latest/_images/topo.png) + +## Create simple Ansible playbook + +**1**. Create an inventory file called `inventory.yaml`, then specify the device IP address. + +**2**. Create a group variable file called `group_vars/all`, then define credentials and SNMP variables. + +**3**. Create a group variable file called `group_vars/spine.yaml`, then define credentials, hostname, and BGP neighbors of spine group. + +**4**. Create a host variable file called `host_vars/spine1.yaml`, then define the host, credentials, and transport. + +**5**. Create a host variable file called `host_vars/spine2.yaml`, then define the host, credentials, and transport. + +**6**. Create a host variable file called `host_vars/leaf1.yaml`, then define the host, credentials, and transport. + +**7**. Create a host variable file called `host_vars/leaf2.yaml`, then define the host, credentials, and transport. + +**8**. Create a host variable file called `host_vars/leaf3.yaml`, then define the host, credentials, and transport. + +**9**. Create a host variable file called `host_vars/leaf4.yaml`, then define the host, credentials, and transport. + +**10**. Create a playbook called `datacenter.yaml`. + +**11**. Run the playbook. + + ansible-playbook -i inventory.yaml datacenter.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/datacenter.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/datacenter.yaml new file mode 100644 index 00000000..7174af84 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/datacenter.yaml @@ -0,0 +1,11 @@ +--- +- hosts: datacenter + gather_facts: no + connection: network_cli + collections: + - dellemc.os10 + roles: + - os10_interface + - os10_bgp + - os10_snmp + - os10_system diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/group_vars/all b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/group_vars/all new file mode 100644 index 00000000..6985e8ad --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/group_vars/all @@ -0,0 +1,9 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_snmp: + snmp_community: + - name: public + access_mode: ro + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/group_vars/spine.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/group_vars/spine.yaml new file mode 100644 index 00000000..3524eaaf --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/group_vars/spine.yaml @@ -0,0 +1,85 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "{{ spine_hostname }}" + +os10_bgp: + asn: 64901 + router_id: "{{ bgp_router_id }}" + best_path: + as_path: multipath-relax + as_path_state: present + med: + - attribute: missing-as-worst + state: present + neighbor: + - type: ipv4 + remote_asn: "{{ bgp_neigh1_remote_asn }}" + ip: "{{ bgp_neigh1_ip }}" + admin: up + state: present + - type: ipv4 + remote_asn: "{{ bgp_neigh2_remote_asn }}" + ip: "{{ bgp_neigh2_ip }}" + admin: up + state: present + - type: ipv4 + remote_asn: "{{ bgp_neigh3_remote_asn }}" + ip: "{{ bgp_neigh3_ip }}" + admin: up + state: present + - type: ipv4 + remote_asn: "{{ bgp_neigh4_remote_asn }}" + ip: "{{ bgp_neigh4_ip }}" + admin: up + state: present + - type: ipv6 + remote_asn: "{{ bgp_neigh5_remote_asn }}" + ip: "{{ bgp_neigh5_ip }}" + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: "{{ bgp_neigh6_remote_asn }}" + ip: "{{ bgp_neigh6_ip }}" + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: "{{ bgp_neigh7_remote_asn }}" + ip: "{{ bgp_neigh7_ip }}" + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: "{{ bgp_neigh8_remote_asn }}" + ip: "{{ bgp_neigh8_ip }}" + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf1.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf1.yaml new file mode 100644 index 00000000..38691a5e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf1.yaml @@ -0,0 +1,77 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 +leaf_hostname: "leaf-1" +os10_system: + hostname: "{{ leaf_hostname }}" + hash_algo: + algo: + - name: ecmp + mode: crc + state: present +os10_interface: + ethernet 1/1/1: + desc: "Connected to Spine 1" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.1.2/24 + ipv6_and_mask: 2001:100:1:1::2/64 + state_ipv6: present + ethernet 1/1/9: + desc: "Connected to Spine 2" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.1.2/24 + ipv6_and_mask: 2001:100:2:1::2/64 + state_ipv6: present +os10_bgp: + asn: 64801 + router_id: 100.0.2.1 + address_family_ipv4: true + address_family_ipv6: true + best_path: + as_path: multipath-relax + as_path_state: present + med: + - attribute: missing-as-worst + state: present + neighbor: + - type: ipv4 + remote_asn: 64901 + ip: 100.1.1.1 + admin: up + state: present + - type: ipv4 + remote_asn: 64901 + ip: 100.2.1.1 + admin: up + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:1:1::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:2:1::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf2.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf2.yaml new file mode 100644 index 00000000..d760626d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf2.yaml @@ -0,0 +1,81 @@ +hostname: leaf2 +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 +leaf_hostname: "leaf-2" +os10_system: + hostname: "{{ leaf_hostname }}" + hash_algo: + algo: + - name: ecmp + mode: crc + state: present +os10_interface: + ethernet 1/1/1: + desc: "Connected to Spine 1" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.17.2/24 + ipv6_and_mask: 2001:100:1:11::2/64 + state_ipv6: present + ethernet 1/1/9: + desc: "Connected to Spine 2" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.17.2/24 + ipv6_and_mask: 2001:100:2:11::2/64 +os10_bgp: + asn: 64802 + router_id: 100.0.2.2 + address_family_ipv4: true + address_family_ipv6: true + best_path: + as_path: multipath-relax + as_path_state: present + med: + - attribute: missing-as-worst + state: present + neighbor: + - type: ipv4 + remote_asn: 64901 + ip: 100.1.18.1 + admin: up + state: present + - type: ipv4 + remote_asn: 64901 + ip: 100.1.17.1 + admin: up + state: present + - type: ipv4 + remote_asn: 64901 + ip: 100.2.17.1 + admin: up + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:1:11::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:2:11::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf3.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf3.yaml new file mode 100644 index 00000000..7b199125 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf3.yaml @@ -0,0 +1,81 @@ +hostname: leaf3 +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 +leaf_hostname: "leaf-3" +os10_system: + hostname: "{{ leaf_hostname }}" + hash_algo: + algo: + - name: ecmp + mode: crc + state: present +os10_interface: + ethernet 1/1/1: + desc: "Connected to Spine 1" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.33.2/24 + ipv6_and_mask: 2001:100:1:21::2/64 + state_ipv6: present + ethernet 1/1/9: + desc: "Connected to Spine 2" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.33.2/24 + ipv6_and_mask: 2001:100:2:21::2/64 +os10_bgp: + asn: 64803 + router_id: 100.0.2.3 + address_family_ipv4: true + address_family_ipv6: true + best_path: + as_path: multipath-relax + as_path_state: present + med: + - attribute: missing-as-worst + state: present + neighbor: + - type: ipv4 + remote_asn: 64901 + ip: 100.1.33.1 + admin: up + state: present + - type: ipv4 + remote_asn: 64901 + ip: 100.2.33.1 + admin: up + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:1:21::1 + admin: up + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:1:22::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:2:21::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf4.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf4.yaml new file mode 100644 index 00000000..e06099e5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/leaf4.yaml @@ -0,0 +1,77 @@ +hostname: leaf4 +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 +leaf_hostname: "leaf-4" +os10_system: + hostname: "{{ leaf_hostname }}" + hash_algo: + algo: + - name: ecmp + mode: crc + state: present +os10_interface: + ethernet 1/1/5: + desc: "Connected to Spine 1" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.49.2/24 + ipv6_and_mask: 2001:100:1:31::2/64 + state_ipv6: present + ethernet 1/1/17: + desc: "Connected to Spine 2" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.49.2/24 + ipv6_and_mask: 2001:100:2:31::2/64 + state_ipv6: present +os10_bgp: + asn: 64804 + router_id: 100.0.2.4 + address_family_ipv4: true + address_family_ipv6: true + best_path: + as_path: multipath-relax + as_path_state: present + med: + - attribute: missing-as-worst + state: present + neighbor: + - type: ipv4 + remote_asn: 64901 + ip: 100.1.49.1 + admin: up + state: present + - type: ipv4 + remote_asn: 64901 + ip: 100.2.49.1 + admin: up + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:1:31::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present + - type: ipv6 + remote_asn: 64901 + ip: 2001:100:2:31::1 + admin: up + address_family: + - type: ipv4 + activate: false + state: present + - type: ipv6 + activate: true + state: present + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/spine1.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/spine1.yaml new file mode 100644 index 00000000..2d926034 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/spine1.yaml @@ -0,0 +1,61 @@ +hostname: spine1 +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 +spine_hostname: "spine-1" + +os10_interface: + ethernet 1/1/1: + desc: "Connected to leaf 1" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.1.1/24 + ipv6_and_mask: 2001:100:1:1::1/64 + state_ipv6: present + ethernet 1/1/17: + desc: "Connected to leaf 2" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.33.1/24 + ipv6_and_mask: 2001:100:1:21::1/64 + state_ipv6: present + ethernet 1/1/25: + desc: "Connected to leaf 3" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.17.1/24 + ipv6_and_mask: 2001:100:1:11::1/64 + state_ipv6: present + ethernet 1/1/9: + desc: "Connected to leaf 4" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.1.49.1/24 + ipv6_and_mask: 2001:100:1:31::1/64 + state_ipv6: present + +bgp_router_id: "100.0.1.1" +bgp_neigh1_remote_asn: 64801 +bgp_neigh1_ip: "100.1.1.2" +bgp_neigh2_remote_asn: 64803 +bgp_neigh2_ip: "100.1.33.2" +bgp_neigh3_remote_asn: 64802 +bgp_neigh3_ip: "100.1.17.2" +bgp_neigh4_remote_asn: 64804 +bgp_neigh4_ip: "100.1.49.2" +bgp_neigh5_remote_asn: 64801 +bgp_neigh5_ip: "2001:100:1:1::2" +bgp_neigh6_remote_asn: 64802 +bgp_neigh6_ip: "2001:100:1:11::2" +bgp_neigh7_remote_asn: 64803 +bgp_neigh7_ip: "2001:100:1:21::2" +bgp_neigh8_remote_asn: 64804 +bgp_neigh8_ip: "2001:100:1:31::2" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/spine2.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/spine2.yaml new file mode 100644 index 00000000..7c616e9f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/host_vars/spine2.yaml @@ -0,0 +1,60 @@ +hostname: spine2 +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 +spine_hostname: "spine-2" +os10_interface: + ethernet 1/1/1: + desc: "Connected to leaf 1" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.1.1/24 + ipv6_and_mask: 2001:100:2:1::1/64 + state_ipv6: present + ethernet 1/1/25: + desc: "Connected to leaf 2" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.17.1/24 + ipv6_and_mask: 2001:100:2:11::1/64 + state_ipv6: present + ethernet 1/1/17: + desc: "Connected to leaf 3" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.33.1/24 + ipv6_and_mask: 2001:100:2:21::1/64 + state_ipv6: present + ethernet 1/1/9: + desc: "Connected to leaf 4" + mtu: 9216 + portmode: + admin: up + switchport: False + ip_and_mask: 100.2.49.1/24 + ipv6_and_mask: 2001:100:2:31::1/64 + state_ipv6: present + +bgp_router_id: "100.0.1.2" +bgp_neigh1_remote_asn: 64801 +bgp_neigh1_ip: "100.2.1.2" +bgp_neigh2_remote_asn: 64802 +bgp_neigh2_ip: "100.2.33.2" +bgp_neigh3_remote_asn: 64803 +bgp_neigh3_ip: "100.2.17.2" +bgp_neigh4_remote_asn: 64804 +bgp_neigh4_ip: "100.2.49.2" +bgp_neigh5_remote_asn: 64801 +bgp_neigh5_ip: "2001:100:2:1::2" +bgp_neigh6_remote_asn: 64802 +bgp_neigh6_ip: "2001:100:2:11::2" +bgp_neigh7_remote_asn: 64803 +bgp_neigh7_ip: "2001:100:2:21::2" +bgp_neigh8_remote_asn: 64804 +bgp_neigh8_ip: "2001:100:2:31::2" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/inventory.yaml new file mode 100644 index 00000000..9516f660 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/clos_fabric_ebgp/inventory.yaml @@ -0,0 +1,20 @@ +spine1 ansible_host=10.11.182.25 +spine2 ansible_host=10.11.182.26 +leaf1 ansible_host=10.11.182.27 +leaf2 ansible_host=10.11.182.28 +leaf3 ansible_host=10.11.182.29 +leaf4 ansible_host=10.11.182.30 + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/README.md new file mode 100644 index 00000000..6d1af994 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/README.md @@ -0,0 +1,63 @@ +# VxLAN Symmetric-IRB configuration using BGP EVPN using the Ansible collection for Dell EMC SmartFabric OS10 + + +This example describes how to use Ansible to build a Leaf-Spine topology with Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10, using a VxLAN Symmetric-IRB configuration model. + +VxLAN Symmetric-IRB is configured using BGP EVPN with Leaf-Spine topology. BGP unnumbered is configured between the Leaf and Spine over VLANS for both underlay and overlay. VLT is configured between the pair of Leaf nodes. + +In all Leaf nodes, the L3 VRF VNI "test" is configured to route between different VNs spanned across the topology, and the VTEP router MAC is configured to identify the remote VTEPs. +VN 100 and VN 300 is configured in a pair of Leaf nodes, and VN 200 and VN 300 configured in an other pair of Leaf nodes. + +## Create simple Ansible playbook + +**1**. Create an inventory file called `inventory.yaml`, then specify the device IP address. + +**2**. Create a host variable file called `host_vars/spine1.yaml`, then define the host, credentials, and transport. + +**3**. Create a host variable file called `host_vars/spine2.yaml`, then define the host, credentials, and transport. + +**4**. Use the *os10_interface* and *os10_vlan* roles to configure the required VLANs. + +**5**. Use the *os10_bgp* role to configure BGP unnumbered. + +**Configurations for VTEP-1** + +**1**. Create a host variable file called `host_vars/prim-vtep1.yaml`. + +**2**. Create a host variable file called `host_vars/sec-vtep1.yaml`. + +**3**. Define the host, credentials, and transport. + +**4**. Use the *os10_interface* and *os10_vlan* roles to configure the required VLANs. + +**5**. Use the *os10_bgp* role to configure BGP unnumbered. + +**6**. Use the *os10_vxlan* role to configure VN networks, EVPN and Symmetric IRB functionality. + +**7**. Use *os10_vlt* role to configure VLT between leaves prim-vtep1 and sec-vtep1. + +**Configurations for VTEP-2** + +**1**. Create a host variable file called `host_vars/prim-vtep2.yaml`. + +**2**. Create a host variable file called `host_vars/sec-vtep2.yaml`. + +**3**. Define the host, credentials, and transport. + +**4**. Use *os10_interface* and *os10_vlan* roles to configure the required VLANs. + +**5**. Use the *os10_bgp* role to configure BGP unnumbered. + +**6**. Use *os10_vxlan* role to configure VN networks, EVPN and Symmetric IRB functionality. + +**7**. Use the *os10_vlt* role to configure VLT between leaves prim-vtep2 and sec-vtep2. + +**Create and run the playbook** + +**1**. Create a playbook called `datacenter.yaml`. + +**2**. Run the playbook. + + ansible-playbook -i inventory.yaml datacenter.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/datacenter.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/datacenter.yaml new file mode 100644 index 00000000..d8b1d413 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/datacenter.yaml @@ -0,0 +1,16 @@ +--- +- hosts: datacenter + connection: network_cli + collections: + - dellemc.os10 + vars: + build_dir: "/home/administrator/ansible/debug" + roles: + - os10_vrf + - os10_interface + - os10_system + - os10_bgp + - os10_lag + - os10_vlan + - os10_vxlan + - os10_vlt diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/prim-vtep1.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/prim-vtep1.yaml new file mode 100644 index 00000000..5ad28505 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/prim-vtep1.yaml @@ -0,0 +1,210 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "VLT1-Primary" + +os10_bgp: + asn: 100 + router_id: 1.1.1.10 + neighbor: + - type: ipv4 + interface: vlan20 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan10 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan11 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + ipv4_network: 1.1.1.1/32 + redistribute: + - route_type: connected + address_type: ipv4 + state: present + state: "present" + + +os10_interface: + loopback 0: + admin: up + ip_and_mask: 1.1.1.1/32 + ethernet 1/1/6: + switchport: False + admin: up + ethernet 1/1/4: + admin: up + switchport: False + ethernet 1/1/5: + admin: up + switchport: False + ethernet 1/1/1: + admin: up + switchport: False + portmode: "trunk" +# ethernet 1/1/2: + ethernet 1/1/3: + admin: up + switchport: False + portmode: "trunk" + port-channel 10: + portmode: "trunk" + admin: up + vlan 10: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 11: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 20: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + virtual-network 100: + vrf: "test" + ip_and_mask: "15.1.1.1/24" + ip_virtual_gateway_ip: "15.1.1.254" + admin: up + virtual-network 300: + vrf: "test" + ip_and_mask: "25.1.1.1/24" + ip_virtual_gateway_ip: "25.1.1.254" + admin: up + +os10_lag: + port-channel 10: + type: dynamic + channel_members: +# - port: ethernet1/1/5 + - port: ethernet1/1/6 + mode: active + state: present + +os10_vlan: + vlan 10: + tagged_members: + - port: ethernet 1/1/1 + state: "present" + access_vlan: "false" + state: "present" + vlan 20: + tagged_members: +# - port: ethernet 1/1/2 + - port: ethernet 1/1/3 + state: "present" + access_vlan: "false" + state: "present" + +os10_vrf: + vrfdetails: + - vrf_name: "test" + state: "present" + +os10_vxlan: + anycast_gateway_mac: "00:00:aa:bb:ee:ff" + nve: + source_interface: 0 + state: "present" + evpn: + evi: + - id: 100 + vni: + id: 100 + state: "present" + rd: "auto" + route_target: + - type: "manual" + asn_value: "65530:65532" + route_target_type: "both" + state: "present" + state: "present" + - id: 300 + vni: + id: 300 + state: "present" + rd: "auto" + route_target: + - type: "auto" + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + rmac: 00:11:11:11:11:11 + dis_rt_asn: "true" + virtual_network: + virtual_net: + - id: 100 + vlt_vlan_id: 100 + member_interface: + - ifname: "port-channel10" + type: "tagged" + vlanid: 100 + state: "present" + vxlan_vni: + id: 100 + state: "present" + state: "present" + - id: 300 + vlt_vlan_id: 300 + member_interface: + - ifname: "port-channel10" + type: "tagged" + vlanid: 300 + state: "present" + vxlan_vni: + id: 300 + state: "present" + state: "present" + +os10_vlt: + domain: 1 + destination_type: "ipv4" + peer_routing: True +# discovery_intf: "1/1/3-1/1/4" + discovery_intf: "1/1/4-1/1/5" + vlt_mac: 00:00:00:11:22:33 + vlt_peers: + Po 10: + peer_lag: 10 + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/prim-vtep2.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/prim-vtep2.yaml new file mode 100644 index 00000000..ea49d19d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/prim-vtep2.yaml @@ -0,0 +1,194 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "VLT2-Primary" + +os10_bgp: + asn: 300 + router_id: 2.2.2.10 + ipv4_network: 2.2.2.2/32 + redistribute: + - route_type: connected + address_type: ipv4 + state: present + state: "present" + neighbor: + - type: ipv4 + interface: vlan50 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan60 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan11 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + +os10_interface: + loopback 0: + admin: up + ip_and_mask: 2.2.2.2/32 + loopback 10: + admin: up + vrf: "test" + ip_and_mask: 50.1.1.10/32 + loopback 20: + admin: up + vrf: "test" + ip_and_mask: 60.1.1.10/32 + ethernet 1/1/1: + admin: up + switchport: False + portmode: "trunk" + ethernet 1/1/2: + admin: up + switchport: False + portmode: "trunk" + ethernet 1/1/3: + switchport: False + admin: up + ethernet 1/1/4: + admin: up + switchport: False + ethernet 1/1/5: + switchport: False + vrf: "test" + ip_and_mask: "21.21.21.20/24" + admin: up + vlan 11: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 50: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 60: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + virtual-network 200: + vrf: "test" + ip_and_mask: "30.1.1.100/24" + ip_virtual_gateway_ip: "30.1.1.254" + admin: up + virtual-network 300: + vrf: "test" + ip_and_mask: "25.1.1.100/24" + ip_virtual_gateway_ip: "25.1.1.254" + admin: up + +os10_vlan: + vlan 50: + tagged_members: + - port: ethernet 1/1/1 + state: "present" + access_vlan: "false" + state: "present" + vlan 60: + tagged_members: + - port: ethernet 1/1/2 + state: "present" + access_vlan: "false" + state: "present" + +os10_vrf: + vrfdetails: + - vrf_name: "test" + state: "present" + +os10_vxlan: + anycast_gateway_mac: "00:00:aa:bb:ee:ff" + nve: + source_interface: 0 + state: "present" + evpn: + evi: + - id: 200 + vni: + id: 200 + state: "present" + rd: "auto" + route_target: + - type: "manual" + asn_value: "65530:65533" + route_target_type: "both" + state: "present" + state: "present" + - id: 300 + vni: + id: 300 + state: "present" + rd: "auto" + route_target: + - type: "auto" + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + rmac: 00:00:22:22:22:22 + dis_rt_asn: "true" + virtual_network: + virtual_net: + - id: 200 + vlt_vlan_id: 200 + vxlan_vni: + id: 200 + state: "present" + state: "present" + - id: 300 + vlt_vlan_id: 300 + vxlan_vni: + id: 300 + state: "present" + state: "present" + +os10_vlt: + domain: 1 + destination_type: "ipv4" + peer_routing: True + discovery_intf: "1/1/3-1/1/4" + vlt_mac: 00:00:00:44:55:66 + vlt_peers: + Po 10: + peer_lag: 10 + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/sec-vtep1.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/sec-vtep1.yaml new file mode 100644 index 00000000..ac04c3c6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/sec-vtep1.yaml @@ -0,0 +1,206 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "VLT1-SEC" + +os10_bgp: + asn: 100 + router_id: 1.1.1.20 + neighbor: + - type: ipv4 + interface: vlan40 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan30 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan11 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + ipv4_network: 1.1.1.1/32 + redistribute: + - route_type: connected + address_type: ipv4 + state: present + state: "present" + + +os10_interface: + loopback 0: + admin: up + ip_and_mask: 1.1.1.1/32 + ethernet 1/1/3: + switchport: False + admin: up + ethernet 1/1/4: + admin: up + switchport: False + ethernet 1/1/5: + admin: up + switchport: False + ethernet 1/1/1: + admin: up + switchport: False + portmode: "trunk" + ethernet 1/1/2: + admin: up + switchport: False + portmode: "trunk" + port-channel 10: + portmode: "trunk" + admin: up + vlan 30: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 11: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 40: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + virtual-network 100: + vrf: "test" + ip_and_mask: "15.1.1.2/24" + ip_virtual_gateway_ip: "15.1.1.254" + admin: up + virtual-network 300: + vrf: "test" + ip_and_mask: "25.1.1.2/24" + ip_virtual_gateway_ip: "25.1.1.254" + admin: up + +os10_lag: + port-channel 10: + type: dynamic + channel_members: + - port: ethernet1/1/5 + mode: active + state: present + +os10_vlan: + vlan 30: + tagged_members: + - port: ethernet 1/1/1 + state: "present" + access_vlan: "false" + state: "present" + vlan 40: + tagged_members: + - port: ethernet 1/1/2 + state: "present" + access_vlan: "false" + state: "present" + +os10_vrf: + vrfdetails: + - vrf_name: "test" + state: "present" + +os10_vxlan: + anycast_gateway_mac: "00:00:aa:bb:ee:ff" + nve: + source_interface: 0 + state: "present" + evpn: + evi: + - id: 100 + vni: + id: 100 + state: "present" + rd: "auto" + route_target: + - type: "manual" + asn_value: "65530:65532" + route_target_type: "both" + state: "present" + state: "present" + - id: 300 + vni: + id: 300 + state: "present" + rd: "auto" + route_target: + - type: "auto" + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + rmac: 00:11:11:11:11:11 + dis_rt_asn: "true" + virtual_network: + virtual_net: + - id: 100 + vlt_vlan_id: 100 + member_interface: + - ifname: "port-channel10" + type: "tagged" + vlanid: 100 + state: "present" + vxlan_vni: + id: 100 + state: "present" + state: "present" + - id: 300 + vlt_vlan_id: 300 + member_interface: + - ifname: "port-channel10" + type: "tagged" + vlanid: 300 + state: "present" + vxlan_vni: + id: 300 + state: "present" + state: "present" + +os10_vlt: + domain: 1 + destination_type: "ipv4" + peer_routing: True + discovery_intf: "1/1/3-1/1/4" + vlt_mac: 00:00:00:11:22:33 + vlt_peers: + Po 10: + peer_lag: 10 + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/sec-vtep2.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/sec-vtep2.yaml new file mode 100644 index 00000000..e23ed9c5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/sec-vtep2.yaml @@ -0,0 +1,200 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "VLT2-SEC" + +os10_bgp: + asn: 300 + router_id: 2.2.2.20 + neighbor: + - type: ipv4 + interface: vlan70 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan80 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + interface: vlan11 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + vrf: + name: "test" + address_type: ipv4 + redistribute: + - route_type: l2vpn + ipv4_network: 2.2.2.2/32 + redistribute: + - route_type: connected + address_type: ipv4 + state: present + state: "present" + + +os10_interface: + loopback 0: + admin: up + ip_and_mask: 2.2.2.2/32 + loopback 10: + admin: up + vrf: "test" + ip_and_mask: 80.1.1.10/32 + loopback 20: + admin: up + vrf: "test" + ip_and_mask: 90.1.1.10/32 + ethernet 1/1/1: + admin: up + switchport: False + portmode: "trunk" + ethernet 1/1/2: + admin: up + switchport: False + portmode: "trunk" + ethernet 1/1/3: + switchport: False + admin: up + ethernet 1/1/4: + admin: up + switchport: False + ethernet 1/1/5: + switchport: False + vrf: "test" + ip_and_mask: "20.20.20.20/24" + admin: up + vlan 11: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 70: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 80: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + virtual-network 200: + vrf: "test" + ip_and_mask: "30.1.1.101/24" + ip_virtual_gateway_ip: "30.1.1.254" + admin: up + virtual-network 300: + vrf: "test" + ip_and_mask: "25.1.1.101/24" + ip_virtual_gateway_ip: "25.1.1.254" + admin: up + +os10_vlan: + vlan 70: + tagged_members: + - port: ethernet 1/1/1 + state: "present" + access_vlan: "false" + state: "present" + vlan 80: + tagged_members: + - port: ethernet 1/1/2 + state: "present" + access_vlan: "false" + state: "present" + +os10_vrf: + vrfdetails: + - vrf_name: "test" + state: "present" + +os10_vxlan: + anycast_gateway_mac: "00:00:aa:bb:ee:ff" + nve: + source_interface: 0 + state: "present" + evpn: + evi: + - id: 200 + vni: + id: 200 + state: "present" + rd: "auto" + route_target: + - type: "manual" + asn_value: "65530:65533" + route_target_type: "both" + state: "present" + state: "present" + - id: 300 + vni: + id: 300 + state: "present" + rd: "auto" + route_target: + - type: "auto" + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + rmac: 00:00:22:22:22:22 + dis_rt_asn: "true" + virtual_network: + virtual_net: + - id: 200 + vlt_vlan_id: 200 + vxlan_vni: + id: 200 + state: "present" + state: "present" + - id: 300 + vlt_vlan_id: 300 + vxlan_vni: + id: 300 + state: "present" + state: "present" + +os10_vlt: + domain: 1 + destination_type: "ipv4" + peer_routing: True + discovery_intf: "1/1/3-1/1/4" + vlt_mac: 00:00:00:44:55:66 + vlt_peers: + Po 10: + peer_lag: 10 + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/spine1.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/spine1.yaml new file mode 100644 index 00000000..4672562b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/spine1.yaml @@ -0,0 +1,95 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "spine1" + +os10_bgp: + asn: 200 + router_id: 9.9.9.10 + neighbor: + - type: "peergroup" + name: "ebgp_session" + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + state: present + - type: ipv4 + interface: vlan10 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + - type: ipv4 + interface: vlan30 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + - type: ipv4 + interface: vlan50 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + - type: ipv4 + interface: vlan70 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + state: "present" + + +os10_interface: + vlan 10: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 30: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 50: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 70: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + +os10_vlan: + vlan 10: + tagged_members: + - port: ethernet 1/1/1 + state: "present" + access_vlan: "false" + state: "present" + vlan 30: + tagged_members: + - port: ethernet 1/1/2 + state: "present" + access_vlan: "false" + state: "present" + vlan 50: + tagged_members: + - port: ethernet 1/1/3 + state: "present" + access_vlan: "false" + state: "present" + vlan 70: + tagged_members: + - port: ethernet 1/1/4 + state: "present" + access_vlan: "false" + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/spine2.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/spine2.yaml new file mode 100644 index 00000000..0e953b88 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/host_vars/spine2.yaml @@ -0,0 +1,95 @@ +ansible_ssh_user: xxxxx +ansible_ssh_pass: xxxxx +ansible_network_os: dellemc.os10.os10 + +os10_system: + hostname: "spine2" + +os10_bgp: + asn: 201 + router_id: 9.9.9.20 + neighbor: + - type: "peergroup" + name: "ebgp_session" + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + state: present + - type: ipv4 + interface: vlan20 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + - type: ipv4 + interface: vlan40 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + - type: ipv4 + interface: vlan60 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + - type: ipv4 + interface: vlan80 + peergroup: ebgp_session + peergroup_type: ebgp + admin: up + state: present + state: "present" + + +os10_interface: + vlan 20: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 40: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 60: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + vlan 80: + suppress_ra: absent + min_ra: 3 + max_ra: 4 + admin: up + +os10_vlan: + vlan 20: + tagged_members: + - port: ethernet 1/1/1 + state: "present" + access_vlan: "false" + state: "present" + vlan 40: + tagged_members: + - port: ethernet 1/1/2 + state: "present" + access_vlan: "false" + state: "present" + vlan 60: + tagged_members: + - port: ethernet 1/1/3 + state: "present" + access_vlan: "false" + state: "present" + vlan 80: + tagged_members: + - port: ethernet 1/1/4 + state: "present" + access_vlan: "false" + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/inventory.yaml new file mode 100644 index 00000000..104712dc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/inventory.yaml @@ -0,0 +1,20 @@ +spine1 ansible_host=101.104.34.141 +prim-vtep1 ansible_host=101.104.34.217 +sec-vtep1 ansible_host=101.104.34.218 +spine2 ansible_host=101.104.34.142 +prim-vtep2 ansible_host=101.104.34.219 +sec-vtep2 ansible_host=101.104.34.220 + +[site1] +prim-vtep1 +sec-vtep1 +spine1 + +[site2] +prim-vtep2 +spine2 +sec-vtep2 + +[datacenter:children] +site1 +site2 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/vxlan_evpn_topology.png b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/vxlan_evpn_topology.png Binary files differnew file mode 100644 index 00000000..b2f695b4 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/playbooks/vxlan_evpn/vxlan_evpn_topology.png diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/action/os10.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/action/os10.py new file mode 100644 index 00000000..5669001c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/action/os10.py @@ -0,0 +1,94 @@ +# +# (c) 2020 Red Hat Inc. +# +# (c) 2020 Dell Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. +# +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import sys +import copy + + +from ansible import constants as C +from ansible.module_utils._text import to_text +from ansible.module_utils.connection import Connection +from ansible_collections.ansible.netcommon.plugins.action.network import ActionModule as ActionNetworkModule +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import load_provider +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import os10_provider_spec +from ansible.utils.display import Display + +display = Display() + + +class ActionModule(ActionNetworkModule): + + def run(self, tmp=None, task_vars=None): + del tmp # tmp no longer has any effect + + self._config_module = True if self._task.action == 'os10_config' else False + socket_path = None + + if self._play_context.connection == 'network_cli': + provider = self._task.args.get('provider', {}) + if any(provider.values()): + display.warning('provider is unnecessary when using network_cli and will be ignored') + del self._task.args['provider'] + elif self._play_context.connection == 'local': + provider = load_provider(os10_provider_spec, self._task.args) + pc = copy.deepcopy(self._play_context) + pc.connection = 'network_cli' + pc.network_os = 'dellemc.os10.os10' + pc.remote_addr = provider['host'] or self._play_context.remote_addr + pc.port = int(provider['port'] or self._play_context.port or 22) + pc.remote_user = provider['username'] or self._play_context.connection_user + pc.password = provider['password'] or self._play_context.password + pc.private_key_file = provider['ssh_keyfile'] or self._play_context.private_key_file + command_timeout = int(provider['timeout'] or C.PERSISTENT_COMMAND_TIMEOUT) + pc.become = provider['authorize'] or False + if pc.become: + pc.become_method = 'enable' + pc.become_pass = provider['auth_pass'] + + display.vvv('using connection plugin %s' % pc.connection, pc.remote_addr) + connection = self._shared_loader_obj.connection_loader.get('persistent', pc, sys.stdin) + connection.set_options(direct={'persistent_command_timeout': command_timeout}) + + socket_path = connection.run() + display.vvvv('socket_path: %s' % socket_path, pc.remote_addr) + if not socket_path: + return {'failed': True, + 'msg': 'unable to open shell. Please see: ' + + 'https://docs.ansible.com/ansible/network_debug_troubleshooting.html#unable-to-open-shell'} + + task_vars['ansible_socket'] = socket_path + + # make sure we are in the right cli context which should be + # enable mode and not config module + if socket_path is None: + socket_path = self._connection.socket_path + + conn = Connection(socket_path) + out = conn.get_prompt() + while to_text(out, errors='surrogate_then_replace').strip().endswith(')#'): + display.vvvv('wrong context, sending exit to device', self._play_context.remote_addr) + conn.send_command('exit') + out = conn.get_prompt() + + result = super(ActionModule, self).run(task_vars=task_vars) + return result diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/action/textfsm_parser.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/action/textfsm_parser.py new file mode 100644 index 00000000..602186c8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/action/textfsm_parser.py @@ -0,0 +1,81 @@ +# -*- coding: utf-8 -*- + +# (c) 2020, Ansible by Red Hat, inc +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. +# +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from ansible.module_utils.six import StringIO, string_types + +from ansible.plugins.action import ActionBase +from ansible.errors import AnsibleError + +try: + import textfsm + HAS_TEXTFSM = True +except ImportError: + HAS_TEXTFSM = False + + +class ActionModule(ActionBase): + + def run(self, tmp=None, task_vars=None): + ''' handler for textfsm action ''' + + if task_vars is None: + task_vars = dict() + + result = super(ActionModule, self).run(tmp, task_vars) + del tmp # tmp no longer has any effect + + try: + if not HAS_TEXTFSM: + raise AnsibleError('textfsm_parser engine requires the TextFSM library to be installed') + + try: + filename = self._task.args.get('file') + src = self._task.args.get('src') + content = self._task.args['content'] + name = self._task.args.get('name') + except KeyError as exc: + raise AnsibleError('missing required argument: %s' % exc) + + if src and filename: + raise AnsibleError('`src` and `file` are mutually exclusive arguments') + + if not isinstance(content, string_types): + return {'failed': True, 'msg': '`content` must be of type str, got %s' % type(content)} + + if filename: + tmpl = open(filename) + else: + tmpl = StringIO() + tmpl.write(src.strip()) + tmpl.seek(0) + + try: + re_table = textfsm.TextFSM(tmpl) + fsm_results = re_table.ParseText(content) + + except Exception as exc: + raise AnsibleError(str(exc)) + + final_facts = [] + for item in fsm_results: + facts = {} + facts.update(dict(zip(re_table.header, item))) + final_facts.append(facts) + + if name: + result['ansible_facts'] = {name: final_facts} + else: + result['ansible_facts'] = {} + + finally: + self._remove_tmp_path(self._connection._shell.tmpdir) + + return result diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/cliconf/os10.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/cliconf/os10.py new file mode 100644 index 00000000..7d009f5a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/cliconf/os10.py @@ -0,0 +1,88 @@ +# +# (c) 2020 Red Hat Inc. +# +# (c) 2020 Dell Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. +# +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +DOCUMENTATION = """ +--- +cliconf: os10 +short_description: Use os10 cliconf to run command on Dell OS10 platform +description: + - This os10 plugin provides low level abstraction apis for + sending and receiving CLI commands from Dell OS10 network devices. +""" + +import re +import json + +from itertools import chain + +from ansible.module_utils._text import to_bytes, to_text +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list +from ansible.plugins.cliconf import CliconfBase, enable_mode + + +class Cliconf(CliconfBase): + + def get_device_info(self): + device_info = {} + + device_info['network_os'] = 'dellemc.os10.os10' + reply = self.get('show version') + data = to_text(reply, errors='surrogate_or_strict').strip() + + match = re.search(r'OS Version (\S+)', data) + if match: + device_info['network_os_version'] = match.group(1) + + match = re.search(r'System Type (\S+)', data, re.M) + if match: + device_info['network_os_model'] = match.group(1) + + reply = self.get('show running-configuration | grep hostname') + data = to_text(reply, errors='surrogate_or_strict').strip() + match = re.search(r'^hostname (.+)', data, re.M) + if match: + device_info['network_os_hostname'] = match.group(1) + + return device_info + + @enable_mode + def get_config(self, source='running', format='text', flags=None): + if source not in ('running', 'startup'): + return self.invalid_params("fetching configuration from %s is not supported" % source) + if source == 'running': + cmd = 'show running-config all' + else: + cmd = 'show startup-config' + return self.send_command(cmd) + + @enable_mode + def edit_config(self, command): + for cmd in chain(['configure terminal'], to_list(command), ['end']): + self.send_command(to_bytes(cmd)) + + def get(self, command, prompt=None, answer=None, sendonly=False, newline=True, check_all=False): + return self.send_command(command=command, prompt=prompt, answer=answer, sendonly=sendonly, newline=newline, check_all=check_all) + + def get_capabilities(self): + result = super(Cliconf, self).get_capabilities() + return json.dumps(result) diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/doc_fragments/os10.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/doc_fragments/os10.py new file mode 100644 index 00000000..9a6baf44 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/doc_fragments/os10.py @@ -0,0 +1,75 @@ +# -*- coding: utf-8 -*- + +# Copyright: (c) 2020, Peter Sprygada <psprygada@ansible.com> +# Copyright: (c) 2020, Dell Inc. +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__metaclass__ = type + + +class ModuleDocFragment(object): + + # Standard files documentation fragment + DOCUMENTATION = r''' +options: + provider: + description: + - A dict object containing connection details. + type: dict + suboptions: + host: + description: + - Specifies the DNS host name or address for connecting to the remote + device over the specified transport. The value of host is used as + the destination address for the transport. + type: str + port: + description: + - Specifies the port to use when building the connection to the remote + device. + type: int + username: + description: + - User to authenticate the SSH session to the remote device. If the + value is not specified in the task, the value of environment variable + C(ANSIBLE_NET_USERNAME) will be used instead. + type: str + password: + description: + - Password to authenticate the SSH session to the remote device. If the + value is not specified in the task, the value of environment variable + C(ANSIBLE_NET_PASSWORD) will be used instead. + type: str + ssh_keyfile: + description: + - Path to an ssh key used to authenticate the SSH session to the remote + device. If the value is not specified in the task, the value of + environment variable C(ANSIBLE_NET_SSH_KEYFILE) will be used instead. + type: path + timeout: + description: + - Specifies idle timeout (in seconds) for the connection. Useful if the + console freezes before continuing. For example when saving + configurations. + type: int + authorize: + description: + - Instructs the module to enter privileged mode on the remote device before + sending any commands. If not specified, the device will attempt to execute + all commands in non-privileged mode. If the value is not specified in the + task, the value of environment variable C(ANSIBLE_NET_AUTHORIZE) will be + used instead. + type: bool + default: false + auth_pass: + description: + - Specifies the password to use if required to enter privileged mode on the + remote device. If I(authorize) is false, then this argument does nothing. + If the value is not specified in the task, the value of environment variable + C(ANSIBLE_NET_AUTH_PASS) will be used instead. + type: str +notes: + - For more information on using Ansible to manage Dell EMC Network devices see U(https://www.ansible.com/ansible-dell-networking). +''' diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/__init__.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/__init__.py diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/base_network_show.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/base_network_show.py new file mode 100644 index 00000000..b287c38c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/base_network_show.py @@ -0,0 +1,42 @@ +from __future__ import (absolute_import, division, print_function) +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_native +from collections import OrderedDict +import traceback + +LIB_IMP_ERR = None +ERR_MSG = None +try: + import xmltodict + import yaml + HAS_LIB = True +except Exception as e: + HAS_LIB = False + ERR_MSG = to_native(e) + LIB_IMP_ERR = traceback.format_exc() + +__copyright__ = "(c) Copyright 2020 Dell Inc. or its subsidiaries. All rights reserved." +__metaclass__ = type + + +class BaseNetworkShow(object): + """The goal of this class is to extended by other in order to implement show system network view ansible modules""" + + def __init__(self): + self.module = AnsibleModule(argument_spec=self.get_fields()) + if not HAS_LIB: + self.module.fail_json( + msg=ERR_MSG, + exception=LIB_IMP_ERR) + self.exit_msg = OrderedDict() + + def xml_to_dict(self, value): + + return xmltodict.parse(value) + + def dict_to_yaml(self, value): + return yaml.safe_dump(value, default_flow_style=False) + + +if __name__ == '__main__': + pass diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/os10.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/os10.py new file mode 100644 index 00000000..35976488 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/module_utils/network/os10.py @@ -0,0 +1,146 @@ +# +# (c) 2020 Peter Sprygada, <psprygada@ansible.com> +# (c) 2020 Red Hat, Inc +# +# Copyright (c) 2020 Dell Inc. +# +# This code is part of Ansible, but is an independent component. +# This particular file snippet, and this file snippet only, is BSD licensed. +# Modules you write using this snippet, which is embedded dynamically by Ansible +# still belong to the author of the module, and may assign their own license +# to the complete work. +# +# Redistribution and use in source and binary forms, with or without modification, +# are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright notice, +# this list of conditions and the following disclaimer in the documentation +# and/or other materials provided with the distribution. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, +# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE +# USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +# + +from __future__ import (absolute_import, division, print_function) + +import re + +from ansible.module_utils._text import to_text +from ansible.module_utils.basic import env_fallback +from ansible.module_utils.connection import exec_command +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list, ComplexList +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import NetworkConfig, ConfigLine + +__metaclass__ = type + +_DEVICE_CONFIGS = {} + +WARNING_PROMPTS_RE = [ + r"[\r\n]?\[confirm yes/no\]:\s?$", + r"[\r\n]?\[y/n\]:\s?$", + r"[\r\n]?\[yes/no\]:\s?$" +] + +os10_provider_spec = { + 'host': dict(), + 'port': dict(type='int'), + 'username': dict(fallback=(env_fallback, ['ANSIBLE_NET_USERNAME'])), + 'password': dict(fallback=(env_fallback, ['ANSIBLE_NET_PASSWORD']), no_log=True), + 'ssh_keyfile': dict(fallback=(env_fallback, ['ANSIBLE_NET_SSH_KEYFILE']), type='path'), + 'authorize': dict(fallback=(env_fallback, ['ANSIBLE_NET_AUTHORIZE']), type='bool'), + 'auth_pass': dict(fallback=(env_fallback, ['ANSIBLE_NET_AUTH_PASS']), no_log=True), + 'timeout': dict(type='int'), +} +os10_argument_spec = { + 'provider': dict(type='dict', options=os10_provider_spec), +} + + +def check_args(module, warnings): + pass + + +def get_config(module, flags=None): + flags = [] if flags is None else flags + + cmd = 'show running-configuration' + cmd += ' '.join(flags) + cmd = cmd.strip() + + try: + return _DEVICE_CONFIGS[cmd] + except KeyError: + rc, out, err = exec_command(module, cmd) + if rc != 0: + module.fail_json(msg='unable to retrieve current config', stderr=to_text(err, errors='surrogate_or_strict')) + cfg = to_text(out, errors='surrogate_or_strict').strip() + _DEVICE_CONFIGS[cmd] = cfg + return cfg + + +def to_commands(module, commands): + spec = { + 'command': dict(key=True), + 'prompt': dict(), + 'answer': dict() + } + transform = ComplexList(spec, module) + return transform(commands) + + +def run_commands(module, commands, check_rc=True): + responses = list() + commands = to_commands(module, to_list(commands)) + for cmd in commands: + cmd = module.jsonify(cmd) + rc, out, err = exec_command(module, cmd) + if check_rc and rc != 0: + module.fail_json(msg=to_text(err, errors='surrogate_or_strict'), rc=rc) + responses.append(to_text(out, errors='surrogate_or_strict')) + return responses + + +def load_config(module, commands): + rc, out, err = exec_command(module, 'configure terminal') + if rc != 0: + module.fail_json(msg='unable to enter configuration mode', err=to_text(err, errors='surrogate_or_strict')) + + commands.append('commit') + for command in to_list(commands): + if command == 'end': + continue + rc, out, err = exec_command(module, command) + if rc != 0: + module.fail_json(msg=to_text(err, errors='surrogate_or_strict'), command=command, rc=rc) + + exec_command(module, 'end') + + +def get_sublevel_config(running_config, module): + contents = list() + current_config_contents = list() + running_config = NetworkConfig(contents=running_config, indent=1) + obj = running_config.get_object(module.params['parents']) + if obj: + contents = obj.children + contents[:0] = module.params['parents'] + + indent = 0 + for c in contents: + if isinstance(c, str): + current_config_contents.append(c.rjust(len(c) + indent, ' ')) + if isinstance(c, ConfigLine): + current_config_contents.append(c.raw) + indent = 1 + sublevel_config = '\n'.join(current_config_contents) + + return sublevel_config diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/.os10_command.py.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/.os10_command.py.un~ Binary files differnew file mode 100644 index 00000000..f898e42f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/.os10_command.py.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/__init__.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/__init__.py diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/base_xml_to_dict.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/base_xml_to_dict.py new file mode 100644 index 00000000..b7d82f77 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/base_xml_to_dict.py @@ -0,0 +1,124 @@ +#!/usr/bin/python + +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__copyright__ = "(c) Copyright 2020 Dell Inc. or its subsidiaries. All rights reserved." + +__metaclass__ = type + + +DOCUMENTATION = ''' +module: base_xml_to_dict +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Operations for show command output convertion from xml to json format. +description: + + - Get the show system inforamtion of a Leaf-Spine. + +options: + cli_responses: + type: str + description: + - show command xml output + required: True +''' +EXAMPLES = ''' +Copy below YAML into a playbook (e.g. play.yml) and run as follows: + +#$ ansible-playbook -i inv play.yml +name: setup the plabook to get show command output in dict format +hosts: localhost +connection: local +gather_facts: False +vars: + cli: + username: admin + password: admin +tasks: +- name: "Get Dell EMC OS10 Show output in dict format" + os10_command: + commands: "{{ command_list }}" + register: show +- debug: var=show +- name: call to lib to get output in dict + base_xml_to_dict: + cli_responses: "{{ item }}" + loop: "{{ show.stdout }}" +''' + +from ansible.module_utils._text import to_native +from ansible.module_utils.basic import AnsibleModule +from collections import OrderedDict +import traceback + +LIB_IMP_ERR = None +ERR_MSG = None +try: + import xmltodict + HAS_LIB = True +except Exception as e: + HAS_LIB = False + ERR_MSG = to_native(e) + LIB_IMP_ERR = traceback.format_exc() + + +class XmlToDictAnsibleModule(object): + """The goal of this class is to convert xml input to dict""" + + def __init__(self): + self.module = AnsibleModule(argument_spec=self.get_fields()) + self.cli_responses = self.module.params['cli_responses'] + self.exit_msg = OrderedDict() + + def get_fields(self): + """Return valid fields""" + base_fields = { + 'cli_responses': { + 'type': 'str', + 'required': True + } + } + return base_fields + + def build_xml_list(self, xml_output): + xml_str_list = [] + xml_declaration_tag = '<?xml version="1.0"?>\n' + for data in xml_output.split('<?xml version="1.0"'): + if not data: + continue + xml_data = ''.join(data.splitlines(True)[1:]) + xml_str_list.append(xml_declaration_tag + xml_data) + + return xml_str_list + + def perform_action(self): + try: + out = list() + # the below line should be removed or not valid when the password + # decrypt issue is resolved + self.cli_responses = self.cli_responses.replace( + "*-", '').replace("*", '') + xml_str_list = self.build_xml_list(self.cli_responses) + for xml_list in xml_str_list: + out.append(xmltodict.parse(xml_list)) + + self.exit_msg.update({"result": out}) + self.module.exit_json(changed=False, msg=self.exit_msg) + except Exception as e: + self.module.fail_json( + msg=to_native(e), + exception=traceback.format_exc()) + + +def main(): + module_instance = XmlToDictAnsibleModule() + if not HAS_LIB: + module_instance.module.fail_json(msg=ERR_MSG, + exception=LIB_IMP_ERR) + module_instance.perform_action() + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/bgp_validate.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/bgp_validate.py new file mode 100644 index 00000000..85832c78 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/bgp_validate.py @@ -0,0 +1,303 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__copyright__ = "(c) 2020 Dell Inc. or its subsidiaries. All rights reserved." + +__metaclass__ = type + +DOCUMENTATION = ''' +module: bgp_validate +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Validate the bgp neighbor state,raise error if it is not in established state +description: + + - Troubleshoot the bgp neighor state info using show ip bgp summary and show ip interface brief. + +options: + show_ip_bgp: + description: + - show ip bgp summary output + type: 'list' + required: True + show_ip_intf_brief: + description: + - show ip interface brief output + type: 'list' + required: True + bgp_neighbors: + description: + - planned neighbours input from group_var to compare actual + type: 'list' + required: True +''' +EXAMPLES = ''' +Copy below YAML into a playbook (e.g. play.yml) and run as follows: + +#$ ansible-playbook -i inv play.yml +name: Validate BGP configuration +hosts: localhost +connection: local +gather_facts: False +tasks: + - name: "Get Dell EMC OS10 Show ip bgp summary" + os10_command: + commands: + - command: "show ip bgp summary | display-xml" + - command: "show ip interface brief | display-xml" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_bgp + - set_fact: + output_bgp: "{{ output_bgp|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, + 'stdout_show_bgp': item.stdout.0, 'stdout_show_ip': item.stdout.1}] }}" + loop: "{{ show_bgp.results }}" + - debug: var=output_bgp + - local_action: copy content={{ output_bgp }} dest=show + - name: call lib to convert bgp info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.stdout_show_bgp }}" + with_items: + - "{{ output_bgp }}" + register: show_bgp_list + - name: call lib to convert ip interface info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.stdout_show_ip }}" + with_items: + - "{{ output_bgp }}" + register: show_ip_intf_list + - name: call lib for bgp validation + bgp_validate: + show_ip_bgp: "{{ show_bgp_list.results }}" + show_ip_intf_brief: "{{ show_ip_intf_list.results }}" + bgp_neighbors: "{{ intended_bgp_neighbors }}" +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_native +from collections import OrderedDict +import traceback + + +class BgpValidation(object): + def __init__(self): + self.module = AnsibleModule(argument_spec=self.get_fields()) + self.show_ip_bgp = self.module.params['show_ip_bgp'] + self.show_ip_intf_brief = self.module.params['show_ip_intf_brief'] + self.bgp_neighbors = self.module.params['bgp_neighbors'] + self.exit_msg = OrderedDict() + + def get_fields(self): + spec_fields = { + 'show_ip_bgp': { + 'type': 'list', + 'required': True + }, + 'show_ip_intf_brief': { + 'type': 'list', + 'required': True + }, + 'bgp_neighbors': { + 'type': 'list', + 'required': True + } + } + return spec_fields + + def parse_bgp_output(self): + show_bgp_dict = {} + for show_list in self.show_ip_bgp: + show_bgp_list = list() + item = show_list.get("item") + inv_name = None + if item is not None: + inv_name = item.get("inv_name") + msg = show_list.get("msg") + if msg is not None: + result = msg.get("result") + if result is not None: + for sub_result in result: + bgp_dict = {} + rpc_reply = sub_result.get("rpc-reply") + if rpc_reply is not None: + bulk = rpc_reply.get("bulk") + if bulk is not None: + data = bulk.get("data") + if data is not None and "peer-oper" in data: + peer_oper = data.get("peer-oper") + if peer_oper is not None and "remote-address" in peer_oper: + bgp_dict["remote_address"] = peer_oper.get( + "remote-address") + bgp_dict["bgp-state"] = peer_oper.get( + "bgp-state") + show_bgp_list.append(bgp_dict) + show_bgp_dict[inv_name] = show_bgp_list + return show_bgp_dict + + def parse_ip_intf_output(self): + show_ip_dict = {} + for show_list in self.show_ip_intf_brief: + show_ip_list = list() + item = show_list.get("item") + inv_name = None + if item is not None: + inv_name = item.get("inv_name") + msg = show_list.get("msg") + if msg is not None: + result = msg.get("result") + if result is not None: + for sub_result in result: + rpc_reply = sub_result.get("rpc-reply") + if rpc_reply is not None: + bulk = rpc_reply.get("bulk") + if bulk is not None: + data = bulk.get("data") + if data is not None: + sub_val = data.get("interface") + if sub_val is not None: + for val in sub_val: + intf_dict = {} + if "ipv4-info" in val: + ipv4_info = val.get( + "ipv4-info") + if ipv4_info is not None and "addr" in ipv4_info: + intf_dict["address"] = ipv4_info.get( + "addr") + intf_dict["if_name"] = val.get( + "name") + intf_dict["oper_status"] = val.get( + "oper-status") + if bool(intf_dict): + show_ip_list.append(intf_dict) + show_ip_dict[inv_name] = show_ip_list + return show_ip_dict + + def get_intf_info_per_ip(self, intf_dict): + final_intf_dict = {} + for key1, value1 in intf_dict.items(): + intf_list = value1 + intf_dict = {} + for ip in intf_list: + intf_info = {} + ip_address = ip.get("address") + intf_address = ip_address.split('/') + intf_ip = intf_address[0] + intf_info["if_name"] = ip.get("if_name") + intf_info["oper_status"] = ip.get("oper_status") + intf_info["dest_switch"] = key1 + intf_dict[intf_ip] = intf_info + if bool(intf_dict): + final_intf_dict[key1] = intf_dict + return final_intf_dict + + def get_intf_info_from_neighbor_ip( + self, source_switch, neighbor_ip, intf_dict): + final_intf_info = {} + intf_dict_per_ip = self.get_intf_info_per_ip(intf_dict) + for key, value in intf_dict_per_ip.items(): + switch_name = key + if source_switch == switch_name: + continue + intf_info = value.get(neighbor_ip) + if intf_info is None: + continue + final_intf_info = intf_info + break + return final_intf_info + + def get_bgp_final_nbr_list(self, bgp_dict, intf_dict): + actual_bgp_dict = {} + final_bgp_dict = {} + for key, value in bgp_dict.items(): + actual_bgp_list = list() + bgp_list = value + source_switch = key + for bgp in bgp_list: + final_dict = {} + bgp_state = bgp.get("bgp-state") + remote_address = bgp.get("remote_address") + reason = "neighbor config missing" + error_type = "config_missing" + intf_info = self.get_intf_info_from_neighbor_ip( + source_switch, remote_address, intf_dict) + if bool(intf_info): + dest_switch = intf_info.get("dest_switch") + remote_port = intf_info.get("if_name") + oper_status = intf_info.get("oper_status") + final_dict["source_switch"] = source_switch + final_dict["bgp_neighbor"] = remote_address + final_dict["bgp_state"] = bgp_state + if bgp_state != "established": + if oper_status != "up": + reason = ( + "remote port {0} {1} is {2}" .format( + dest_switch, remote_port, oper_status)) + error_type = "remote_port_down" + final_dict["error_type"] = error_type + final_dict["possible_reason"] = reason + else: + final_dict["source_switch"] = source_switch + final_dict["bgp_neighbor"] = remote_address + final_dict["bgp_state"] = bgp_state + final_dict["error_type"] = error_type + final_dict["possible_reason"] = reason + actual_bgp_list.append(final_dict) + actual_bgp_dict[source_switch] = actual_bgp_list + # check actual with intended neighbor to display the result + intended_list = list() + for intended_bgp_neighbor in self.bgp_neighbors: + planned_source_switch = intended_bgp_neighbor.get("source_switch") + planned_nbr_list = intended_bgp_neighbor.get("neighbor_ip") + actual_nbr_list = actual_bgp_dict.get(planned_source_switch) + if planned_nbr_list is None or actual_nbr_list is None: + continue + for actual_nbr in actual_nbr_list: + actual_source_switch = actual_nbr.get("source_switch") + actual_bgp_neighbor = actual_nbr.get("bgp_neighbor") + actual_bgp_state = actual_nbr.get("bgp_state") + if actual_bgp_neighbor in planned_nbr_list: + # Don't add established neighbor in result + if actual_bgp_state != "established": + intended_list.append(actual_nbr) + planned_nbr_list.remove(actual_bgp_neighbor) + else: + reason = "neighbor {0} is not an intended, please add this neighbor in the intended_bgp_neighbors".format( + actual_bgp_neighbor) + actual_nbr["bgp_neighbor"] = "-" + actual_nbr["error_type"] = "not_an_intended_neighbor" + actual_nbr["possible_reason"] = reason + intended_list.append(actual_nbr) + # Add the missed planned info which are not present in actual + # results + for planned_nbr in planned_nbr_list: + reason = "neighbor config missing" + temp_dict = {} + temp_dict["source_switch"] = planned_source_switch + temp_dict["bgp_neighbor"] = planned_nbr + temp_dict["error_type"] = "config_missing" + temp_dict["possible_reason"] = reason + intended_list.append(temp_dict) + return intended_list + + def perform_action(self): + try: + bgp_dict = self.parse_bgp_output() + intf_dict = self.parse_ip_intf_output() + final_bgp_list = self.get_bgp_final_nbr_list(bgp_dict, intf_dict) + self.exit_msg.update({"results": final_bgp_list}) + self.module.exit_json(changed=False, msg=self.exit_msg) + except Exception as e: + self.module.fail_json( + msg=to_native(e), + exception=traceback.format_exc()) + + +def main(): + module_instance = BgpValidation() + module_instance.perform_action() + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/mtu_validate.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/mtu_validate.py new file mode 100644 index 00000000..f0a9620d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/mtu_validate.py @@ -0,0 +1,220 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__copyright__ = "(c) 2020 Dell Inc. or its subsidiaries. All rights reserved." + +__metaclass__ = type + +DOCUMENTATION = ''' +module: mtu_validate +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Validate the MTU value for lldp neighbors +description: + + - Get the wiring info using lldp output and show system network summary. + +options: + show_lldp_neighbors_list: + description: + - show lldp neighbor output + type: 'list' + required: True + show_system_network_summary: + description: + - show system network summary output + type: 'list' + required: True + show_ip_intf_brief: + description: + - show ip intf brief + type: 'list' + required: True +''' +EXAMPLES = ''' +Copy below YAML into a playbook (e.g. play.yml) and run follows: + +#$ ansible-playbook -i inv play.yml +name: show mtu mismatch info +hosts: localhost +connection: local +gather_facts: False +tasks: + - name: "Get Dell EMC OS10 MTU mismatch info" + os10_command: + commands: + - command: "show lldp neighbors" + - command: "show ip interface brief | display-xml" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_lldp + - set_fact: + output: "{{ output|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, + 'stdout_show_lldp': item.stdout.0, 'stdout_show_ip': item.stdout.1 }] }}" + loop: "{{ show_lldp.results }}" + - debug: var=output + - local_action: copy content={{ output }} dest=show1 + - name: call lib to convert ip interface info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.stdout_show_ip }}" + with_items: "{{ output }}" + register: show_ip_intf_list + - local_action: copy content={{ show_ip_intf_list }} dest=show_ip + + - name: "Get Dell EMC OS10 Show system" + import_role: + name: os10_fabric_summary + register: show_system_network_summary + - debug: var=show_system_network_summary + - name: call lib to process + mtu_validate: + show_lldp_neighbors_list: "{{ output }}" + show_system_network_summary: "{{ show_system_network_summary.msg.results }}" + show_ip_intf_brief: "{{ show_ip_intf_list.results }}" +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_native +from collections import OrderedDict +import re +import traceback + + +class MtuValidation(object): + def __init__(self): + self.module = AnsibleModule(argument_spec=self.get_fields()) + self.show_lldp_neighbors_list = self.module.params['show_lldp_neighbors_list'] + self.show_system_network_summary = self.module.params['show_system_network_summary'] + self.show_ip_intf_brief = self.module.params['show_ip_intf_brief'] + self.exit_msg = OrderedDict() + + def get_fields(self): + spec_fields = { + 'show_lldp_neighbors_list': { + 'type': 'list', + 'required': True + }, + 'show_system_network_summary': { + 'type': 'list', + 'required': True + }, + 'show_ip_intf_brief': { + 'type': 'list', + 'required': True + } + } + return spec_fields + + def get_int_mtu(self, spine, port): + for show_list in self.show_ip_intf_brief: + inv_name = show_list["item"]["inv_name"] + if spine != inv_name: + continue + value = show_list["msg"]["result"] + for data in value: + intf_list = data["rpc-reply"]["bulk"]["data"]["interface"] + for val in intf_list: + intf_name = val["name"] + if intf_name == port: + mtu = val["mtu"] + return mtu + return None + + # form actual neighbors per network with help of lldp output and show + # sytem output + def get_actual_neigbor(self, lldp_list): + final_out = list() + for show_system in self.show_system_network_summary: + for lldp in lldp_list: + if show_system["host"] != lldp["host"] and "node-mac" in show_system and "rem_mac" in lldp: + rem_host = show_system["host"] + loc_host = lldp["host"] + # check whether lldp output mac match with system summary + # mac and collect port and host info + dest_switch = show_system["inv_name"] + source_switch = lldp["inv_name"] + lldp_mac = lldp["rem_mac"] + for index, rem_mac in enumerate(lldp_mac): + final_dict = {} + if (str.lower( + show_system["node-mac"])) == (str.lower(rem_mac)): + final_dict["source_switch"] = source_switch + final_dict["dest_switch"] = dest_switch + final_dict["source_port"] = lldp["loc_port"][index] + final_dict["dest_port"] = lldp["rem_port"][index] + source_mtu = self.get_int_mtu( + source_switch, final_dict["source_port"]) + dest_mtu = self.get_int_mtu( + dest_switch, final_dict["dest_port"]) + if source_mtu is not None: + final_dict["source_mtu"] = source_mtu + if dest_mtu is not None: + final_dict["dest_mtu"] = dest_mtu + final_out.append(final_dict) + return final_out + + def parse_lldp_output(self): + nbr_list = list() + for cli in self.show_lldp_neighbors_list: + out_dict = {} + loc_port = list() + rem_port = list() + rem_mac = list() + for key, value in cli.items(): + if key == "host": + out_dict[key] = value + if key == "inv_name": + out_dict[key] = value + if key == "stdout_show_lldp": + output = str(value) + lldp_regexp = r"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)" + lines = output.splitlines() + for line in lines: + if "Loc PortID" in line: + continue + match = re.match(lldp_regexp, line) + if match: + val = match.groups() + loc_port.append(val[0]) + rem_port.append(val[2]) + rem_mac.append(val[3]) + out_dict["loc_port"] = loc_port + out_dict["rem_port"] = rem_port + out_dict["rem_mac"] = rem_mac + nbr_list.append(out_dict) + return nbr_list + + def get_mtu_mismatch_info(self, nbr_list): + mtu_list = list() + for nbr in nbr_list: + if nbr["source_mtu"] != nbr["dest_mtu"]: + nbr["error"] = "mismatch" + mtu_list.append(nbr) + return mtu_list + + def perform_action(self): + try: + lldp_list = self.parse_lldp_output() + actual_nbr = self.get_actual_neigbor(lldp_list) + mtu_mismatch_list = self.get_mtu_mismatch_info(actual_nbr) + if len(mtu_mismatch_list) > 0: + self.exit_msg.update({"results": mtu_mismatch_list}) + else: + self.exit_msg.update( + {"results": "There is no MTU mistmatch between neighbors"}) + self.module.exit_json(changed=False, msg=self.exit_msg) + except Exception as e: + self.module.fail_json( + msg=to_native(e), + exception=traceback.format_exc()) + + +def main(): + module_instance = MtuValidation() + module_instance.perform_action() + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_command.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_command.py new file mode 100644 index 00000000..a99f1a67 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_command.py @@ -0,0 +1,229 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: (c) 2020, Peter Sprygada <psprygada@ansible.com> +# Copyright: (c) 2020, Dell Inc. +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + + +DOCUMENTATION = """ +--- +module: os10_command +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Run commands on devices running Dell EMC SmartFabric OS10 +description: + - Sends arbitrary commands to a OS10 device and returns the results + read from the device. This module includes an + argument that will cause the module to wait for a specific condition + before returning or timing out if the condition is not met. + - This module does not support running commands in configuration mode. + Please use M(dellemc.os10.os10_config) to configure OS10 devices. +extends_documentation_fragment: dellemc.os10.os10 +options: + commands: + description: + - List of commands to send to the remote OS10 device over the + configured provider. The resulting output from the command + is returned. If the I(wait_for) argument is provided, the + module is not returned until the condition is satisfied or + the number of retries has expired. + type: list + required: true + wait_for: + description: + - List of conditions to evaluate against the output of the + command. The task will wait for each condition to be true + before moving forward. If the conditional is not true + within the configured number of I(retries), the task fails. + See examples. + type: list + elements: str + match: + description: + - The I(match) argument is used in conjunction with the + I(wait_for) argument to specify the match policy. Valid + values are C(all) or C(any). If the value is set to C(all) + then all conditionals in the wait_for must be satisfied. If + the value is set to C(any) then only one of the values must be + satisfied. + type: str + default: all + choices: [ all, any ] + retries: + description: + - Specifies the number of retries a command should be tried + before it is considered failed. The command is run on the + target device every retry and evaluated against the + I(wait_for) conditions. + type: int + default: 10 + interval: + description: + - Configures the interval in seconds to wait between retries + of the command. If the command does not pass the specified + conditions, the interval indicates how long to wait before + trying the command again. + type: int + default: 1 +""" + +EXAMPLES = """ +tasks: + - name: run show version on remote devices + os10_command: + commands: show version + + - name: run show version and check to see if output contains OS10 + os10_command: + commands: show version + wait_for: result[0] contains OS10 + + - name: run multiple commands on remote nodes + os10_command: + commands: + - show version + - show interface + + - name: run multiple commands and evaluate the output + os10_command: + commands: + - show version + - show interface + wait_for: + - result[0] contains OS10 + - result[1] contains Ethernet +""" + +RETURN = """ +stdout: + description: The set of responses from the commands + returned: always apart from low level errors (such as action plugin) + type: list + sample: ['...', '...'] +stdout_lines: + description: The value of stdout split into a list + returned: always apart from low level errors (such as action plugin) + type: list + sample: [['...', '...'], ['...'], ['...']] +failed_conditions: + description: The list of conditionals that have failed + returned: failed + type: list + sample: ['...', '...'] +warnings: + description: The list of warnings (if any) generated by module based on arguments + returned: always + type: list + sample: ['...', '...'] +""" +import time + +from ansible.module_utils.basic import AnsibleModule +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import run_commands +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import os10_argument_spec, check_args +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ComplexList +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.parsing import Conditional +from ansible.module_utils.six import string_types + + +def to_lines(stdout): + for item in stdout: + if isinstance(item, string_types): + item = str(item).split('\n') + yield item + + +def parse_commands(module, warnings): + command = ComplexList(dict( + command=dict(key=True), + prompt=dict(), + answer=dict() + ), module) + commands = command(module.params['commands']) + for index, item in enumerate(commands): + if module.check_mode and not item['command'].startswith('show'): + warnings.append( + 'only show commands are supported when using check mode, not ' + 'executing `%s`' % item['command'] + ) + elif item['command'].startswith('conf'): + module.fail_json( + msg='os10_command does not support running config mode ' + 'commands. Please use os10_config instead' + ) + return commands + + +def main(): + """main entry point for module execution + """ + argument_spec = dict( + # { command: <str>, prompt: <str>, response: <str> } + commands=dict(type='list', required=True), + + wait_for=dict(type='list', elements='str'), + match=dict(default='all', choices=['all', 'any']), + + retries=dict(default=10, type='int'), + interval=dict(default=1, type='int') + ) + + argument_spec.update(os10_argument_spec) + + module = AnsibleModule(argument_spec=argument_spec, + supports_check_mode=True) + + result = {'changed': False} + + warnings = list() + check_args(module, warnings) + commands = parse_commands(module, warnings) + result['warnings'] = warnings + + wait_for = module.params['wait_for'] or list() + conditionals = [Conditional(c) for c in wait_for] + + retries = module.params['retries'] + interval = module.params['interval'] + match = module.params['match'] + + while retries > 0: + responses = run_commands(module, commands) + + for item in list(conditionals): + if item(responses): + if match == 'any': + conditionals = list() + break + conditionals.remove(item) + + if not conditionals: + break + + time.sleep(interval) + retries -= 1 + + if conditionals: + failed_conditions = [item.raw for item in conditionals] + msg = 'One or more conditional statements have not been satisfied' + module.fail_json(msg=msg, failed_conditions=failed_conditions) + + result.update({ + 'changed': False, + 'stdout': responses, + 'stdout_lines': list(to_lines(responses)) + }) + + module.exit_json(**result) + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_command.py~ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_command.py~ new file mode 100644 index 00000000..207707f1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_command.py~ @@ -0,0 +1,229 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: (c) 2020, Peter Sprygada <psprygada@ansible.com> +# Copyright: (c) 2020, Dell Inc. +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + + +DOCUMENTATION = """ +--- +module: os10_command +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Run commands on devices running Dell EMC SmartFabric OS10 +description: + - Sends arbitrary commands to a OS10 device and returns the results + read from the device. This module includes an + argument that will cause the module to wait for a specific condition + before returning or timing out if the condition is not met. + - This module does not support running commands in configuration mode. + Please use M(dellemc.os10.os10_config) to configure OS10 devices. +extends_documentation_fragment: dellemc.os10.os10 +options: + commands: + description: + - List of commands to send to the remote OS10 device over the + configured provider. The resulting output from the command + is returned. If the I(wait_for) argument is provided, the + module is not returned until the condition is satisfied or + the number of retries has expired. + type: list + required: true + wait_for: + description: + - List of conditions to evaluate against the output of the + command. The task will wait for each condition to be true + before moving forward. If the conditional is not true + within the configured number of I(retries), the task fails. + See examples. + type: list + elements: str + match: + description: + - The I(match) argument is used in conjunction with the + I(wait_for) argument to specify the match policy. Valid + values are C(all) or C(any). If the value is set to C(all) + then all conditionals in the wait_for must be satisfied. If + the value is set to C(any) then only one of the values must be + satisfied. + type: str + default: all + choices: [ all, any ] + retries: + description: + - Specifies the number of retries a command should be tried + before it is considered failed. The command is run on the + target device every retry and evaluated against the + I(wait_for) conditions. + type: int + default: 10 + interval: + description: + - Configures the interval in seconds to wait between retries + of the command. If the command does not pass the specified + conditions, the interval indicates how long to wait before + trying the command again. + type: int + default: 1 +""" + +EXAMPLES = """ +tasks: + - name: run show version on remote devices + os10_command: + commands: show version + + - name: run show version and check to see if output contains OS10 + os10_command: + commands: show version + wait_for: result[0] contains OS10 + + - name: run multiple commands on remote nodes + os10_command: + commands: + - show version + - show interface + + - name: run multiple commands and evaluate the output + os10_command: + commands: + - show version + - show interface + wait_for: + - result[0] contains OS10 + - result[1] contains Ethernet +""" + +RETURN = """ +stdout: + description: The set of responses from the commands + returned: always apart from low level errors (such as action plugin) + type: list + sample: ['...', '...'] +stdout_lines: + description: The value of stdout split into a list + returned: always apart from low level errors (such as action plugin) + type: list + sample: [['...', '...'], ['...'], ['...']] +failed_conditions: + description: The list of conditionals that have failed + returned: failed + type: list + sample: ['...', '...'] +warnings: + description: The list of warnings (if any) generated by module based on arguments + returned: always + type: list + sample: ['...', '...'] +""" +import time + +from ansible.module_utils.basic import AnsibleModule +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import run_commands +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import os10_argument_spec, check_args +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ComplexList +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.parsing import Conditional +from ansible.module_utils.six import string_types + + +def to_lines(stdout): + for item in stdout: + if isinstance(item, string_types): + item = str(item).split('\n') + yield item + + +def parse_commands(module, warnings): + command = ComplexList(dict( + command=dict(key=True), + prompt=dict(), + answer=dict() + ), module) + commands = command(module.params['commands']) + for index, item in enumerate(commands): + if module.check_mode and not item['command'].startswith('show'): + warnings.append( + 'only show commands are supported when using check mode, not ' + 'executing `%s`' % item['command'] + ) + elif item['command'].startswith('conf'): + module.fail_json( + msg='os10_command does not support running config mode ' + 'commands. Please use os10_config instead' + ) + return commands + + +def main(): + """main entry point for module execution + """ + argument_spec = dict( + # { command: <str>, prompt: <str>, response: <str> } + commands=dict(type='list', elements='str', required=True), + + wait_for=dict(type='list', elements='str'), + match=dict(default='all', choices=['all', 'any']), + + retries=dict(default=10, type='int'), + interval=dict(default=1, type='int') + ) + + argument_spec.update(os10_argument_spec) + + module = AnsibleModule(argument_spec=argument_spec, + supports_check_mode=True) + + result = {'changed': False} + + warnings = list() + check_args(module, warnings) + commands = parse_commands(module, warnings) + result['warnings'] = warnings + + wait_for = module.params['wait_for'] or list() + conditionals = [Conditional(c) for c in wait_for] + + retries = module.params['retries'] + interval = module.params['interval'] + match = module.params['match'] + + while retries > 0: + responses = run_commands(module, commands) + + for item in list(conditionals): + if item(responses): + if match == 'any': + conditionals = list() + break + conditionals.remove(item) + + if not conditionals: + break + + time.sleep(interval) + retries -= 1 + + if conditionals: + failed_conditions = [item.raw for item in conditionals] + msg = 'One or more conditional statements have not been satisfied' + module.fail_json(msg=msg, failed_conditions=failed_conditions) + + result.update({ + 'changed': False, + 'stdout': responses, + 'stdout_lines': list(to_lines(responses)) + }) + + module.exit_json(**result) + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_config.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_config.py new file mode 100644 index 00000000..925568f1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_config.py @@ -0,0 +1,346 @@ +#!/usr/bin/python +# +# (c) 2020 Peter Sprygada, <psprygada@ansible.com> +# Copyright (c) 2020 Dell Inc. +# +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + + +DOCUMENTATION = """ +--- +module: os10_config +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Manage Dell EMC SmartFabric OS10 configuration sections +description: + - OS10 configurations use a simple block indent file syntax + for segmenting configuration into sections. This module provides + an implementation for working with OS10 configuration sections in + a deterministic way. +extends_documentation_fragment: dellemc.os10.os10 +options: + lines: + description: + - The ordered set of commands that should be configured in the + section. The commands must be the exact same commands as found + in the device running-config. Be sure to note the configuration + command syntax as some commands are automatically modified by the + device config parser. This argument is mutually exclusive with I(src). + type: list + aliases: ['commands'] + parents: + description: + - The ordered set of parents that uniquely identify the section or hierarchy + the commands should be checked against. If the parents argument + is omitted, the commands are checked against the set of top + level or global commands. + type: list + src: + description: + - Specifies the source path to the file that contains the configuration + or configuration template to load. The path to the source file can + either be the full path on the Ansible control host or a relative + path from the playbook or role root directory. This argument is + mutually exclusive with I(lines). + type: path + before: + description: + - The ordered set of commands to push on to the command stack if + a change needs to be made. This allows the playbook designer + the opportunity to perform configuration commands prior to pushing + any changes without affecting how the set of commands are matched + against the system. + type: list + after: + description: + - The ordered set of commands to append to the end of the command + stack if a change needs to be made. Just like with I(before) this + allows the playbook designer to append a set of commands to be + executed after the command set. + type: list + match: + description: + - Instructs the module on the way to perform the matching of + the set of commands against the current device config. If + match is set to I(line), commands are matched line by line. If + match is set to I(strict), command lines are matched with respect + to position. If match is set to I(exact), command lines + must be an equal match. Finally, if match is set to I(none), the + module will not attempt to compare the source configuration with + the running configuration on the remote device. + type: str + default: line + choices: ['line', 'strict', 'exact', 'none'] + replace: + description: + - Instructs the module on the way to perform the configuration + on the device. If the replace argument is set to I(line) then + the modified lines are pushed to the device in configuration + mode. If the replace argument is set to I(block) then the entire + command block is pushed to the device in configuration mode if any + line is not correct. + type: str + default: line + choices: ['line', 'block'] + update: + description: + - The I(update) argument controls how the configuration statements + are processed on the remote device. Valid choices for the I(update) + argument are I(merge) and I(check). When you set this argument to + I(merge), the configuration changes merge with the current + device running configuration. When you set this argument to I(check) + the configuration updates are determined but not actually configured + on the remote device. + type: str + default: merge + choices: ['merge', 'check'] + save: + description: + - The C(save) argument instructs the module to save the running- + config to the startup-config at the conclusion of the module + running. If check mode is specified, this argument is ignored. + type: bool + default: 'no' + config: + description: + - The module, by default, will connect to the remote device and + retrieve the current running-config to use as a base for comparing + against the contents of source. There are times when it is not + desirable to have the task get the current running-config for + every task in a playbook. The I(config) argument allows the + implementer to pass in the configuration to use as the base + config for comparison. + type: str + backup: + description: + - This argument will cause the module to create a full backup of + the current C(running-config) from the remote device before any + changes are made. If the C(backup_options) value is not given, + the backup file is written to the C(backup) folder in the playbook + root directory. If the directory does not exist, it is created. + type: bool + default: 'no' + backup_options: + description: + - This is a dict object containing configurable options related to backup file path. + The value of this option is read only when C(backup) is set to I(yes), if C(backup) is set + to I(no) this option will be silently ignored. + suboptions: + filename: + description: + - The filename to be used to store the backup configuration. If the the filename + is not given it will be generated based on the hostname, current time and date + in format defined by <hostname>_config.<current-date>@<current-time> + type: str + dir_path: + description: + - This option provides the path ending with directory name in which the backup + configuration file will be stored. If the directory does not exist it will be first + created and the filename is either the value of C(filename) or default filename + as described in C(filename) options description. If the path value is not given + in that case a I(backup) directory will be created in the current working directory + and backup configuration will be copied in C(filename) within I(backup) directory. + type: path + type: dict +""" + +EXAMPLES = """ +- os10_config: + lines: ['hostname {{ inventory_hostname }}'] + +- os10_config: + lines: + - 10 permit ip host 1.1.1.1 any log + - 20 permit ip host 2.2.2.2 any log + - 30 permit ip host 3.3.3.3 any log + - 40 permit ip host 4.4.4.4 any log + - 50 permit ip host 5.5.5.5 any log + parents: ['ip access-list test'] + before: ['no ip access-list test'] + match: exact + +- os10_config: + lines: + - 10 permit ip host 1.1.1.1 any log + - 20 permit ip host 2.2.2.2 any log + - 30 permit ip host 3.3.3.3 any log + - 40 permit ip host 4.4.4.4 any log + parents: ['ip access-list test'] + before: ['no ip access-list test'] + replace: block + +- os10_config: + lines: ['hostname {{ inventory_hostname }}'] + backup: yes + backup_options: + filename: backup.cfg + dir_path: /home/user +""" + +RETURN = """ +updates: + description: The set of commands that will be pushed to the remote device. + returned: always + type: list + sample: ['hostname foo', 'router bgp 1', 'router-id 1.1.1.1'] +commands: + description: The set of commands that will be pushed to the remote device + returned: always + type: list + sample: ['hostname foo', 'router bgp 1', 'router-id 1.1.1.1'] +saved: + description: Returns whether the configuration is saved to the startup + configuration or not. + returned: When not check_mode. + type: bool + sample: True +backup_path: + description: The full path to the backup file + returned: when backup is yes + type: str + sample: /playbooks/ansible/backup/os10_config.2016-07-16@22:28:34 +""" +from ansible.module_utils.basic import AnsibleModule +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import get_config, get_sublevel_config +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import os10_argument_spec, check_args +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import load_config, run_commands +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import WARNING_PROMPTS_RE +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import NetworkConfig, dumps + + +def get_candidate(module): + candidate = NetworkConfig(indent=1) + if module.params['src']: + candidate.load(module.params['src']) + elif module.params['lines']: + parents = module.params['parents'] or list() + commands = module.params['lines'][0] + if (isinstance(commands, dict)) and (isinstance((commands['command']), list)): + candidate.add(commands['command'], parents=parents) + elif (isinstance(commands, dict)) and (isinstance((commands['command']), str)): + candidate.add([commands['command']], parents=parents) + else: + candidate.add(module.params['lines'], parents=parents) + return candidate + + +def get_running_config(module): + contents = module.params['config'] + if not contents: + contents = get_config(module) + return contents + + +def main(): + + backup_spec = dict( + filename=dict(), + dir_path=dict(type='path') + ) + argument_spec = dict( + lines=dict(aliases=['commands'], type='list'), + parents=dict(type='list'), + + src=dict(type='path'), + + before=dict(type='list'), + after=dict(type='list'), + + match=dict(default='line', + choices=['line', 'strict', 'exact', 'none']), + replace=dict(default='line', choices=['line', 'block']), + + update=dict(choices=['merge', 'check'], default='merge'), + save=dict(type='bool', default=False), + config=dict(), + backup=dict(type='bool', default=False), + backup_options=dict(type='dict', options=backup_spec) + ) + + argument_spec.update(os10_argument_spec) + + mutually_exclusive = [('lines', 'src')] + + module = AnsibleModule(argument_spec=argument_spec, + mutually_exclusive=mutually_exclusive, + supports_check_mode=True) + + parents = module.params['parents'] or list() + + match = module.params['match'] + replace = module.params['replace'] + + warnings = list() + check_args(module, warnings) + + result = dict(changed=False, saved=False, warnings=warnings) + + if module.params['backup']: + if not module.check_mode: + result['__backup__'] = get_config(module) + + commands = list() + candidate = get_candidate(module) + + if any((module.params['lines'], module.params['src'])): + if match != 'none': + config = get_running_config(module) + if parents: + contents = get_sublevel_config(config, module) + config = NetworkConfig(contents=contents, indent=1) + else: + config = NetworkConfig(contents=config, indent=1) + configobjs = candidate.difference(config, match=match, replace=replace) + else: + configobjs = candidate.items + + if configobjs: + commands = dumps(configobjs, 'commands') + if ((isinstance((module.params['lines']), list)) and + (isinstance((module.params['lines'][0]), dict)) and + (set(['prompt', 'answer']).issubset(module.params['lines'][0]))): + + cmd = {'command': commands, + 'prompt': module.params['lines'][0]['prompt'], + 'answer': module.params['lines'][0]['answer']} + commands = [module.jsonify(cmd)] + else: + commands = commands.split('\n') + + if module.params['before']: + commands[:0] = module.params['before'] + + if module.params['after']: + commands.extend(module.params['after']) + + if not module.check_mode and module.params['update'] == 'merge': + load_config(module, commands) + + result['changed'] = True + result['commands'] = commands + result['updates'] = commands + + if module.params['save']: + result['changed'] = True + if not module.check_mode: + cmd = {r'command': 'copy running-config startup-config', + r'prompt': r'\[confirm yes/no\]:\s?$', 'answer': 'yes'} + run_commands(module, [cmd]) + result['saved'] = True + else: + module.warn('Skipping command `copy running-config startup-config`' + 'due to check_mode. Configuration not copied to ' + 'non-volatile storage') + + module.exit_json(**result) + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_facts.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_facts.py new file mode 100644 index 00000000..5e55557c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/os10_facts.py @@ -0,0 +1,505 @@ +#!/usr/bin/python +# +# (c) 2020 Peter Sprygada, <psprygada@ansible.com> +# Copyright (c) 2020 Dell Inc. +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + + +DOCUMENTATION = """ +--- +module: os10_facts +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Collect facts from devices running Dell EMC SmartFabric OS10 +description: + - Collects a base set of device facts from a remote device that + is running OS10. This module prepends all of the + base network fact keys with C(ansible_net_<fact>). The facts + module will always collect a base set of facts from the device + and can enable or disable collection of additional facts. +extends_documentation_fragment: dellemc.os10.os10 +options: + gather_subset: + description: + - When supplied, this argument will restrict the facts collected + to a given subset. Possible values for this argument include + all, hardware, config, and interfaces. Can specify a list of + values to include a larger subset. Values can also be used + with an initial C(M(!)) to specify that a specific subset should + not be collected. + type: list + default: [ '!config' ] +""" + +EXAMPLES = """ +# Collect all facts from the device +- os10_facts: + gather_subset: all + +# Collect only the config and default facts +- os10_facts: + gather_subset: + - config + +# Do not collect hardware facts +- os10_facts: + gather_subset: + - "!hardware" +""" + +RETURN = """ +ansible_net_gather_subset: + description: The list of fact subsets collected from the device + returned: always + type: list + +# default +ansible_net_name: + description: The name of the OS that is running. + returned: Always. + type: str +ansible_net_version: + description: The operating system version running on the remote device + returned: always + type: str +ansible_net_servicetag: + description: The service tag number of the remote device. + returned: always + type: str +ansible_net_model: + description: The model name returned from the device. + returned: always + type: str +ansible_net_hostname: + description: The configured hostname of the device + returned: always + type: str + +# hardware +ansible_net_cpu_arch: + description: CPU Architecture of the remote device. + returned: when hardware is configured + type: str +ansible_net_memfree_mb: + description: The available free memory on the remote device in Mb + returned: when hardware is configured + type: int +ansible_net_memtotal_mb: + description: The total memory on the remote device in Mb + returned: when hardware is configured + type: int + +# config +ansible_net_config: + description: The current active config from the device + returned: when config is configured + type: str + +# interfaces +ansible_net_all_ipv4_addresses: + description: All IPv4 addresses configured on the device + returned: when interfaces is configured + type: list +ansible_net_all_ipv6_addresses: + description: All IPv6 addresses configured on the device + returned: when interfaces is configured + type: list +ansible_net_interfaces: + description: A hash of all interfaces running on the system + returned: when interfaces is configured + type: dict +ansible_net_neighbors: + description: The list of LLDP neighbors from the remote device + returned: when interfaces is configured + type: dict +""" + +import re + +try: + from lxml import etree as ET +except ImportError: + import xml.etree.ElementTree as ET + +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import run_commands +from ansible_collections.dellemc.os10.plugins.module_utils.network.os10 import os10_argument_spec, check_args +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.six import iteritems + + +class FactsBase(object): + + COMMANDS = [] + + def __init__(self, module): + self.module = module + self.facts = dict() + self.responses = None + + def populate(self): + self.responses = run_commands(self.module, self.COMMANDS, check_rc=False) + + def run(self, cmd): + return run_commands(self.module, cmd, check_rc=False) + + +class Default(FactsBase): + + COMMANDS = [ + 'show version | display-xml', + 'show system | display-xml', + ] + + def populate(self): + super(Default, self).populate() + data = self.responses[0] + xml_data = ET.fromstring(data.encode('utf8')) + + self.facts['name'] = self.parse_name(xml_data) + self.facts['version'] = self.parse_version(xml_data) + self.facts['model'] = self.parse_model(xml_data) + self.facts['hostname'] = self.parse_hostname(xml_data) + + data = self.responses[1] + xml_data = ET.fromstring(data.encode('utf8')) + + self.facts['servicetag'] = self.parse_servicetag(xml_data) + + def parse_name(self, data): + sw_name = data.find('./data/system-sw-state/sw-version/sw-name') + if sw_name is not None: + return sw_name.text + else: + return "" + + def parse_version(self, data): + sw_ver = data.find('./data/system-sw-state/sw-version/sw-version') + if sw_ver is not None: + return sw_ver.text + else: + return "" + + def parse_hostname(self, data): + hostname = data.find('./data/system-state/system-status/hostname') + if hostname is not None: + return hostname.text + else: + return "" + + def parse_model(self, data): + prod_name = data.find('./data/system-sw-state/sw-version/sw-platform') + if prod_name is not None: + return prod_name.text + else: + return "" + + def parse_servicetag(self, data): + svc_tag = data.find('./data/system/node/unit/mfg-info/service-tag') + if svc_tag is not None: + return svc_tag.text + else: + return "" + + +class Hardware(FactsBase): + + COMMANDS = [ + 'show version | display-xml', + 'show processes node-id 1 | grep Mem:' + ] + + def populate(self): + + super(Hardware, self).populate() + data = self.responses[0] + + xml_data = ET.fromstring(data.encode('utf8')) + + self.facts['cpu_arch'] = self.parse_cpu_arch(xml_data) + + data = self.responses[1] + match = self.parse_memory(data) + if match: + self.facts['memtotal_mb'] = int(match[0]) // 1024 + self.facts['memfree_mb'] = int(match[2]) // 1024 + + def parse_cpu_arch(self, data): + cpu_arch = data.find('./data/system-sw-state/sw-version/cpu-arch') + if cpu_arch is not None: + return cpu_arch.text + else: + return "" + + def parse_memory(self, data): + return re.findall(r'(\d+)', data, re.M) + + +class Config(FactsBase): + + COMMANDS = ['show running-config'] + + def populate(self): + super(Config, self).populate() + self.facts['config'] = self.responses[0] + + +class Interfaces(FactsBase): + + COMMANDS = [ + 'show interface | display-xml', + 'show lldp neighbors | display-xml' + ] + + def __init__(self, module): + self.intf_facts = dict() + self.lldp_facts = dict() + super(Interfaces, self).__init__(module) + + def populate(self): + super(Interfaces, self).populate() + self.facts['all_ipv4_addresses'] = list() + self.facts['all_ipv6_addresses'] = list() + + int_show_data = (self.responses[0]).splitlines() + pattern = '?xml version' + data = '' + skip = True + + # The output returns multiple xml trees + # parse them before handling. + for line in int_show_data: + if pattern in line: + if skip is False: + xml_data = ET.fromstring(data.encode('utf8')) + self.populate_interfaces(xml_data) + data = '' + else: + skip = False + + data += line + + if skip is False: + xml_data = ET.fromstring(data.encode('utf8')) + self.populate_interfaces(xml_data) + + self.facts['interfaces'] = self.intf_facts + + lldp_data = (self.responses[1]).splitlines() + data = '' + skip = True + # The output returns multiple xml trees + # parse them before handling. + for line in lldp_data: + if pattern in line: + if skip is False: + xml_data = ET.fromstring(data.encode('utf8')) + self.populate_neighbors(xml_data) + data = '' + else: + skip = False + + data += line + + if skip is False: + xml_data = ET.fromstring(data.encode('utf8')) + self.populate_neighbors(xml_data) + + self.facts['neighbors'] = self.lldp_facts + + def populate_interfaces(self, interfaces): + + for interface in interfaces.findall('./data/interfaces/interface'): + intf = dict() + name = self.parse_item(interface, 'name') + + intf['description'] = self.parse_item(interface, 'description') + intf['duplex'] = self.parse_item(interface, 'duplex') + intf['primary_ipv4'] = self.parse_primary_ipv4(interface) + intf['secondary_ipv4'] = self.parse_secondary_ipv4(interface) + intf['ipv6'] = self.parse_ipv6_address(interface) + intf['mtu'] = self.parse_item(interface, 'mtu') + intf['type'] = self.parse_item(interface, 'type') + + self.intf_facts[name] = intf + + for interface in interfaces.findall('./bulk/data/interface'): + name = self.parse_item(interface, 'name') + try: + intf = self.intf_facts[name] + intf['bandwidth'] = self.parse_item(interface, 'speed') + intf['adminstatus'] = self.parse_item(interface, 'admin-status') + intf['operstatus'] = self.parse_item(interface, 'oper-status') + intf['macaddress'] = self.parse_item(interface, 'phys-address') + except KeyError: + # skip the reserved interfaces + pass + + for interface in interfaces.findall('./data/ports/ports-state/port'): + name = self.parse_item(interface, 'name') + # media-type name interface name format phy-eth 1/1/1 + mediatype = self.parse_item(interface, 'media-type') + + typ, sname = name.split('-eth') + name = "ethernet" + sname + try: + intf = self.intf_facts[name] + intf['mediatype'] = mediatype + except Exception: + # fanout + for subport in range(1, 5): + name = "ethernet" + sname + ":" + str(subport) + try: + intf = self.intf_facts[name] + intf['mediatype'] = mediatype + except Exception: + # valid case to handle 2x50G + pass + + def add_ip_address(self, address, family): + if family == 'ipv4': + self.facts['all_ipv4_addresses'].append(address) + else: + self.facts['all_ipv6_addresses'].append(address) + + def parse_item(self, interface, item): + elem = interface.find(item) + if elem is not None: + return elem.text + else: + return "" + + def parse_primary_ipv4(self, interface): + ipv4 = interface.find('ipv4') + ip_address = "" + if ipv4 is not None: + prim_ipaddr = ipv4.find('./address/primary-addr') + if prim_ipaddr is not None: + ip_address = prim_ipaddr.text + self.add_ip_address(ip_address, 'ipv4') + + return ip_address + + def parse_secondary_ipv4(self, interface): + ipv4 = interface.find('ipv4') + ip_address = "" + if ipv4 is not None: + sec_ipaddr = ipv4.find('./address/secondary-addr') + if sec_ipaddr is not None: + ip_address = sec_ipaddr.text + self.add_ip_address(ip_address, 'ipv4') + + return ip_address + + def parse_ipv6_address(self, interface): + + ip_address = list() + + for addr in interface.findall('./ipv6/ipv6-addresses/address'): + + ipv6_addr = addr.find('./ipv6-address') + + if ipv6_addr is not None: + ip_address.append(ipv6_addr.text) + self.add_ip_address(ipv6_addr.text, 'ipv6') + + return ip_address + + def populate_neighbors(self, interfaces): + for interface in interfaces.findall('./bulk/data/interface'): + name = interface.find('name').text + rem_sys_name = interface.find('./lldp-rem-neighbor-info/info/rem-system-name') + if rem_sys_name is not None: + self.lldp_facts[name] = list() + fact = dict() + fact['host'] = rem_sys_name.text + rem_sys_port = interface.find('./lldp-rem-neighbor-info/info/rem-lldp-port-id') + fact['port'] = rem_sys_port.text + self.lldp_facts[name].append(fact) + + +FACT_SUBSETS = dict( + default=Default, + hardware=Hardware, + interfaces=Interfaces, + config=Config, +) + +VALID_SUBSETS = frozenset(FACT_SUBSETS.keys()) + + +def main(): + """main entry point for module execution + """ + argument_spec = dict( + gather_subset=dict(default=['!config'], type='list') + ) + + argument_spec.update(os10_argument_spec) + + module = AnsibleModule(argument_spec=argument_spec, + supports_check_mode=True) + + gather_subset = module.params['gather_subset'] + + runable_subsets = set() + exclude_subsets = set() + + for subset in gather_subset: + if subset == 'all': + runable_subsets.update(VALID_SUBSETS) + continue + + if subset.startswith('!'): + subset = subset[1:] + if subset == 'all': + exclude_subsets.update(VALID_SUBSETS) + continue + exclude = True + else: + exclude = False + + if subset not in VALID_SUBSETS: + module.fail_json(msg='Bad subset') + + if exclude: + exclude_subsets.add(subset) + else: + runable_subsets.add(subset) + + if not runable_subsets: + runable_subsets.update(VALID_SUBSETS) + + runable_subsets.difference_update(exclude_subsets) + runable_subsets.add('default') + + facts = dict() + facts['gather_subset'] = list(runable_subsets) + + instances = list() + for key in runable_subsets: + instances.append(FACT_SUBSETS[key](module)) + + for inst in instances: + inst.populate() + facts.update(inst.facts) + + ansible_facts = dict() + for key, value in iteritems(facts): + key = 'ansible_net_%s' % key + ansible_facts[key] = value + + warnings = list() + check_args(module, warnings) + + module.exit_json(ansible_facts=ansible_facts, warnings=warnings) + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/show_system_network_summary.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/show_system_network_summary.py new file mode 100644 index 00000000..9922b9f8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/show_system_network_summary.py @@ -0,0 +1,145 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__copyright__ = "(c) 2020 Dell Inc. or its subsidiaries. All rights reserved." + +__metaclass__ = type + +DOCUMENTATION = ''' +module: show_system_network_summary +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Operations for show_system_network output in json/yaml format. +description: + + - Get the show system inforamtion of a Leaf-Spine. + +options: + output_type: + type: str + description: + - json or yaml + - Default value is json + default: json + required: False + cli_responses: + type: list + required: True + description: + - show system command xml output +''' +EXAMPLES = ''' +Copy below YAML into a playbook (e.g. play.yml) and run as follows: + +#$ ansible-playbook -i inv show.yml +name: show system Configuration +hosts: localhost +connection: local +gather_facts: False +vars: + cli: + username: admin + password: admin +tasks: +- name: "Get Dell EMC OS10 Show system summary" + os10_command: + commands: ['show system | display-xml'] + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_system +- set_fact: + output: "{{ output|default([])+ [{'inv_name': item.item, 'host': item.invocation.module_args.provider.host, 'stdout_show_system': item.stdout}] }}" + loop: "{{ show_system.results }}" +- debug: var=output +- name: "show system network call to lib " + show_system_network_summary: + cli_responses: "{{ output}} " + output_type: "{{ output_method if output_method is defined else 'json' }}" + register: show_system_network_summary +- debug: var=show_system_network_summary +''' + +import re +from ansible_collections.dellemc.os10.plugins.module_utils.network.base_network_show import BaseNetworkShow + + +class ShowSystemNetworkSummary(BaseNetworkShow): + def __init__(self): + BaseNetworkShow.__init__(self) + self.cli_responses = self.module.params['cli_responses'] + self.output_type = self.module.params['output_type'] + self.changed = False + + def get_fields(self): + spec_fields = { + 'cli_responses': { + 'type': 'list', + 'required': True + }, + 'output_type': { + 'type': 'str', + 'default': "json", + 'required': False + } + } + return spec_fields + + def perform_action(self): + out = list() + show_system_summary = self.cli_responses + if len(show_system_summary) > 0: + for item in show_system_summary: + out_dict = {} + host = item.get("host") + inv_name = item.get("inv_name") + show_system_response = item.get("stdout_show_system") + if show_system_response is not None: + result = BaseNetworkShow.xml_to_dict( + self, show_system_response[0]) + rpc_reply = result.get("rpc-reply") + if rpc_reply is not None: + data = rpc_reply.get("data") + if data is not None: + out_dict["host"] = host + out_dict["inv_name"] = inv_name + system_state = data.get("system-state") + if system_state is not None: + system_status = system_state.get( + "system-status") + if system_status is not None: + out_dict["hostname"] = system_status.get( + "hostname") + system = data.get("system") + if system is not None: + node = system.get("node") + if node is not None: + out_dict["node-mac"] = node.get("node-mac") + unit = node.get("unit") + if unit is not None: + out_dict["software-version"] = unit.get( + "software-version") + mfg_info = node.get("mfg-info") + if mfg_info is not None: + out_dict["service-tag"] = mfg_info.get( + "service-tag") + out_dict["device type"] = mfg_info.get( + "product-name") + if bool(out_dict): + out.append(out_dict) + if self.output_type != "json": + self.exit_msg.update( + {"results": (BaseNetworkShow.dict_to_yaml(self, out))}) + else: + self.exit_msg.update({"results": (out)}) + self.module.exit_json(changed=False, msg=self.exit_msg) + + +def main(): + module_instance = ShowSystemNetworkSummary() + module_instance.perform_action() + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/vlt_validate.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/vlt_validate.py new file mode 100644 index 00000000..2042dfe7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/vlt_validate.py @@ -0,0 +1,236 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__copyright__ = "(c) 2020 Dell Inc. or its subsidiaries. All rights reserved." + +__metaclass__ = type + +DOCUMENTATION = ''' +module: vlt_validate +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Validate the vlt info, raise an error if peer is not in up state +description: + + - Troubleshoot the show vlt info and raise an error if peer is not up. + +options: + show_vlt: + description: + - show vlt output + type: 'list' + required: True + show_system_network_summary: + description: + - show system summary output + type: 'list' + required: True + intended_vlt_pairs: + description: + - intended vlt pair intput to verify with actual + type: 'list' + required: True + +''' +EXAMPLES = ''' +Copy below YAML into a playbook (e.g. play.yml) and run as follows: + +#$ ansible-playbook -i inv play.yml +name: show system Configuration +hosts: localhost +connection: local +gather_facts: False +tasks: + - name: "Get Dell EMC OS10 Show run vlt" + os10_command: + commands: + - command: "show running-configuration vlt | grep vlt-domain" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_run_vlt + - set_fact: + output_vlt: "{{ output_vlt|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, + 'stdout_show_vlt': item.stdout.0}] }}" + loop: "{{ show_run_vlt.results }}" + - debug: var=output_vlt + - name: "Get Dell EMC OS10 Show vlt info" + os10_command: + commands: + - command: "show vlt {{ item.stdout_show_vlt.split()[1] }} | display-xml" + provider: "{{ hostvars[item.inv_name].cli }}" + with_items: "{{ output_vlt }}" + register: show_vlt + - set_fact: + vlt_out: "{{ vlt_out|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, 'show_vlt_stdout': item.stdout.0}] }}" + loop: "{{ show_vlt.results }}" + register: vlt_output + - name: call lib to convert vlt info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.show_vlt_stdout }}" + with_items: + - "{{ vlt_out }}" + register: vlt_dict_output + - name: "Get Dell EMC OS10 Show system" + import_role: + name: os10_fabric_summary + register: show_system_network_summary + - name: call lib to process + vlt_validate: + show_vlt : "{{ vlt_dict_output.results }}" + show_system_network_summary: "{{ show_system_network_summary.msg.results }}" + intended_vlt_pairs: "{{ intended_vlt_pairs }}" + register: show_vlt_info + +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_native +from collections import OrderedDict +import traceback + + +class VltValidation(object): + def __init__(self): + self.module = AnsibleModule(argument_spec=self.get_fields()) + self.show_vlt = self.module.params['show_vlt'] + self.show_system_network_summary = self.module.params['show_system_network_summary'] + self.intended_vlt_pairs = self.module.params['intended_vlt_pairs'] + self.exit_msg = OrderedDict() + + def get_fields(self): + spec_fields = { + 'show_vlt': { + 'type': 'list', + 'required': True + }, + 'show_system_network_summary': { + 'type': 'list', + 'required': True + }, + 'intended_vlt_pairs': { + 'type': 'list', + 'required': True + } + } + return spec_fields + + # get switch inv name from mac + def get_switch_inv_name_from_mac(self, mac): + inv_name = None + for show_system in self.show_system_network_summary: + if (str.lower(show_system["node-mac"])) == (str.lower(mac)): + inv_name = show_system.get("inv_name") + break + return inv_name + + def validate_vlt_pairs(self, actual_vlt_dict): + final_out = list() + intended_vlt_list = self.intended_vlt_pairs + for intended_vlt in intended_vlt_list: + intended_primary = intended_vlt.get("primary") + intended_secondary = intended_vlt.get("secondary") + actual_vlt = actual_vlt_dict.get(intended_primary) + temp_dict = {} + if actual_vlt is not None: + actual_secondary = actual_vlt.get("secondary") + secondary_status = actual_vlt.get("secondary_status") + if actual_secondary is not None and intended_secondary != actual_secondary: + temp_dict["error_type"] = "secondary_mismatch" + temp_dict["intended_primary"] = intended_primary + temp_dict["intended_secondary"] = intended_secondary + temp_dict["secondary"] = actual_secondary + reason = "config mismatch as {0} is expected, but the actual secondary is {1} " .format( + intended_secondary, actual_secondary) + temp_dict["possible_reason"] = reason + final_out.append(temp_dict) + else: + if actual_secondary is None: + temp_dict["intended_primary"] = intended_primary + temp_dict["intended_secondary"] = intended_secondary + temp_dict["error_type"] = "peer_missing" + reason = "peer info is not configured or peer interface is down" + temp_dict["possible_reason"] = reason + final_out.append(temp_dict) + elif intended_secondary == actual_secondary and secondary_status != "up": + temp_dict["intended_primary"] = intended_primary + temp_dict["intended_secondary"] = intended_secondary + temp_dict["secondary"] = actual_secondary + temp_dict["error_type"] = "peer_down" + reason = "peer interface is down" + temp_dict["possible_reason"] = reason + final_out.append(temp_dict) + else: + temp_dict["intended_primary"] = intended_primary + temp_dict["intended_secondary"] = intended_secondary + temp_dict["error_type"] = "vlt_config_missing" + temp_dict["possible_reason"] = "vlt is not configured" + final_out.append(temp_dict) + return final_out + + def parse_vlt_output(self): + show_vlt_dict = {} + for show_list in self.show_vlt: + source_switch = None + item = show_list.get("item") + if item is not None: + inv_info = item.get("inv_name") + source_switch = inv_info.get("inv_name") + msg = show_list.get("msg") + if msg is not None: + result = msg.get("result") + for sub_result in result: + vlt_dict = {} + rpc_reply = sub_result.get("rpc-reply") + data = rpc_reply.get("data") + if data is not None: + topo_oper_data = data.get("topology-oper-data") + if topo_oper_data is not None: + vlt_domain = topo_oper_data.get("vlt-domain") + if vlt_domain is not None: + local_info = vlt_domain.get("local-info") + if local_info is not None: + local_role = local_info.get("role") + vlt_dict[local_role] = source_switch + local_mac = local_info.get("system-mac") + vlt_dict[local_role + "_mac"] = local_mac + peer_info = vlt_domain.get("peer-info") + if peer_info is not None: + peer_mac = peer_info.get("system-mac") + peer_switch = self.get_switch_inv_name_from_mac( + peer_mac) + peer_role = peer_info.get("role") + vlt_dict[peer_role] = peer_switch + vlt_dict[peer_role + "_mac"] = peer_mac + peer_status = peer_info.get("peer-status") + vlt_dict[peer_role + + "_status"] = peer_status + if bool(vlt_dict): + primary_switch = vlt_dict.get("primary") + vlt_data = show_vlt_dict.get(primary_switch) + if vlt_data is None: + # update database specific to primary, it helps + # to avoid to skip duplicate data + show_vlt_dict[primary_switch] = vlt_dict + return show_vlt_dict + + def perform_action(self): + try: + actual_vlt_dict = self.parse_vlt_output() + final_out = self.validate_vlt_pairs(actual_vlt_dict) + self.exit_msg.update({"results": final_out}) + self.module.exit_json(changed=False, msg=self.exit_msg) + except Exception as e: + self.module.fail_json( + msg=to_native(e), + exception=traceback.format_exc()) + + +def main(): + module_instance = VltValidation() + module_instance.perform_action() + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/wiring_validate.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/wiring_validate.py new file mode 100644 index 00000000..7947c1b1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/modules/wiring_validate.py @@ -0,0 +1,246 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import (absolute_import, division, print_function) + +__copyright__ = "(c) 2020 Dell Inc. or its subsidiaries. All rights reserved." + +__metaclass__ = type + +DOCUMENTATION = ''' +module: wiring_validate +author: "Senthil Kumar Ganesan (@skg-net)" +short_description: Validate the wiring based on the planned wiring details +description: + + - Get the wiring info using lldp output and show system network summary. + +options: + show_lldp_neighbors_list: + description: + - show lldp neighbor output + type: 'list' + required: True + show_system_network_summary: + description: + - show system network summary output + type: 'list' + required: True + planned_neighbors: + description: + - planned neighbours input from group_var to compare actual + type: 'list' + required: True +''' +EXAMPLES = ''' +Copy below YAML into a playbook (e.g. play.yml) and run as follows: + +#$ ansible-playbook -i inv play.yml +name: show system Configuration +hosts: localhost +connection: local +gather_facts: False +tasks: +- name: "Get Dell EMC OS10 Show lldp" + os10_command: + commands: + - command: "show lldp neighbors" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_lldp +- local_action: copy content={{ show_lldp }} dest=show +- set_fact: + output_lldp: "{{ output_lldp|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, + 'stdout_show_lldp': item.stdout}] }}" + loop: "{{ show_lldp.results }}" +- debug: var=output_lldp +- name: "Get Dell EMC OS10 Show system" + import_role: + name: os10_fabric_summary + register: show_system_network_summary +- debug: var=show_system_network_summary +- name: call lib to process + wiring_validate: + show_lldp_neighbors_list: "{{ output_lldp }}" + show_system_network_summary: "{{ show_system_network_summary.msg.results }}" + planned_neighbors: "{{ intended_neighbors }}" +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils._text import to_native +from collections import OrderedDict +import re +import traceback + + +class WiringValidation(object): + def __init__(self): + self.module = AnsibleModule(argument_spec=self.get_fields()) + self.show_lldp_neighbors_list = self.module.params['show_lldp_neighbors_list'] + self.show_system_network_summary = self.module.params['show_system_network_summary'] + self.planned_neighbors = self.module.params['planned_neighbors'] + self.exit_msg = OrderedDict() + + def get_fields(self): + spec_fields = { + 'show_lldp_neighbors_list': { + 'type': 'list', + 'required': True + }, + 'show_system_network_summary': { + 'type': 'list', + 'required': True + }, + 'planned_neighbors': { + 'type': 'list', + 'required': True + } + } + return spec_fields + + # get switch inv name from mac + def get_switch_inv_name_from_mac(self, mac): + inv_name = None + for show_system in self.show_system_network_summary: + if (str.lower(show_system["node-mac"])) == (str.lower(mac)): + inv_name = show_system.get("inv_name") + break + return inv_name + + # get service tag for switch + + def get_service_tag_and_mac(self): + svc_tag_mac = {} + for show_system in self.show_system_network_summary: + temp_dict = {} + temp_dict["svc-tag"] = show_system.get("service-tag") + temp_dict["node-mac"] = show_system.get("node-mac") + if bool(temp_dict): + svc_tag_mac[show_system["inv_name"]] = temp_dict + return svc_tag_mac + + # form actual neighbors per network with help of lldp output and show + # sytem output + def get_actual_neigbor(self, lldp_list): + final_out = list() + for lldp in lldp_list: + # check whether lldp output mac match with system summary mac and + # collect port and host info + source_switch = lldp["inv_name"] + lldp_mac = lldp["rem_mac"] + for index, rem_mac in enumerate(lldp_mac): + final_dict = {} + final_dict["source_switch"] = source_switch + final_dict["source_port"] = lldp["loc_port"][index] + final_dict["dest_port"] = lldp["rem_port"][index] + dest_switch = self.get_switch_inv_name_from_mac(rem_mac) + if dest_switch is not None: + final_dict["dest_switch"] = dest_switch + else: + final_dict["dest_switch"] = "unknown" + final_out.append(final_dict) + return final_out + + def parse_lldp_output(self): + nbr_list = list() + for item in self.show_lldp_neighbors_list: + out_dict = {} + loc_port = list() + rem_port = list() + rem_mac = list() + out_dict["host"] = item.get("host") + out_dict["inv_name"] = item.get("inv_name") + show_lldp_output = item.get("stdout_show_lldp") + if show_lldp_output is not None: + output = str(show_lldp_output[0]) + lldp_regexp = r"(\S+)\s+(\S+)\s+(\S+)\s+(\S+)" + lines = output.splitlines() + for line in lines: + if "Loc PortID" in line: + continue + match = re.match(lldp_regexp, line) + if match: + val = match.groups() + loc_port.append(val[0]) + rem_port.append(val[2]) + rem_mac.append(val[3]) + out_dict["loc_port"] = loc_port + out_dict["rem_port"] = rem_port + out_dict["rem_mac"] = rem_mac + if bool(out_dict): + nbr_list.append(out_dict) + return nbr_list + + def perform_action(self): + try: + lldp_list = self.parse_lldp_output() + actual_nbr = self.get_actual_neigbor(lldp_list) + svc_tag_mac = self.get_service_tag_and_mac() + # Validate the planned neighbors with actual neighbors + mismatch_list = list() + for planned_neighbors in self.planned_neighbors: + bflag = False + if planned_neighbors not in actual_nbr: + for actual_neighbors in actual_nbr: + if (actual_neighbors["source_switch"] == planned_neighbors["source_switch"] + and actual_neighbors["source_port"] == planned_neighbors["source_port"]): + if (actual_neighbors["dest_switch"] != + planned_neighbors["dest_switch"]): + bflag = True + if (actual_neighbors["dest_switch"] + != "unknown"): + reason = ( + "Destination switch is not an expected value, " + "expected switch: {0},port: {1}; actual switch: {2}(svc-tag:{3}, node_mac:{4}), port: {5}" .format( + planned_neighbors["dest_switch"], + planned_neighbors["dest_port"], + actual_neighbors["dest_switch"], + svc_tag_mac.get( + actual_neighbors["dest_switch"]).get("svc-tag"), + svc_tag_mac.get( + actual_neighbors["dest_switch"]).get("node-mac"), + actual_neighbors["dest_port"])) + else: + reason = ( + "Destination switch is not an expected value, " + "expected switch: {0},port: {1}; actual switch: {2}, port: {3}" .format( + planned_neighbors["dest_switch"], + planned_neighbors["dest_port"], + actual_neighbors["dest_switch"], + actual_neighbors["dest_port"])) + planned_neighbors["reason"] = reason + planned_neighbors["error_type"] = "link-mismatch" + break + if(actual_neighbors["dest_port"] != planned_neighbors["dest_port"]): + bflag = True + reason = ( + "Destination switch port is not an expected value, " + "expected port: {0} actual port: {1}" .format( + planned_neighbors["dest_port"], + actual_neighbors["dest_port"])) + planned_neighbors["reason"] = reason + planned_neighbors["error_type"] = "link-mismatch" + break + if not bflag: + reason = "link is not found for source switch: {0},port: {1}".format( + planned_neighbors["source_switch"], planned_neighbors["source_port"]) + planned_neighbors["reason"] = reason + planned_neighbors["error_type"] = "link-missing" + mismatch_list.append(planned_neighbors) + + self.exit_msg.update({"results": mismatch_list}) + self.module.exit_json(changed=False, msg=self.exit_msg) + except Exception as e: + self.module.fail_json( + msg=to_native(e), + exception=traceback.format_exc()) + + +def main(): + module_instance = WiringValidation() + module_instance.perform_action() + + +if __name__ == '__main__': + main() diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/plugins/terminal/os10.py b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/terminal/os10.py new file mode 100644 index 00000000..c3e1d3ac --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/plugins/terminal/os10.py @@ -0,0 +1,81 @@ +# +# (c) 2020 Red Hat Inc. +# +# This file is part of Ansible +# +# Copyright (c) 2020 Dell Inc. +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. +# +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import re +import json + +from ansible.module_utils._text import to_text, to_bytes +from ansible.plugins.terminal import TerminalBase +from ansible.errors import AnsibleConnectionFailure + + +class TerminalModule(TerminalBase): + + terminal_stdout_re = [ + re.compile(br"[\r\n]?[\w+\-\.:\/\[\]]+(?:\([^\)]+\)){,3}(?:#) ?$"), + re.compile(br"\[\w+\@[\w\-\.]+(?: [^\]])\] ?[>#\$] ?$") + ] + + terminal_stderr_re = [ + re.compile(br"% ?Error"), + re.compile(br"% ?Bad secret"), + re.compile(br"Syntax error:"), + re.compile(br"invalid input", re.I), + re.compile(br"(?:incomplete|ambiguous) command", re.I), + re.compile(br"connection timed out", re.I), + re.compile(br"[^\r\n]+ not found", re.I), + re.compile(br"'[^']' +returned error code: ?\d+"), + ] + + def on_open_shell(self): + try: + self._exec_cli_command(b'terminal length 0') + except AnsibleConnectionFailure: + raise AnsibleConnectionFailure('unable to set terminal parameters') + + def on_become(self, passwd=None): + if self._get_prompt().endswith(b'#'): + return + + cmd = {u'command': u'enable'} + if passwd: + cmd[u'prompt'] = to_text(r"[\r\n]?password: $", errors='surrogate_or_strict') + cmd[u'answer'] = passwd + + try: + self._exec_cli_command(to_bytes(json.dumps(cmd), errors='surrogate_or_strict')) + except AnsibleConnectionFailure: + raise AnsibleConnectionFailure('unable to elevate privilege to enable mode') + + def on_unbecome(self): + prompt = self._get_prompt() + if prompt is None: + # if prompt is None most likely the terminal is hung up at a prompt + return + + if prompt.strip().endswith(b')#'): + self._exec_cli_command(b'end') + self._exec_cli_command(b'disable') + + elif prompt.endswith(b'#'): + self._exec_cli_command(b'disable') diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/README.md new file mode 100644 index 00000000..2c397db7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/README.md @@ -0,0 +1,136 @@ +AAA role +======== + +This role facilitates the configuration of authentication, authorization, and acccounting (AAA). It supports the configuration of RADIUS server, TACACS server, and AAA. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The AAA role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_aaa keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``radius_server`` | dictionary | Configures the RADIUS server (see ``radius_server.*``) | os10 | +| ``radius_server.retransmit`` | integer | Configures the number of retransmissions | os10 | +| ``radius_server.timeout`` | integer | Configures the timeout for retransmissions | os10 | +| ``radius_server.host`` | dictionary | Configures the RADIUS server host (see ``host.*``) | os10 | +| ``host.ip`` | string | Configures the RADIUS server host address | os10 | +| ``host.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``host.auth_port`` | integer | Configures the authentication port (0 to 65535) | os10 | +| ``host.state`` | string: present,absent | Removes the RADIUS server host if set to absent | os10 | +| ``auth.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``tacacs_server`` | dictionary | Configures the TACACS server (see ``tacacs_server.*``) | os10 | +| ``tacacs_server.timeout`` | integer | Configures the timeout for retransmissions | os10 | +| ``tacacs_server.host`` | dictionary | Configures the TACACS server host (see ``host.*``) | os10 | +| ``host.ip`` | string | Configures the TACACS server host address | os10 | +| ``host.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``host.auth_port`` | integer | Configures the authentication port (0 to 65535) | os10 | +| ``host.state`` | string: present,absent | Removes the TACACS server host if set to absent | os10 | +| ``auth.key`` | string (required); 0,7,LINE | Configures the authentication key | os10 | +| ``aaa_accounting`` | dictionary | Configures accounting parameters (see ``aaa_accounting.*``) | os10 | +| ``aaa_accounting.accounting.accounting_type`` | dictionary | Configures accounting type | os10 | +| ``aaa_accounting.accounting.connection_type`` | dictionary | Configures accounting connection type | os10 | +| ``aaa_accounting.accounting.account_mode`` | dictionary | Configures accounting mode | os10 | +| ``aaa_accounting.accounting.server_group`` | dictionary | Configures accounting server group | os10 | +| ``aaa_accounting.accounting.state`` | string: present,absent | Configures/unconfigures accounting parameters | os10 | +| ``aaa_authentication`` | dictionary | Configures authentication parameters (see ``aaa_authentication.*``) | os10 | +| ``aaa_authentication.login`` | dictionary | Configures authentication login (see ``aaa_authentication.login.*``)| os10 | +| ``aaa_authentication.login.console`` | dictionary | Configures authentication method for console login | os10 | +| ``aaa_authentication.login.state`` | string: present,absent | Unconfigures authentication login if set to absent | os10 | +| ``aaa_authentication.login.type`` | dictionary | Configures authentication type | os10 | +| ``aaa_authentication.re_authenticate`` | boolean | Configures re-authenticate by enable if set to true | os10 | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_aaa* role to configure AAA for radius and TACACS servers. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in the *build_dir* path. By default, it is set to false and it writes a simple playbook that only references the *os10_aaa* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_aaa: + radius_server: + retransmit: 5 + timeout: 10 + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + tacacs_server: + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + timeout: 6 + aaa_authentication: + login: + - console: true + type: group radius group tacacs+ local + state: present + re_authenticate: true + aaa_accounting: + accounting: + - accounting_type: commands + connection_type: console + account_mode: start-stop + server_group: group tacacs+ + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_aaa + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/defaults/main.yml new file mode 100644 index 00000000..4f8b5c8c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/defaults/main.yml @@ -0,0 +1,16 @@ +--- +# defaults file for dellemc.os10.os10_aaa +attribute_type: + mandatory: mandatory + on_for_login_auth: on-for-login-auth + include_in_access_req: include-in-access-req + mac: "mac format" + mac_ietf: "mac format ietf" + mac_ietf_lower_case: "mac format ietf lower-case" + mac_ietf_upper_case: "mac format ietf upper-case" + mac_legacy: "mac format legacy" + mac_legacy_lower_case: "mac format legacy lower-case" + mac_legacy_upper_case: "mac format legacy upper-case" + mac_unformatted: "mac format unformatted" + mac_unformatted_lower_case: "mac format unformatted lower-case" + mac_unformatted_upper_case: "mac format unformatted upper-case" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/handlers/main.yml new file mode 100644 index 00000000..0b86ef12 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_aaa diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/meta/main.yml new file mode 100644 index 00000000..54fde54e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/meta/main.yml @@ -0,0 +1,17 @@ +# copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_aaa role facilitates the configuration of Authentication Authorization Acccounting (AAA) attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tasks/main.yml new file mode 100644 index 00000000..77eb07fc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tasks/main.yml @@ -0,0 +1,17 @@ +--- +# tasks file for os10 + + - name: "Generating AAA configuration for os10" + template: + src: os10_aaa.j2 + dest: "{{ build_dir }}/aaa10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning AAA configuration for os10" + os10_config: + src: os10_aaa.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/templates/os10_aaa.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/templates/os10_aaa.j2 new file mode 100644 index 00000000..438c0f8e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/templates/os10_aaa.j2 @@ -0,0 +1,148 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +Purpose: +Configure AAA commands for os10 Devices + +os10_aaa: + radius_server: + retransmit: 5 + timeout: 10 + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + tacacs_server: + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + timeout: 6 + aaa_authentication: + login: + - console: true + type: group radius group tacacs+ local + state: present + re_authenticate: true + aaa_accounting: + accounting: + - accounting_type: commands + connection_type: console + account_mode: start-stop + server_group: group tacacs+ + state: present + +##################################################} +{% if os10_aaa is defined and os10_aaa %} + {% if os10_aaa.radius_server is defined and os10_aaa.radius_server %} + {% set item = os10_aaa.radius_server %} + {% if item.retransmit is defined and item.retransmit %} +radius-server retransmit {{ item.retransmit }} + {% else %} +no radius-server retransmit + {% endif %} + {% if item.timeout is defined and item.timeout %} +radius-server timeout {{ item.timeout }} + {% else %} +no radius-server timeout + {% endif %} + {% if item.host is defined and item.host %} + {% for it in item.host %} + {% if it.ip is defined and it.ip %} + {% if it.state is defined and it.state == "absent" %} +no radius-server host {{ it.ip }} + {% else %} + {% if it.auth_port is defined and it.auth_port %} +radius-server host {{ it.ip }} auth-port {{ it.auth_port }} key {{ it.key }} {{ it.value }} + {% else %} +radius-server host {{ it.ip }} key {{ it.key }} {{ it.value }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% if os10_aaa.tacacs_server is defined and os10_aaa.tacacs_server %} + {% set item = os10_aaa.tacacs_server %} + {% if item.timeout is defined and item.timeout %} +tacacs-server timeout {{ item.timeout }} + {% else %} +no tacacs-server timeout + {% endif %} + {% if item.host is defined and item.host %} + {% for it in item.host %} + {% if it.ip is defined and it.ip %} + {% if item.state is defined and item.state == "absent"%} +no tacacs-server host {{it.ip}} + {% else %} + {% if it.auth_port is defined and it.auth_port %} +tacacs-server host {{it.ip}} auth-port {{it.auth_port}} key {{it.key}} {{it.value}} + {% else %} +tacacs-server host {{it.ip}} key {{it.key}} {{it.value}} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% if os10_aaa.aaa_authentication is defined and os10_aaa.aaa_authentication %} + {% set aaa_list = os10_aaa.aaa_authentication %} + {% if aaa_list.login is defined and aaa_list.login %} + {% for aaa_vars in aaa_list.login %} + {% if aaa_vars.console is defined and aaa_vars.console %} + {% if aaa_vars.state is defined and aaa_vars.state == "absent"%} +no aaa authentication login console + {% else %} + {% if aaa_vars.type is defined and aaa_vars.type %} +aaa authentication login console {{aaa_vars.type}} + {% endif %} + {% endif %} + {% else %} + {% if aaa_vars.state is defined and aaa_vars.state == "absent"%} +no aaa authentication login default + {% else %} + {% if aaa_vars.type is defined and aaa_vars.type %} +aaa authentication login default {{aaa_vars.type}} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% set aaa_vars = os10_aaa.aaa_authentication %} + {% if aaa_vars.re_authenticate is defined %} + {% if aaa_vars.re_authenticate %} +aaa re-authenticate enable + {% else %} +no aaa re-authenticate enable + {% endif %} + {% endif %} + {% endif %} + {% if os10_aaa.aaa_accounting is defined and os10_aaa.aaa_accounting %} + {% set acc_list = os10_aaa.aaa_accounting %} + {% if acc_list.accounting is defined and acc_list.accounting %} + {% for aaa_vars in acc_list.accounting %} + {% if aaa_vars.accounting_type is defined and aaa_vars.accounting_type %} + {% if aaa_vars.accounting_type == "commands" %} + {% set accounting_type = aaa_vars.accounting_type + " all" %} + {% endif %} + {% if aaa_vars.connection_type is defined and aaa_vars.connection_type %} + {% if aaa_vars.state is defined and aaa_vars.state == "absent"%} +no aaa accounting {{accounting_type}} {{aaa_vars.connection_type}} + {% else %} + {% if aaa_vars.account_mode is defined and aaa_vars.account_mode == "none" %} +aaa accounting {{accounting_type}} {{aaa_vars.connection_type}} {{aaa_vars.account_mode}} + {% else %} + {% if aaa_vars.server_group is defined and aaa_vars.server_group %} +aaa accounting {{accounting_type}} {{aaa_vars.connection_type}} {{aaa_vars.account_mode}} {{aaa_vars.server_group}} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/main.os10.yaml new file mode 100644 index 00000000..a845c14d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/main.os10.yaml @@ -0,0 +1,35 @@ +--- +# vars file for dellemc.os10.os10_aaa, +# below gives a sample configuration +# Sample vars for OS10 device +os10_aaa: + radius_server: + retransmit: 5 + timeout: 10 + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + tacacs_server: + host: + - ip: 2001:4898:f0:f09b::1001 + key: 0 + value: "abc" + auth_port: 3 + state: present + timeout: 6 + aaa_authentication: + login: + - console: true + type: group radius group tacacs+ local + state: present + re_authenticate: true + aaa_accounting: + accounting: + - accounting_type: commands + connection_type: console + account_mode: start-stop + server_group: group tacacs+ + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/test.yaml new file mode 100644 index 00000000..b3d685fb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_aaa diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/vars/main.yml new file mode 100644 index 00000000..6854698e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_aaa/vars/main.yml @@ -0,0 +1 @@ +# vars file for dellemc.os10.os10_aaa diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/README.md new file mode 100644 index 00000000..069de9b9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/README.md @@ -0,0 +1,130 @@ +ACL role +======== + +This role facilitates the configuration of an access-control list (ACL). It supports the configuration of different types of ACLs (standard and extended) for both IPv4 and IPv6, and assigns the access-class to the line terminals. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The ACL role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_acl keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``type`` | string (required): ipv4, ipv6, mac | Configures the L3 (IPv4/IPv6) or L2 (MAC) access-control list | os10 | +| ``name`` | string (required) | Configures the name of the access-control list | os10 | +| ``description`` | string | Configures the description about the access-control list | os10 | +| ``remark`` | list | Configures the ACL remark (see ``remark.*``) | os10| +| ``remark.number`` | integer (required) | Configures the remark sequence number | os10 | +| ``remark.description`` | string | Configures the remark description | os10 | +| ``remark.state`` | string: absent,present\* | Deletes the configured remark for an ACL entry if set to absent | os10 | +| ``entries`` | list | Configures ACL rules (see ``seqlist.*``) | os10 | +| ``entries.number`` | integer (required) | Specifies the sequence number of the ACL rule | os10 | +| ``entries.permit`` | boolean (required): true,false | Specifies the rule to permit packets if set to true; specifies to reject packets if set to false | os10 | +| ``entries.protocol`` | string (required) | Specifies the type of protocol or the protocol number to filter | os10 | +| ``entries.source`` | string (required) | Specifies the source address to match in the packets | os10 | +| ``entries.src_condition`` | string | Specifies the condition to filter packets from the source address; ignored if MAC | os10 | +| ``entries.destination`` | string (required) | Specifies the destination address to match in the packets | os10 | +| ``entries.dest_condition`` | string | Specifies the condition to filter packets to the destination address | os10 | +| ``entries.other_options`` | string | Specifies the other options applied on packets (count, log, order, monitor, and so on) | os10 | +| ``entries.state`` | string: absent,present\* | Deletes the rule from the ACL if set to absent | os10 | +| ``stage_ingress`` | list | Configures ingress ACL to the interface (see ``stage_ingress.*``) | os10 | +| ``stage_ingress.name`` | string (required) | Configures the ingress ACL filter to the interface with this interface name | os10 | +| ``stage_ingress.state`` | string: absent,present\* | Deletes the configured ACL from the interface if set to absent | os10 | +| ``stage_egress`` | list | Configures egress ACL to the interface (see ``stage_egress.*``) | os10 | +| ``stage_egress.name`` | string (required) | Configures the egress ACL filter to the interface with this interface name | os10 | +| ``stage_egress.state`` | string: absent,present\* | Deletes the configured egress ACL from the interface if set to absent | os10 | +| ``lineterminal`` | list | Configures the terminal to apply the ACL (see ``lineterminal.*``) | os10 | +| ``lineterminal.state`` | string: absent,present\* | Deletes the access-class from line terminal if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the ACL if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOM`E environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (_*_) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_acl* role to configure different types of ACLs (standard and extended) for both IPv4 and IPv6 and assigns the access-class to the line terminals. The example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, it generates the configuration commands as a .part file in the *build_dir* path. By default it is set to false. It writes a simple playbook that only references the *os10_acl* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_acl: + - name: ssh + type: ipv4 + description: acl + remark: + - description: 1 + number: 3 + state: absent + entries: + - number: 14 + permit: true + protocol: tcp + source: any + src_condition: neq 6 + destination: any + dest_condition: eq 4 + other_options: count + state: present + stage_ingress: + - name: ethernet 1/1/1 + state: absent + - name: ethernet 1/1/2 + state: absent + stage_egress: + - name: ethernet 1/1/3 + state: absent + lineterminal: + state: absent + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_acl + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/defaults/main.yml new file mode 100644 index 00000000..9c7559e3 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_acl diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/handlers/main.yml new file mode 100644 index 00000000..162d4a3f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_acl diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/meta/main.yml new file mode 100644 index 00000000..c354b58f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/meta/main.yml @@ -0,0 +1,17 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_acl role facilitates the configuration of access control list (ACL) attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tasks/main.yml new file mode 100644 index 00000000..ace51340 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating ACL configuration for os10" + template: + src: os10_acl.j2 + dest: "{{ build_dir }}/acl10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning ACL configuration for os10" + os10_config: + src: os10_acl.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/templates/os10_acl.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/templates/os10_acl.j2 new file mode 100644 index 00000000..7d6cb31d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/templates/os10_acl.j2 @@ -0,0 +1,212 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{#################################### + +Purpose: +Configure ACL commands for OS10 devices + +os10_acl: + - name: ssh-only + type: ipv4 + description: acl + remark: + - description: 1 + number: 3 + state: present + entries: + - number: 10 + permit: true + protocol: tcp + source: any + destination: any + src_condition: eq 22 + dest_condition: eq 2 ack + other_options: count + state: present + stage_ingress: + - name: ethernet 1/1/1 + state: present + - name: ethernet 1/0/1 + state: present + stage_egress: + - name: ethernet 1/1/2 + state: present + lineterminal: + state: present + state: present +#####################################} +{% if os10_acl is defined and os10_acl %} + {% for val in os10_acl %} + {% if val.name is defined and val.name %} + {% if val.state is defined and val.state == "absent" %} + {% if val.type is defined and val.type == "ipv4" %} +no ip access-list {{ val.name }} + {% elif val.type is defined and val.type == "ipv6" %} +no ipv6 access-list {{ val.name }} + {% elif val.type is defined and val.type == "mac" %} +no mac access-list {{ val.name }} + {% endif %} + {% else %} + {% if val.type is defined and val.type == "ipv4" %} +ip access-list {{ val.name }} + {% elif val.type is defined and val.type == "ipv6" %} +ipv6 access-list {{ val.name }} + {% elif val.type is defined and val.type == "mac" %} +mac access-list {{ val.name }} + {% endif %} + {% if val.description is defined %} + {% if val.description %} + description "{{ val.description }}" + {% endif %} + {% endif %} + {% if val.remark is defined and val.remark %} + {% for remark in val.remark %} + {% if remark.description is defined and remark.description %} + {% if remark.number is defined and remark.number %} + {% if remark.state is defined and remark.state == "absent" %} + no seq {{ remark.number }} + {% else %} + seq {{ remark.number }} remark "{{ remark.description }}" + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if val.entries is defined and val.entries %} + {% for rule in val.entries %} + {% if rule.number is defined and rule.number %} + {% if rule.state is defined and rule.state == "absent" %} + no seq {{ rule.number }} + {% else %} + {% if rule.permit is defined %} + {% if rule.permit %} + {% set is_permit = "permit" %} + {% else %} + {% set is_permit = "deny" %} + {% endif %} + {% endif %} + {% if val.type is defined and val.type %} + {% if rule.protocol is defined and rule.protocol %} + {% if rule.source is defined and rule.source %} + {% if rule.src_condition is defined and rule.src_condition %} + {% if rule.destination is defined and rule.destination %} + {% if rule.dest_condition is defined and rule.dest_condition %} + {% if rule.other_options is defined and rule.other_options %} + {% set other_options = rule.other_options %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.src_condition }} {{ rule.destination }} {{ rule.dest_condition }} {{ other_options }} + {% else %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.src_condition }} {{ rule.destination }} {{ rule.dest_condition }} + {% endif %} + {% else %} + {% if rule.other_options is defined and rule.other_options %} + {% set other_options = rule.other_options %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.src_condition }} {{ rule.destination }} {{ other_options }} + {% else %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.src_condition }} {{ rule.destination }} + {% endif %} + {% endif %} + {% endif %} + {% else %} + {% if rule.destination is defined and rule.destination %} + {% if rule.dest_condition is defined and rule.dest_condition %} + {% if rule.other_options is defined and rule.other_options %} + {% set other_options = rule.other_options %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.destination }} {{ rule.dest_condition }} {{ other_options }} + {% else %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.destination }} {{ rule.dest_condition }} + {% endif %} + {% else %} + {% if rule.other_options is defined and rule.other_options %} + {% set other_options = rule.other_options %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.destination }} {{ other_options }} + {% else %} + seq {{ rule.number }} {{ is_permit }} {{ rule.protocol }} {{ rule.source }} {{ rule.destination }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if val.lineterminal is defined and val.lineterminal %} + {% if val.type is defined and not val.type == "mac" %} +line vty + {% if val.lineterminal.state is defined and val.lineterminal.state == "absent" %} + {% if val.type == "ipv6" %} + no ipv6 access-class {{ val.name }} + {% elif val.type == "ipv4" %} + no ip access-class {{ val.name }} + {% endif %} + {% else %} + {% if val.type == "ipv6" %} + ipv6 access-class {{ val.name }} + {% elif val.type == "ipv4" %} + ip access-class {{ val.name }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if val.stage_ingress is defined and val.stage_ingress %} + {% for intf in val.stage_ingress %} + {% if intf.state is defined and intf.state == "absent" %} + {% if intf.name is defined and intf.name %} +interface {{ intf.name }} + {% if val.type is defined and val.type == "mac" %} + no mac access-group {{ val.name }} in + {% elif val.type is defined and val.type == "ipv6" %} + no ipv6 access-group {{ val.name }} in + {% else %} + no ip access-group {{ val.name }} in + {% endif %} + {% endif %} + {% else %} + {% if intf.name is defined and intf.name %} +interface {{ intf.name }} + {% if val.type is defined and val.type == "mac" %} + mac access-group {{ val.name }} in + {% elif val.type is defined and val.type == "ipv6" %} + ipv6 access-group {{ val.name }} in + {% else %} + ip access-group {{ val.name }} in + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if val.stage_egress is defined and val.stage_egress %} + {% for intf in val.stage_egress %} + {% if intf.state is defined and intf.state == "absent" %} + {% if intf.name is defined and intf.name %} +interface {{ intf.name }} + {% if val.type is defined and val.type == "mac" %} + no mac access-group {{ val.name }} out + {% elif val.type is defined and val.type == "ipv6" %} + no ipv6 access-group {{ val.name }} out + {% else %} + no ip access-group {{ val.name }} out + {% endif %} + {% endif %} + {% else %} + {% if intf.name is defined and intf.name %} +interface {{ intf.name }} + {% if val.type is defined and val.type == "mac" %} + mac access-group {{ val.name }} out + {% elif val.type is defined and val.type == "ipv6" %} + ipv6 access-group {{ val.name }} out + {% else %} + ip access-group {{ val.name }} out + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/main.os10.yaml new file mode 100644 index 00000000..c3db9c98 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/main.os10.yaml @@ -0,0 +1,33 @@ +--- +# vars file for dellemc.os10.os10_acl, +# below gives a sample configuration +# Sample variables for OS10 device +os10_acl: + - name: ssh + type: ipv4 + description: acl + remark: + - description: 1 + number: 3 + state: absent + entries: + - number: 14 + permit: true + protocol: tcp + source: any + src_condition: neq 6 + destination: any + dest_condition: eq 4 + other_options: count + state: present + stage_ingress: + - name: ethernet 1/1/1 + state: absent + - name: ethernet 1/1/2 + state: absent + stage_egress: + - name: ethernet 1/1/3 + state: absent + lineterminal: + state: absent + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/test.yaml new file mode 100644 index 00000000..653f9d69 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_acl diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/vars/main.yml new file mode 100644 index 00000000..0cd37964 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_acl/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_acl diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/README.md new file mode 100644 index 00000000..f5c3b44b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/README.md @@ -0,0 +1,89 @@ +BFD role +=========== + +This role facilitates the configuration of bidirectional forwarding detection (BFD) global attributes. It specifically enables configuration of BFD interval, min_rx, multiplier, and role. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The BFD role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_bfd keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``bfd`` | dictionary | Configures global BFD parameters (see ``bfd.*``) | os10 | +| ``bfd.interval`` | integer | Configures the time interval in ms (100 to 1000) | os10 | +| ``bfd.min_rx`` | integer | Configures maximum waiting time for receiving control packets from BFD peers in ms (100 to 1000)| os10 | +| ``bfd.multiplier`` | integer | Configure the maximum number of consecutive packets that are not received from BFD peers before session state changes to Down (3 to 50) | os10 | +| ``bfd.role`` | string: passive,active\* | Configure the BFD role | os10 | +| ``bfd.state`` | string: absent,present\* | Removes the global BFD if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +******************** + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_bfd role* to completely set the global BFD attributes. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The bfd role writes a simple playbook that only references the *os10_bfd* role. By including the role, you automatically get access to all of the tasks to configure BFD feature. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_bfd: + bfd: + interval: 100 + min_rx: 100 + multiplier: 3 + role: "active" + state: "present" + +**Simple playbook to setup bfd — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_bfd + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/defaults/main.yml new file mode 100644 index 00000000..4aa9bfbb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_bfd diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/handlers/main.yml new file mode 100644 index 00000000..b490464e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_bfd diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/meta/main.yml new file mode 100644 index 00000000..fce02059 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + role_name: os10_bfd + author: Dell EMC Networking Engineering + description: The os10_bfd role facilitates the configuration of global bfd attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tasks/main.yml new file mode 100644 index 00000000..88ac0eb5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating bfd global configuration for os10" + template: + src: os10_bfd.j2 + dest: "{{ build_dir }}/bfd10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning bfd global configuration for os10" + os10_config: + src: os10_bfd.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/templates/os10_bfd.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/templates/os10_bfd.j2 new file mode 100644 index 00000000..18c94644 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/templates/os10_bfd.j2 @@ -0,0 +1,34 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +#Purpose: +Configure bfd global commands for os10 Devices + +os10_bfd: + bfd: + interval: 200 + min_rx: 200 + multiplier: 3 + role: "active" + state: "present" +###############################################} +{% if os10_bfd is defined and os10_bfd %} + {% set bfd_vars = os10_bfd %} + {% if bfd_vars.bfd is defined and bfd_vars.bfd %} + {% set bfd = bfd_vars.bfd %} + {% if bfd.state is defined and bfd.state == "absent" %} +no bfd enable +no bfd interval + {% else %} +bfd enable + {% if bfd.interval is defined and bfd.min_rx is defined and bfd.multiplier is defined %} + {% if bfd.interval and bfd.min_rx and bfd.multiplier %} + {% if bfd.role is defined and bfd.role %} +bfd interval {{ bfd.interval }} min_rx {{ bfd.min_rx }} multiplier {{ bfd.multiplier }} role {{ bfd.role }} + {% else %} +bfd interval {{ bfd.interval }} min_rx {{ bfd.min_rx }} multiplier {{ bfd.multiplier }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/main.yaml new file mode 100644 index 00000000..844b91c1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/main.yaml @@ -0,0 +1,11 @@ +--- +# vars file for dellemc.os10.os10_bfd, +# below gives a sample configuration +# Sample variables for OS10 device +os10_bfd: + bfd: + interval: 100 + min_rx: 100 + multiplier: 3 + role: "active" + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/test.yaml new file mode 100644 index 00000000..a0de5db5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_bfd diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/vars/main.yml new file mode 100644 index 00000000..781a25c8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bfd/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_bfd diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/README.md new file mode 100644 index 00000000..d0f99600 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/README.md @@ -0,0 +1,364 @@ +BGP role +======== + +This role facilitates the configuration of border gateway protocol (BGP) attributes. It supports the configuration of router ID, networks, neighbors, and maximum path. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The BGP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, it generates the role configuration commands in a file +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_bgp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``asn`` | string (required) | Configures the autonomous system (AS) number of the local BGP instance | os10 | +| ``router_id`` | string | Configures the IP address of the local BGP router instance | os10 | +| ``graceful_restart`` | boolean | Configures graceful restart capability | os10 | +| ``maxpath_ibgp`` | integer | Configures the maximum number of paths to forward packets through iBGP (1 to 64; default 1) | os10 | +| ``maxpath_ebgp`` | integer | Configures the maximum number of paths to forward packets through eBGP (1 to 64; default 1) | os10 | +| ``log_neighbor_changes`` | boolean | Configures log neighbors up/down | os10 | +| ``fast_ext_fallover`` | boolean | Configures a reset session if a link to a directly connected external peer goes down | os10 | +| ``always_compare_med`` | boolean | Configures comparing MED from different neighbors | os10 | +| ``default_loc_pref`` | integer | Configures the default local preference value | os10 | +| ``confederation`` | dictionary | Configures AS confederation parameters (see ``confederation.*``) | os10 | +| ``confederation.identifier`` | integer | Configures routing domain confederation AS | os10 | +| ``confederation.peers`` | string | Configures peer AS in BGP confederation | os10 | +| ``confederation.peers_state`` | string: absent,present\* | Deletes peer AS in BGP confederation if set to absent | os10 | +| ``route_reflector`` | dictionary | Configures route reflection parameters (see ``route_reflector.*``) | os10 | +| ``route_reflector.client_to_client`` | boolean | Configures client-to-client route reflection | os10 | +| ``route_reflector.cluster_id`` | string | Configures the route-reflector cluster-id | os10 | +| ``address_family_ipv4`` | dictionary | Configures IPv4 address family parameters (see ``address_family_ipv4.*``) | os10 | +| ``address_family_ipv4.aggregate_addr`` | list | Configures IPv4 BGP aggregate entries (see ``aggregate_addr.*``) | os10 | +| ``aggregate_addr.ip_and_mask`` | string | Configures the IPv4 BGP aggregate address | os10 | +| ``address_family_ipv4.summary_only`` | boolean | Sets address to summary-only if true | os10 | +| ``aggregate_addr.state`` | string: absent,present\* | Deletes an IPv4 BGP aggregate entry if set to absent | os10 | +| ``address_family_ipv4.dampening`` | dictionary | Configures route-flap dampening (see ``dampening.*``) | os10 | +| ``dampening.value`` | dictionary | Configures dampening values (<half-life time> <start value to reuse> <start value to suppress> <max duration> format; default 15 750 2000 60) | os10 | +| ``dampening.route_map`` | string | Configures the route-map to specify criteria for dampening | os10 | +| ``dampening.state`` | string: absent,present\* | Deletes dampening if set to absent | os10 | +| ``address_family_ipv6`` | dictionary | Configures IPv6 address family parameters (see ``address_family_ipv6.*``) | os10 | +| ``address_family_ipv6.aggregate_addr`` | list | Configures IPv6 BGP aggregate entries (see ``aggregate_addr.*``) | os10 | +| ``aggregate_addr.ip_and_mask`` | string | Configures the IPv6 BGP aggregate address | os10 | +| ``address_family_ipv6.summary_only`` | boolean | Sets address to summary-only if true | os10 | +| ``aggregate_addr.state`` | string: absent,present\* | Deletes an IPv6 BGP aggregate entry if set to absent | os10 | +| ``address_family_ipv6.dampening`` | dictionary | Configures route-flap dampening (see ``dampening.*``) | os10 | +| ``dampening.value`` | dictionary | Configures dampening values (<half-life time> <start value to reuse> <start value to suppress> <max duration> format; default 15 750 2000 60) | os10 | +| ``dampening.route_map`` | string | Configures the route-map to specify criteria for dampening | os10 | +| ``dampening.state`` | string: absent,present\* | Deletes dampening if set to absent | os10 | +| ``best_path`` | list | Configures the default best-path selection (see ``best_path.*``) | os10 | +| ``best_path.as_path`` | string (required): ignore,multipath-relax | Configures the AS path used for the best-path computation | os10 | +| ``best_path.as_path_state`` | string: absent,present\* | Deletes the AS path configuration if set to absent | os10 | +| ``best_path.ignore_router_id`` | boolean: true,false | Ignores the router identifier in best-path computation if set to true | os10 | +| ``best_path.med`` | list | Configures the MED attribute (see ``med.*``) | os10 | +| ``med.attribute`` | string (required): confed,missing-as-best | Configures the MED attribute used for the best-path computation | os10 | +| ``med.state`` | string: absent,present\* | Deletes the MED attribute if set to absent | os10 | +| ``ipv4_network`` | list | Configures an IPv4 BGP networks (see ``ipv4_network.*``) | os10 | +| ``ipv4_network.address`` | string (required) | Configures the IPv4 address of the BGP network (A.B.C.D/E format) | os10 | +| ``ipv4_network.state`` | string: absent,present\* | Deletes an IPv4 BGP network if set to absent | os10 | +| ``ipv6_network`` | list | Configures an IPv6 BGP network (see ``ipv6_network.*``) | os10 | +| ``ipv6_network.address`` | string (required) | Configures the IPv6 address of the BGP network (2001:4898:5808:ffa2::1/126 format) | os10 | +| ``ipv6_network.state`` | string: absent,present\* | Deletes an IPv6 BGP network if set to absent | os10 | +| ``neighbor`` | list | Configures IPv4 BGP neighbors (see ``neighbor.*``) | os10 | +| ``neighbor.ip`` | string (required) | Configures the IPv4 address of the BGP neighbor (10.1.1.1) | os10 | +| ``neighbor.interface`` | string | Configures the BGP neighbor interface details | os10 | +| ``neighbor.name`` | string (required) | Configures the BGP peer-group with this name; supported only when the neighbor is a peer group; mutually exclusive with *neighbor.ip* | os10 | +| ``neighbor.type`` | string (required): ipv4,ipv6,peergroup | Specifies the BGP neighbor type | os10 | +| ``neighbor.auto_peer`` |string: unnumbered-auto | Enable AUTO discovery of neighbors | os10 | +| ``neighbor.password`` | string | Configures the BGP neighbor password | os10 | +| ``neighbor.peergroup_type`` | string (ibgp, ebgp) | Configures the BGP neighbor peer group type| os10 | +| ``neighbor.ebgp_peergroup`` | string | Configures the peer-group to all auto-discovered external neighbors | os10 | +| ``neighbor.ebgp_peergroup_state`` | string: present,absent | Removes the peer group from all auto-discovered external neighbors | os10 | +| ``neighbor.ibgp_peergroup`` | string | Configures the peer-group to all auto-discovered internal neighbors | os10 | +| ``neighbor.ibgp_peergroup_state`` | string: present,absent | Removes the peer group from all auto-discovered internal neighbors | os10 | +| ``neighbor.route_reflector_client`` | boolean | Configures router reflector client on the BGP neighbor | os10 | +| ``neighbor.local_as`` | integer | Configures the local AS for the BGP peer | os10 | +| ``neighbor.weight`` | integer | Configures the default weight for routes from the neighbor interface | os10 | +| ``neighbor.send_community`` | list | Configures the send community attribute to the BGP neighbor (see ``send_community.*``) | os10 | +| ``send_community.type`` | string (required) | Configures the send community attribute to the BGP neighbor | os10 | +| ``send_community.state`` | string: absent,present\* | Deletes the send community attribute of the BGP neighbor if set to absent | os10 | +| ``neighbor.address_family`` | list | Configures address family commands on the BGP neighbor (see ``address_family.*``)| os10 | +| ``address_family.type`` | string (required): ipv4,ipv6,l2vpn | Configures IPv4/IPv6/EVPN address family command mode on the BGP neighbor | os10 | +| ``address_family.activate`` | boolean | Configures activation/deactivation of IPv4/IPv6 address family command mode on the BGP neighbor | os10 | +| ``address_family.sender_loop_detect`` | boolean | Enable/Disable the sender-side loop detection process for a BGP neighbor of IPv4/IPv6/l2vpn address family | os10 | +| ``address_family.allow_as_in`` | integer | Configures the local AS number in the as-path | os10 | +| ``address_family.next_hop_self`` | boolean | Configures disabling the next-hop calculation for the neighbor | os10 | +| ``address_family.soft_reconf`` | boolean | Configures per neighbor soft reconfiguration | os10 | +| ``address_family.add_path`` | string | Configures send or receive multiple paths (value can be 'both <no of paths>', 'send <no of paths>', 'receive')| os10 | +| ``address_family.route_map`` | list | Configures the route-map on the BGP neighbor (see ``route_map.*``) | os10 | +| ``route_map.name`` | string | Configures the name of the route-map for the BGP neighbor | os10 | +| ``route_map.filter`` | string | Configures the filter for routing updates | os10 | +| ``route_map.state`` | string, choices: absent,present* | Deletes the route-map of the BGP neighbor if set to absent | os10 | +| ``address_family.state`` | string: absent,present\* | Deletes the address family command mode of the BGP neighbor if set to absent | os10 | +| ``neighbor.remote_asn`` | string (required) | Configures the remote AS number of the BGP neighbor | os10 | +| ``neighbor.remote_asn_state`` | string: absent,present\* | Deletes the remote AS number from the peer group if set to absent; supported only when *neighbor.type* is "peergroup" | os10 | +| ``neighbor.timer`` | string | Configures neighbor timers; 5 10, where 5 is the keepalive interval and 10 is the holdtime | os10 | +| ``neighbor.peergroup`` | string | Configures neighbor to BGP peer-group (configured peer-group name) | os10 | +| ``neighbor.peergroup_state`` | string: absent,present\* | Deletes the IPv4 BGP neighbor from the peer-group if set to absent | os10 | +| ``neighbor.distribute_list`` | list | Configures the distribute list to filter networks from routing updates (see ``distribute_list.*``) | os10 | +| ``distribute_list.in`` | string | Configures the name of the prefix-list to filter incoming packets | os10 | +| ``distribute_list.in_state`` | string: absent,present\* | Deletes the filter at incoming packets if set to absent | os10 | +| ``distribute_list.out`` | string | Configures the name of the prefix-list to filter outgoing packets | os10 | +| ``distribute_list.out_state`` | string: absent,present\* | Deletes the filter at outgoing packets if set to absent | os10 | +| ``neighbor.admin`` | string: up,down | Configures the administrative state of the neighbor | os10 | +| ``neighbor.adv_interval`` | integer | Configures the advertisement interval of the neighbor | os10 | +| ``neighbor.fall_over`` | string: absent,present | Configures the session fall on peer-route loss | os10 | +| ``neighbor.sender_loop_detect`` | boolean: true,false | Enables/disables the sender-side loop detect for neighbors | os10 | +| ``neighbor.src_loopback`` | integer | Configures the source loopback interface for routing packets | os10 | +| ``neighbor.ebgp_multihop`` | integer | Configures the maximum-hop count value allowed in eBGP neighbors that are not directly connected (default 255) | os10 | +| ``neighbor.subnet`` | string (required) | Configures the passive BGP neighbor to this subnet | os10 | +| ``neighbor.subnet_state`` | string: absent,present\* | Deletes the subnet range set for dynamic IPv4 BGP neighbor if set to absent | os10 | +| ``neighbor.limit`` | integer | Configures maximum dynamic peers count (key is required together with ``neighbor.subnet``) | os10 | +| ``neighbor.bfd`` | boolean | Enables BDF for neighbor | os10 | +| ``neighbor.description`` | string | Configures neighbor description | os10 | +| ``neighbor.state`` | string: absent,present\* | Deletes the IPv4 BGP neighbor if set to absent | os10 | +| ``redistribute`` | list | Configures the redistribute list to get information from other routing protocols (see ``redistribute.*``) | os10 | +| ``redistribute.route_type`` | string (required): static,connected,imported_bgp | Configures the name of the routing protocol to redistribute | os10 | +| ``redistribute.route_map_name`` | string | Configures the route-map to redistribute | os10 | +| ``redistribute.imported_bgp_vrf_name`` | string | Configures the redistribute imported BGP VRF name | os10 | +| ``redistribute.route_map`` | string: absent,present\* | Deletes the route-map to redistribute if set to absent | os10 | +| ``redistribute.address_type`` | string (required): ipv4,ipv6 | Configures the address type of IPv4 or IPv6 routes | os10 | +| ``redistribute.state`` | string: absent,present\* | Deletes the redistribution information if set to absent | os10 | +| ``bfd_all_neighbors`` | dictionary | Enables BFD for all BGP neighbors | os10 | +| ``bfd_all_neighbors.interval`` | integer: 100 to 1000 | Configures time interval for sending control packets to BFD peers in ms| os10 | +| ``bfd_all_neighbors.min_rx`` | integer: 100 to 1000 | Configures maximum waiting time for receiving control packets from BFD peers in ms| os10 | +| ``bfd_all_neighbors.multiplier`` | integer: 3 to 50 | Configures maximum number of consecutive packets that are not received from BFD peers before session state changes to Down| os10 | +| ``bfd_all_neighbors.role``| string: active, passive | Configures BFD role | os10 | +| ``bfd_all_neighbors.state`` |string: absent,present\* | Deletes BFD for all neighbors if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the local router BGP instance if set to absent | os10 | +| ``vrf`` | dictionary | Enables VRF under BGP | os10 | +| ``vrf.name`` | string (Required)| Configures VRF name | os10 | +| ``vrf.router_id`` | string | Configures Router ID for VRF | os10 | +| ``vrf.address_family`` | dictionary | Enables address familyaddress | os10 | +| ``vrf.address_family.type`` | string (required): ipv4,ipv6 | Configures address type IPv4 or IPv6 | os10 | +| ``vrf.redistribute`` | dictionary | Enables redistribute option | os10 | +| ``vrf.redistribute.imported_bgp_vrf_name`` | string | Configures the redistribute imported BGP VRF name | os10 | +| ``vrf.redistribute.route_type`` | string (l2vpn, ospf, bgp, connected, imported_bgp) | Configure redistribute type | os10 | +| ``vrf.redistribute.address_type`` | string (required): ipv4,ipv6 | Configures address type IPv4 or IPv6 | os10 | +| ``vrf.redistribute.state `` | string (required) | Configures the state as present or absent | os10 | +| ``vrf.neighbor`` | list | Configures IPv4 BGP neighbors under VRF | os10 | +| ``vrf.neighbor.admin`` | string: up,down | Configures the administrative state of the neighbor in VRF | os10 | +| ``vrf.neighbor.type`` | string : ipv4,ipv6 | Specifies the BGP neighbor type under VRF | os10 | +| ``vrf.neighbor.ip`` | string | Configures the IP address of the BGP neighbor in VRF | os10 | +| ``vrf.neighbor.interface`` | string | Configures the BGP neighbor interface in VRF | os10 | +| ``vrf.neighbor.remote_asn`` | integer | Configures the remote AS for the BGP peer in VRF | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_bgp* role to configure the BGP network and neighbors. It creates a *hosts* file with the switch details, a *host_vars* file with connection variables and the corresponding role variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. This example writes a simple playbook that only references the *os10_bgp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_bgp: + asn: 12 + router_id: 90.1.1.4 + maxpath_ibgp: 2 + maxpath_ebgp: 2 + graceful_restart: true + log_neighbor_changes: true + fast_ext_fallover: false + always_compare_med: true + default_loc_pref: 1000 + confederation: + identifier: 25 + peers: 23 24 + peers_state: present + route_reflector: + client_to_client: false + cluster_id: 4294967295 + address_family_ipv4: + aggregate_address: + - ip_and_mask: 1.1.1.1/16 + state: present + summary_only: true + dampening: + value: 15 750 2000 60 + route_map: qq + state: present + address_family_ipv6: + aggregate_address: + - ip_and_mask: 2001:4898:5808:ffa0::/126 + state: present + summary_only: true + best_path: + as_path: ignore + as_path_state: present + ignore_router_id: true + med: + - attribute: confed + state: present + ipv4_network: + - address: 101.1.1.0/30 + state: present + ipv6_network: + - address: "2001:4898:5808:ffa0::/126" + state: present + neighbor: + - name: ebgp_pg + type: peergroup + bfd: yes + state: present + - name: ibgp_pg + type: peergroup + weight: 10 + state: present + - type: ipv4 + interface: vlan20 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + description: "U_site2-spine1" + remote_asn: 11 + ip: 192.168.10.1 + peergroup: peer1 + peergroup_state: present + peergroup_type: ibgp + adv_interval: 40 + fall_over: present + password: bgppassword + route_reflector_client: true + src_loopback: 0 + address_family: + - type: ipv4 + activate: true + state: present + send_community: + - type: standard + state: present + state: present + - type: ipv4 + remote_asn: 13 + local_as: 10 + weight: 10 + ip: 192.168.12.3 + address_family: + - type: ipv4 + activate: true + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + add_path: both 3 + route_map: + - name: qq + filter: in + state: present + state: present + state: present + - type: ipv6 + remote_asn: 14 + ip: 2001:4898:5808:ffa2::1 + state: present + - type: ipv6 + description: "U_site2-spine1-Auto Discovered peers" + auto_peer: unnumbered-auto + ebgp_peergroup: ebgp_pg + ebgp_peergroup_state: absent + ibgp_peergroup: ibgp_pg + ibgp_peergroup_state: present + sender_loop_detect: true + password: bgppassword + address_family: + - type: ipv4 + activate: true + sender_loop_detect: true + state: present + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + - type: l2vpn + activate: true + sender_loop_detect: false + state: present + send_community: + - type: standard + state: present + admin: up + state: present + redistribute: + - route_type: static + route_map_name: aa + address_type: ipv4 + state: present + bfd_all_neighbors: + interval: 200 + min_rx: 200 + multiplier: 3 + role: active + state: present + vrf : + name: "GREEN" + address_family: + type: ipv4 + redistribute: + - route_type: l2vpn + address_type: ipv4 + state: present + neighbor: + - type: ipv4 + ip: "172.16.1.1" + remote_asn: 65400 + admin: up + state: present + + +**Simple playbook to configure BGP — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_bgp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/defaults/main.yml new file mode 100644 index 00000000..0b8cbfc8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_bgp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/handlers/main.yml new file mode 100644 index 00000000..b0141ca3 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_bgp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/meta/main.yml new file mode 100644 index 00000000..047c70dc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_bgp role facilitates the configuration of BGP attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tasks/main.yml new file mode 100644 index 00000000..05c44354 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating BGP configuration for os10" + template: + src: os10_bgp.j2 + dest: "{{ build_dir }}/bgp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning BGP configuration for os10" + os10_config: + src: os10_bgp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/templates/os10_bgp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/templates/os10_bgp.j2 new file mode 100644 index 00000000..68689e0f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/templates/os10_bgp.j2 @@ -0,0 +1,832 @@ +#jinja2: trim_blocks: True, lstrip_blocks: True +{########################################### +Purpose: +Configure BGP commands for os10 Devices +os10_bgp: + asn: 12 + router_id: 90.1.1.4 + maxpath_ibgp: 2 + maxpath_ebgp: 2 + graceful_restart: true + log_neighbor_changes: true + fast_ext_fallover: false + always_compare_med: true + default_loc_pref: 1000 + confederation: + identifier: 25 + peers: 23 24 + peers_state: present + route_reflector: + client_to_client: false + cluster_id: 4294967295 + address_family_ipv4: + aggregate_address: + - ip_and_mask: 1.1.1.1/16 + state: present + summary_only: true + dampening: + value: 15 750 2000 60 + route_map: qq + state: present + address_family_ipv6: + aggregate_address: + - ip_and_mask: 2001:4898:5808:ffa0::/126 + state: present + summary_only: true + best_path: + as_path: ignore + as_path_state: present + ignore_router_id: true + med: + - attribute: confed + state: present + ipv4_network: + - address: 101.1.1.0/30 + state: present + ipv6_network: + - address: "2001:4898:5808:ffa0::/126" + state: present + neighbor: + - name: ebgp_pg + type: peergroup + bfd: yes + state: present + - name: ibgp_pg + type: peergroup + weight: 10 + state: present + - type: ipv4 + interface: vlan20 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + description: "U_site2-spine1" + remote_asn: 11 + ip: 192.168.10.1 + peergroup: peer1 + peergroup_state: present + peergroup_type: ibgp + adv_interval: 40 + fall_over: present + password: bgppassword + route_reflector_client: true + src_loopback: 0 + address_family: + - type: ipv4 + activate: true + state: present + send_community: + - type: standard + state: present + state: present + - type: ipv4 + remote_asn: 13 + local_as: 10 + weight: 10 + ip: 192.168.12.3 + address_family: + - type: ipv4 + activate: true + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + add_path: both 3 + route_map: + - name: qq + filter: in + state: present + state: present + state: present + - type: ipv6 + remote_asn: 14 + ip: 2001:4898:5808:ffa2::1 + state: present + - type: ipv6 + description: "U_site2-spine1-Auto Discovered peers" + auto_peer: unnumbered-auto + ebgp_peergroup: ebgp_pg + ebgp_peergroup_state: absent + ibgp_peergroup: ibgp_pg + ibgp_peergroup_state: present + sender_loop_detect: true + password: bgppassword + address_family: + - type: ipv4 + activate: true + sender_loop_detect: true + state: present + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + - type: l2vpn + activate: true + sender_loop_detect: false + state: present + send_community: + - type: standard + state: present + admin: up + state: present + redistribute: + - route_type: static + route_map_name: aa + address_type: ipv4 + state: present + bfd_all_neighbors: + interval: 200 + min_rx: 200 + multiplier: 3 + role: active + state: present + vrf : + name: "GREEN" + address_family: + type: ipv4 + redistribute: + - route_type: l2vpn + address_type: ipv4 + state: present + neighbor: + - type: ipv4 + ip: "172.16.1.1" + remote_asn: 65400 + admin: up + state: present +################################} +{% if os10_bgp is defined and os10_bgp %} +{% set bgp_vars = os10_bgp %} +{% if bgp_vars.state is defined and bgp_vars.state == "absent" %} +no router bgp +{% else %} + {# Add Feature to the switch #} + {% if bgp_vars.asn is defined and bgp_vars.asn %} +router bgp {{ bgp_vars.asn }} + {% if bgp_vars.router_id is defined %} + {% if bgp_vars.router_id %} + router-id {{ bgp_vars.router_id }} + {% else %} + no router-id + {% endif %} + {% endif %} + + {% if bgp_vars.bfd_all_neighbors is defined and bgp_vars.bfd_all_neighbors is defined %} + {% if bgp_vars.bfd_all_neighbors.state is defined and bgp_vars.bfd_all_neighbors.state == "absent"%} + no bfd all-neighbors + {% else %} + {% set bfd_vars = bgp_vars.bfd_all_neighbors %} + {% if bfd_vars.interval is defined and bfd_vars.min_rx is defined and bfd_vars.multiplier is defined %} + bfd all-neighbors interval {{ bfd_vars.interval }} min_rx {{ bfd_vars.min_rx }} multiplier {{ bfd_vars.multiplier }} role {{ bfd_vars.role }} + {% else %} + bfd all-neighbors + {% endif %} + {% endif %} + {% endif %} + + {% if bgp_vars.log_neighbor_changes is defined %} + {% if bgp_vars.log_neighbor_changes %} + log-neighbor-changes + {% else %} + no log-neighbor-changes + {% endif %} + {% endif %} + + {% if bgp_vars.maxpath_ebgp is defined %} + {% if bgp_vars.maxpath_ebgp %} + maximum-paths ebgp {{ bgp_vars.maxpath_ebgp }} + {% else %} + no maximum-paths ebgp + {% endif %} + {% endif %} + + {% if bgp_vars.maxpath_ibgp is defined %} + {% if bgp_vars.maxpath_ibgp %} + maximum-paths ibgp {{ bgp_vars.maxpath_ibgp }} + {% else %} + no maximum-paths ibgp + {% endif %} + {% endif %} + + {% if bgp_vars.graceful_restart is defined %} + {% if bgp_vars.graceful_restart %} + graceful-restart role receiver-only + {% else %} + no graceful-restart role receiver-only + {% endif %} + {% endif %} + + {% if bgp_vars.always_compare_med is defined %} + {% if bgp_vars.always_compare_med %} + always-compare-med + {% else %} + no always-compare-med + {% endif %} + {% endif %} + + {% if bgp_vars.default_loc_pref is defined %} + {% if bgp_vars.default_loc_pref %} + default local-preference {{ bgp_vars.default_loc_pref }} + {% else %} + no default local-preference + {% endif %} + {% endif %} + + {% if bgp_vars.fast_ext_fallover is defined %} + {% if bgp_vars.fast_ext_fallover %} + fast-external-fallover + {% else %} + no fast-external-fallover + {% endif %} + {% endif %} + + {% if bgp_vars.confederation is defined and bgp_vars.confederation %} + {% if bgp_vars.confederation.identifier is defined %} + {% if bgp_vars.confederation.identifier %} + confederation identifier {{ bgp_vars.confederation.identifier }} + {% else %} + no confederation identifier 1 + {% endif %} + {% endif %} + {% if bgp_vars.confederation.peers is defined and bgp_vars.confederation.peers %} + {% if bgp_vars.confederation.peers_state is defined and bgp_vars.confederation.peers_state == "absent" %} + no confederation peers {{ bgp_vars.confederation.peers }} + {% else %} + confederation peers {{ bgp_vars.confederation.peers }} + {% endif %} + {% endif %} + {% endif %} + + {% if bgp_vars.route_reflector is defined and bgp_vars.route_reflector %} + {% if bgp_vars.route_reflector.client_to_client is defined %} + {% if bgp_vars.route_reflector.client_to_client %} + client-to-client reflection + {% else %} + no client-to-client reflection + {% endif %} + {% endif %} + {% if bgp_vars.route_reflector.cluster_id is defined %} + {% if bgp_vars.route_reflector.cluster_id %} + cluster-id {{ bgp_vars.route_reflector.cluster_id }} + {% else %} + no cluster-id 1 + {% endif %} + {% endif %} + {% endif %} + + {% if bgp_vars.best_path is defined and bgp_vars.best_path %} + {% if bgp_vars.best_path.as_path is defined and bgp_vars.best_path.as_path %} + {% if bgp_vars.best_path.as_path_state is defined and bgp_vars.best_path.as_path_state == "absent" %} + no bestpath as-path {{ bgp_vars.best_path.as_path }} + {% else %} + bestpath as-path {{ bgp_vars.best_path.as_path }} + {% endif %} + {% endif %} + {% if bgp_vars.best_path.ignore_router_id is defined %} + {% if bgp_vars.best_path.ignore_router_id %} + bestpath router-id ignore + {% else %} + no bestpath router-id ignore + {% endif %} + {% endif %} + {% if bgp_vars.best_path.med is defined and bgp_vars.best_path.med %} + {% for med in bgp_vars.best_path.med %} + {% if med.attribute is defined and med.attribute %} + {% if med.state is defined and med.state == "absent" %} + no bestpath med {{ med.attribute }} + {% else %} + bestpath med {{ med.attribute }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + + {% if bgp_vars.address_family_ipv4 is defined and bgp_vars.address_family_ipv4 %} + {% set af_vars = bgp_vars.address_family_ipv4 %} + address-family ipv4 unicast + {% endif %} + {% if af_vars is defined and af_vars %} + {% if af_vars.aggregate_address is defined and af_vars.aggregate_address %} + {% for addr in af_vars.aggregate_address %} + {% if addr.ip_and_mask is defined and addr.ip_and_mask %} + {% if addr.state is defined and addr.state == "absent" %} + no aggregate-address {{ addr.ip_and_mask }} + {% else %} + {% if addr.summary_only is defined and addr.summary_only %} + aggregate-address {{ addr.ip_and_mask }} summary-only + {% else %} + aggregate-address {{ addr.ip_and_mask }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if af_vars.dampening is defined and af_vars.dampening %} + {% if af_vars.dampening.state is defined and af_vars.dampening.state == "absent" %} + no dampening + {% else %} + {% if af_vars.dampening.value is defined and af_vars.dampening.value %} + {% if af_vars.dampening.route_map is defined and af_vars.dampening.route_map %} + dampening {{ af_vars.dampening.value }} route-map {{ af_vars.dampening.route_map }} + {% else %} + dampening {{ af_vars.dampening.value }} + {% endif %} + {% else %} + {% if af_vars.dampening.route_map is defined and af_vars.dampening.route_map %} + dampening 15 750 2000 60 route-map {{ af_vars.dampening.route_map }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if bgp_vars.address_family_ipv6 is defined and bgp_vars.address_family_ipv6 %} + {% set af_vars = bgp_vars.address_family_ipv6 %} + address-family ipv6 unicast + {% endif %} + {% if af_vars is defined and af_vars %} + {% if af_vars.aggregate_address is defined and af_vars.aggregate_address %} + {% for addr in af_vars.aggregate_address %} + {% if addr.ip_and_mask is defined and addr.ip_and_mask %} + {% if addr.state is defined and addr.state == "absent" %} + no aggregate-address {{ addr.ip_and_mask }} + {% else %} + {% if addr.summary_only is defined and addr.summary_only %} + aggregate-address {{ addr.ip_and_mask }} summary-only + {% else %} + aggregate-address {{ addr.ip_and_mask }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if af_vars.dampening is defined and af_vars.dampening %} + {% if af_vars.dampening.state is defined and af_vars.dampening.state == "absent" %} + no dampening + {% else %} + {% if af_vars.dampening.value is defined and af_vars.dampening.value %} + {% if af_vars.dampening.route_map is defined and af_vars.dampening.route_map %} + dampening {{ af_vars.dampening.value }} route-map {{ af_vars.dampening.route_map }} + {% else %} + dampening {{ af_vars.dampening.value }} + {% endif %} + {% else %} + {% if af_vars.dampening.route_map is defined and af_vars.dampening.route_map %} + dampening 15 750 2000 60 route-map {{ af_vars.dampening.route_map }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if bgp_vars.ipv4_network is defined and bgp_vars.ipv4_network %} + address-family ipv4 unicast + {% for net in bgp_vars.ipv4_network %} + {% if net.address is defined and net.address %} + {% if net.state is defined and net.state == "absent"%} + no network {{ net.address }} + {% else %} + network {{ net.address }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if bgp_vars.ipv6_network is defined and bgp_vars.ipv6_network %} + address-family ipv6 unicast + {% for net in bgp_vars.ipv6_network %} + {% if net.address is defined and net.address %} + {% if net.state is defined and net.state == "absent"%} + no network {{ net.address }} + {% else %} + network {{ net.address }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if bgp_vars.redistribute is defined and bgp_vars.redistribute %} + {% for route in bgp_vars.redistribute %} + {% if route.route_type is defined and route.route_type %} + {% if route.address_type is defined and route.address_type %} + address-family {{ route.address_type }} unicast + {% if route.state is defined and route.state == "absent" %} + {% if route.route_type == "imported_bgp" %} + no redistribute imported-bgp-routes vrf {{ route.imported_bgp_vrf_name }} + {% else %} + no redistribute {{ route.route_type }} + {% endif %} + {% else %} + {% if route.route_map_name is defined and route.route_map_name %} + {% if route.route_type == "imported_bgp" %} + redistribute imported-bgp-routes vrf {{ route.imported_bgp_vrf_name }} route-map {{ route.route_map_name }} + {% else %} + redistribute {{ route.route_type }} route-map {{ route.route_map_name }} + {% endif %} + {% else %} + {% if route.route_type == "imported_bgp" %} + redistribute imported-bgp-routes vrf {{ route.imported_bgp_vrf_name }} + {% else %} + redistribute {{ route.route_type }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if bgp_vars.neighbor is defined and bgp_vars.neighbor %} + {% for neighbor in bgp_vars.neighbor %} + {% if neighbor.type is defined %} + {% if neighbor.type == "ipv4" or neighbor.type =="ipv6" %} + {% if neighbor.ip is defined and neighbor.ip %} + {% set tag_or_ip = neighbor.ip %} + {% if neighbor.state is defined and neighbor.state == "absent" %} + no neighbor {{ tag_or_ip }} + {% else %} + neighbor {{ tag_or_ip }} + {% if neighbor.description is defined %} + {% if neighbor.description %} + description "{{ neighbor.description }}" + {% else %} + no description + {% endif %} + {% endif %} + {% if neighbor.peergroup is defined and neighbor.peergroup %} + {% if neighbor.peergroup_state is defined and neighbor.peergroup_state == "absent" %} + no inherit template {{ neighbor.peergroup }} + {% else %} + inherit template {{ neighbor.peergroup }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% if neighbor.interface is defined and neighbor.interface %} + {% set tag_or_ip = neighbor.interface %} + {% if neighbor.state is defined and neighbor.state == "absent" %} + no neighbor interface {{ neighbor.interface }} + {% else %} + neighbor interface {{ neighbor.interface }} + {% if neighbor.description is defined %} + {% if neighbor.description %} + description "{{ neighbor.description }}" + {% else %} + no description + {% endif %} + {% endif %} + {% if neighbor.admin is defined %} + {% if neighbor.admin == "up" %} + no shutdown + {% else %} + shutdown + {% endif %} + {% endif %} + {% if neighbor.peergroup is defined and neighbor.peergroup %} + {% if neighbor.peergroup_state is defined and neighbor.peergroup_state == "absent" %} + no inherit template {{ neighbor.peergroup }} + {% elif neighbor.peergroup_type is defined %} + inherit template {{ neighbor.peergroup }} inherit-type {{ neighbor.peergroup_type }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% if neighbor.auto_peer is defined and neighbor.auto_peer %} + {% set tag_or_ip = neighbor.auto_peer %} + {% if neighbor.state is defined and neighbor.state == "absent" %} + no neighbor {{ neighbor.auto_peer }} + {% else %} + neighbor {{ neighbor.auto_peer }} + {% if neighbor.description is defined %} + {% if neighbor.description %} + description "{{ neighbor.description }}" + {% else %} + no description + {% endif %} + {% endif %} + {% if neighbor.admin is defined %} + {% if neighbor.admin == "up" %} + no shutdown + {% else %} + shutdown + {% endif %} + {% endif %} + {% if neighbor.ebgp_peergroup is defined and neighbor.ebgp_peergroup %} + {% if neighbor.ebgp_peergroup_state is defined and neighbor.ebgp_peergroup_state == "absent" %} + no inherit ebgp-template {{ neighbor.ebgp_peergroup }} + {% else %} + inherit ebgp-template {{ neighbor.ebgp_peergroup }} + {% endif %} + {% endif %} + {% if neighbor.ibgp_peergroup is defined and neighbor.ibgp_peergroup %} + {% if neighbor.ibgp_peergroup_state is defined and neighbor.ibgp_peergroup_state == "absent" %} + no inherit ibgp-template {{ neighbor.ibgp_peergroup }} + {% else %} + inherit ibgp-template {{ neighbor.ibgp_peergroup }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% elif neighbor.type == "peergroup" %} + {% if neighbor.name is defined and neighbor.name %} + {% set tag_or_ip = neighbor.name %} + {% if neighbor.state is defined and neighbor.state == "absent" %} + no template {{ tag_or_ip }} + {% else %} + template {{ tag_or_ip }} + {% if neighbor.subnet is defined and neighbor.subnet %} + {% if neighbor.subnet_state is defined and neighbor.subnet_state =="absent" %} + no listen {{ neighbor.subnet }} + {% else %} + {% if neighbor.limit is defined and neighbor.limit %} + listen {{ neighbor.subnet }} limit {{ neighbor.limit }} + {% else %} + listen {{ neighbor.subnet }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% if tag_or_ip is defined and tag_or_ip %} + {% if (neighbor.state is defined and not neighbor.state == "absent" ) or neighbor.state is not defined %} + {% if neighbor.remote_asn is defined and neighbor.remote_asn %} + {% if neighbor.remote_asn_state is defined and neighbor.remote_asn_state == "absent" %} + no remote-as {{ neighbor.remote_asn }} + {% else %} + remote-as {{ neighbor.remote_asn }} + {% endif %} + {% endif %} + {% if neighbor.local_as is defined %} + {% if neighbor.local_as %} + local-as {{ neighbor.local_as }} + {% else %} + no local-as + {% endif %} + {% endif %} + {% if neighbor.weight is defined %} + {% if neighbor.weight %} + weight {{ neighbor.weight }} + {% else %} + no weight + {% endif %} + {% endif %} + + {% if neighbor.src_loopback is defined %} + {% if neighbor.src_loopback|int(-1) != -1 %} + update-source loopback{{ neighbor.src_loopback }} + {% else %} + no update-source loopback + {% endif %} + {% endif %} + + {% if neighbor.ebgp_multihop is defined %} + {% if neighbor.ebgp_multihop %} + ebgp-multihop {{ neighbor.ebgp_multihop }} + {% else %} + no ebgp-multihop + {% endif %} + {% endif %} + {% if neighbor.route_reflector_client is defined %} + {% if neighbor.route_reflector_client %} + route-reflector-client + {% else %} + no route-reflector-client + {% endif %} + {% endif %} + {% if neighbor.password is defined %} + {% if neighbor.password %} + password {{ neighbor.password }} + {% else %} + no password a + {% endif %} + {% endif %} + {% if neighbor.send_community is defined and neighbor.send_community %} + {% for comm in neighbor.send_community %} + {% if comm.type is defined and comm.type %} + {% if comm.state is defined and comm.state == "absent" %} + no send-community {{ comm.type }} + {% else %} + send-community {{ comm.type }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if neighbor.address_family is defined and neighbor.address_family %} + {% for af in neighbor.address_family %} + {% if af.type is defined and af.type %} + {% if af.state is defined and af.state == "absent" %} + {% if af.type == "l2vpn" %} + no address-family {{ af.type }} evpn + {% else %} + no address-family {{ af.type }} unicast + {% endif %} + {% else %} + {% if af.type == "l2vpn" %} + address-family {{ af.type }} evpn + {% else %} + address-family {{ af.type }} unicast + {% endif %} + {% if af.activate is defined %} + {% if af.activate %} + activate + {% else %} + no activate + {% endif %} + {% endif %} + {% if af.sender_loop_detect is defined %} + {% if af.sender_loop_detect %} + sender-side-loop-detection + {% else %} + no sender-side-loop-detection + {% endif %} + {% endif %} + {% if af.allow_as_in is defined %} + {% if af.allow_as_in %} + allowas-in {{ af.allow_as_in }} + {% else %} + no allowas-in + {% endif %} + {% endif %} + {% if af.route_map is defined and af.route_map %} + {% for item in af.route_map %} + {% if item.name is defined and item.name %} + {% if item.filter is defined and item.filter %} + {% if item.state is defined and item.state == "absent" %} + no route-map {{ item.name }} {{ item.filter }} + {% else %} + route-map {{ item.name }} {{ item.filter }} + {% endif%} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if af.next_hop_self is defined %} + {% if af.next_hop_self %} + next-hop-self + {% else %} + no next-hop-self + {% endif %} + {% endif %} + {% if af.soft_reconf is defined %} + {% if af.soft_reconf %} + soft-reconfiguration inbound + {% else %} + no soft-reconfiguration inbound + {% endif %} + {% endif %} + {% if af.add_path is defined %} + {% if af.add_path %} + add-path {{ af.add_path }} + {% else %} + no add-path + {% endif %} + {% endif %} + + + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if neighbor.adv_interval is defined %} + {% if neighbor.adv_interval %} + advertisement-interval {{ neighbor.adv_interval }} + {% else %} + no advertisement-interval + {% endif %} + {% endif %} + {% if neighbor.fall_over is defined and neighbor.fall_over == "present" %} + fall-over + {% elif neighbor.fall_over is defined and neighbor.fall_over == "absent" %} + no fall-over + {% endif %} + {% if neighbor.bfd is defined and neighbor.bfd %} + bfd + {% elif neighbor.bfd is defined and not neighbor.bfd %} + no bfd + {% endif %} + {% if neighbor.timer is defined %} + {% if neighbor.timer %} + timers {{ neighbor.timer }} + {% else %} + no timers + {% endif %} + {% endif %} + {% if neighbor.admin is defined %} + {% if neighbor.admin == "up" %} + no shutdown + {% else %} + shutdown + {% endif %} + {% endif %} + {% if neighbor.distribute_list is defined and neighbor.distribute_list %} + address-family ipv4 unicast + {% if neighbor.distribute_list.in is defined and neighbor.distribute_list.in %} + {% if neighbor.distribute_list.in_state is defined and neighbor.distribute_list.in_state == "absent" %} + no distribute-list {{ neighbor.distribute_list.in }} in + {% else %} + distribute-list {{ neighbor.distribute_list.in }} in + {% endif %} + {% endif %} + {% if neighbor.distribute_list.out is defined and neighbor.distribute_list.out %} + {% if neighbor.distribute_list.out_state is defined and neighbor.distribute_list.out_state == "absent" %} + no distribute-list {{ neighbor.distribute_list.out }} out + {% else %} + distribute-list {{ neighbor.distribute_list.out }} out + {% endif %} + {% endif %} + {% endif %} + {% if neighbor.sender_loop_detect is defined %} + address-family ipv4 unicast + {% if neighbor.sender_loop_detect %} + sender-side-loop-detection + {% else %} + no sender-side-loop-detection + {% endif %} + {% endif %} + + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% if bgp_vars.vrf is defined %} + vrf {{ bgp_vars.vrf.name }} + + {% if bgp_vars.vrf.address_family is defined and bgp_vars.vrf.state is defined and bgp_vars.vrf.state == "absent" %} + no address-family {{ bgp_vars.vrf.address_family.type }} unicast + no address-family {{ bgp_vars.vrf.address_type }} unicast + {% else %} + address-family {{ bgp_vars.vrf.address_family.type }} unicast + {% endif %} + {% if bgp_vars.vrf.router_id is defined %} + router-id {{ bgp_vars.vrf.router_id }} + {% endif %} + {% if bgp_vars.vrf.address_family.redistribute is defined %} + {% for route in bgp_vars.vrf.address_family.redistribute %} + {% if route.route_type is defined %} + {% if route.state is defined and route.state == "absent" %} + {% if route.route_type == "imported_bgp" %} + no redistribute imported-bgp-routes vrf {{ route.imported_bgp_vrf_name }} + {% else %} + no redistribute {{ route.route_type }} + {% endif %} + {% else %} + {% if route.route_map_name is defined and route.route_map_name %} + {% if route.route_type == "ospf" and route.ospf_id %} + redistribute {{ route.route_type }} route.ospf_id route-map {{ route.route_map_name }} + {% elif route.route_type == "imported_bgp" %} + redistribute imported-bgp-routes vrf {{ route.imported_bgp_vrf_name }} route-map {{ route.route_map_name }} + {% elif route.route_type == "l2vpn" %} + redistribute {{ route.route_type }} evpn route-map {{ route.route_map_name }} + {% else %} + redistribute {{ route.route_type }} route-map {{ route.route_map_name }} + {% endif %} + {% else %} + {% if route.route_type == "ospf" and route.ospf_id %} + redistribute {{ route.route_type }} route.ospf_id + {% elif route.route_type == "imported_bgp" %} + redistribute imported-bgp-routes vrf {{ route.imported_bgp_vrf_name }} + {% elif route.route_type == "l2vpn" %} + redistribute {{ route.route_type }} evpn + {% else %} + redistribute {{ route.route_type }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if bgp_vars.vrf.neighbor is defined %} + {% for ngbr in bgp_vars.vrf.neighbor %} + {% if ngbr.interface is defined %} + neighbor interface {{ ngbr.interface }} + {% else %} + {% if ngbr.ip is defined %} + neighbor {{ ngbr.ip }} + {% endif %} + {% endif %} + {% if ngbr.remote_asn is defined %} + remote-as {{ ngbr.remote_asn }} + {% endif %} + {% if ngbr.admin is defined %} + {%if ngbr.admin == "up" %} + no shutdown + {% else %} + shutdown + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + + + {% endif %} +{% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/main.os10.yaml new file mode 100644 index 00000000..51f92094 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/main.os10.yaml @@ -0,0 +1,160 @@ +--- +# vars file for dellemc.os10.os10_bgp, +# below gives a sample configuration +# Sample variables for OS10 device +os10_bgp: + asn: 12 + router_id: 90.1.1.4 + maxpath_ibgp: 2 + maxpath_ebgp: 2 + graceful_restart: true + log_neighbor_changes: true + fast_ext_fallover: false + always_compare_med: true + default_loc_pref: 1000 + confederation: + identifier: 25 + peers: 23 24 + peers_state: present + route_reflector: + client_to_client: false + cluster_id: 4294967295 + address_family_ipv4: + aggregate_address: + - ip_and_mask: 1.1.1.1/16 + state: present + dampening: + value: 15 750 2000 60 + route_map: qq + state: present + address_family_ipv6: + aggregate_address: + - ip_and_mask: 2001:4898:5808:ffa0::/126 + state: present + summary_only: true + best_path: + as_path: ignore + as_path_state: present + ignore_router_id: true + med: + - attribute: confed + state: present + ipv4_network: + - address: 101.1.1.0/30 + state: present + ipv6_network: + - address: "2001:4898:5808:ffa0::/126" + state: present + neighbor: + - name: ebgp_pg + type: peergroup + bfd: yes + state: present + - name: ibgp_pg + type: peergroup + weight: 10 + state: present + - type: ipv4 + interface: vlan20 + send_community: + - type: extended + state: present + address_family: + - type: l2vpn + activate: true + state: present + admin: up + state: present + - type: ipv4 + description: "U_site2-spine1" + remote_asn: 11 + ip: 192.168.10.1 + peergroup: peer1 + peergroup_state: present + peergroup_type: ibgp + adv_interval: 40 + fall_over: present + password: bgppassword + route_reflector_client: true + src_loopback: 0 + address_family: + - type: ipv4 + activate: true + state: present + send_community: + - type: standard + state: present + state: present + - type: ipv4 + remote_asn: 13 + local_as: 10 + weight: 10 + ip: 192.168.12.3 + address_family: + - type: ipv4 + activate: true + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + add_path: both 3 + route_map: + - name: qq + filter: in + state: present + state: present + state: present + - type: ipv6 + remote_asn: 14 + ip: 2001:4898:5808:ffa2::1 + state: present + - type: ipv6 + description: "U_site2-spine1-Auto Discovered peers" + auto_peer: unnumbered-auto + ebgp_peergroup: ebgp_pg + ebgp_peergroup_state: absent + ibgp_peergroup: ibgp_pg + ibgp_peergroup_state: present + sender_loop_detect: true + password: bgppassword + address_family: + - type: ipv4 + activate: true + sender_loop_detect: true + state: present + allow_as_in: 5 + next_hop_self: true + soft_reconf: true + - type: l2vpn + activate: true + sender_loop_detect: false + state: present + send_community: + - type: standard + state: present + admin: up + state: present + redistribute: + - route_type: static + route_map_name: aa + address_type: ipv4 + state: present + bfd_all_neighbors: + interval: 200 + min_rx: 200 + multiplier: 3 + role: active + state: present + vrf: + name: "GREEN" + address_family: + type: ipv4 + redistribute: + - route_type: l2vpn + address_type: ipv4 + state: present + neighbor: + - type: ipv4 + ip: "172.16.1.1" + remote_asn: 65400 + admin: up + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/test.yaml new file mode 100644 index 00000000..fd5211f4 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_bgp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/vars/main.yml new file mode 100644 index 00000000..de9999bd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_bgp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_bgp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/README.md new file mode 100644 index 00000000..e5e58a79 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/README.md @@ -0,0 +1,131 @@ +Copy-config role +================ + +This role is used to push the backup running configuration into a Dell EMC PowerSwitch platform running Dell EMC SmartFabric OS10, and merges the configuration in the template file with the running configuration of the device. + +The copy-config role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- No predefined variables are part of this role +- Use *host_vars* or *group_vars* as part of the template file +- Configuration file is host-specific +- Copy the host-specific configuration to the respective file under the template directory in *<host_name>.j2* format +- Variables and values are case-sensitive + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_copy_config* role to push the configuration file into the device. It creates a *hosts* file with the switch details and corresponding variables. It writes a simple playbook that only references the *os10_copy_config* role. By including the role, you automatically get access to all of the tasks to push configuration file. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + + # This variable shall be applied in the below jinja template for each host by defining here + os10_bgp + asn: 64801 + +**Sample roles/os10_copy_config/templates/leaf1.j2** + + ! Leaf1 BGP profile on Dell OS10 switch + snmp-server community public ro + hash-algorithm ecmp crc + ! + interface ethernet1/1/1:1 + no switchport + ip address 100.1.1.2/24 + ipv6 address 2001:100:1:1::2/64 + mtu 9216 + no shutdown + ! + interface ethernet1/1/9:1 + no switchport + ip address 100.2.1.2/24 + ipv6 address 2001:100:2:1::2/64 + mtu 9216 + no shutdown + ! + router bgp {{ os10_bgp.asn }} + bestpath as-path multipath-relax + bestpath med missing-as-worst + router-id 100.0.2.1 + ! + address-family ipv4 unicast + ! + address-family ipv6 unicast + ! + neighbor 100.1.1.1 + remote-as 64901 + no shutdown + ! + neighbor 100.2.1.1 + remote-as 64901 + no shutdown + ! + neighbor 2001:100:1:1::1 + remote-as 64901 + no shutdown + ! + address-family ipv4 unicast + no activate + exit + ! + address-family ipv6 unicast + activate + exit + ! + neighbor 2001:100:2:1::1 + remote-as 64901 + no shutdown + ! + address-family ipv4 unicast + no activate + exit + ! + address-family ipv6 unicast + activate + exit + ! + +**Simple playbook to setup to push configuration file into device — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_copy_config + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/defaults/main.yml new file mode 100644 index 00000000..de0edc0c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_copy_config diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/handlers/main.yml new file mode 100644 index 00000000..e11a8805 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_copy_config diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/meta/main.yml new file mode 100644 index 00000000..16658939 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/meta/main.yml @@ -0,0 +1,19 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: > + This role shall be used to push the backup running configuration into the device. + This role shall merge the configuration in the template file with the running configuration of the device + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tasks/main.yml new file mode 100644 index 00000000..dd62a63f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tasks/main.yml @@ -0,0 +1,7 @@ +--- +# tasks file for dellemc.os10.os10_copy_config + - name: "Merge the config file to running configuration for OS10" + os10_config: + src: "{{ hostname }}.j2" + when: (ansible_network_os is defined and ansible_network_os== "dellemc.os10.os10") +# notify: save config os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/templates/leaf1.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/templates/leaf1.j2 new file mode 100644 index 00000000..b02686f5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/templates/leaf1.j2 @@ -0,0 +1,3 @@ +! Version 10.3.0E +! Last configuration change at March 09 21:47:35 2020 +! diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/inventory b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/inventory new file mode 100644 index 00000000..85a255f9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/inventory @@ -0,0 +1,2 @@ +--- +localhost diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/main.yml new file mode 100644 index 00000000..ed97d539 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/main.yml @@ -0,0 +1 @@ +--- diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/test.yml new file mode 100644 index 00000000..6c7b8039 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + connection: network_cli + roles: + - dellemc.os10.os10_copy_config diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/vars/main.yml new file mode 100644 index 00000000..9f021ecf --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_copy_config/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_copy_config diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/README.md new file mode 100644 index 00000000..023df325 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/README.md @@ -0,0 +1,125 @@ +DNS role +======== + +This role facilitates the configuration of the domain name service (DNS). This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The DNS role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_dns keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``name_server`` | list | Configures DNS (see ``name_server.*``) | os10 | +| ``name_server.ip`` | list | Configures the name server IP | os10 | +| ``name_server.vrf`` | list | Configures VRF for each IP | os10 | +| ``name_server.state`` | string: absent,present\* | Deletes the name server IP if set to absent | os10 | +| ``domain_list`` | list | Configures domain-list (see ``domain_list.*``) | os10 | +| ``domain_list.name`` | list | Configures the domain-list name | os10 | +| ``domain_list.vrf`` | list | Configures VRF for each domain-list name | os10 | +| ``domain_list.state`` | string: absent,present\* | Deletes the domain-list if set to absent | os10 | + + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_dns* role to completely set up the DNS server configuration. The example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, generates the configuration commands as a .part file in *build_dir* path. By default it is set to false. It writes a simple playbook that only references the *os10_dns* role. By including the role, you automatically get access to all of the tasks to configure DNS. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_dns: + domain_lookup: true + name_server: + - ip: + - 3.1.1.1 + - 3.1.1.2 + vrf: + - test + - test1 + - ip: + - 3.1.1.2 + vrf: + - test1 + state: absent + - ip: + - 2.2.2.2 + - ip: + - 3.3.2.2 + state: absent + domain_list: + - name: + - dname7 + - dname8 + vrf: + - test + - test1 + - name: + - dname7 + vrf: + - test + - test1 + state: absent + - name: + - dname3 + - dname4 + - name: + - dname5 + - dname6 + state: absent + +> **NOTE**: vrf should be present which can be configured using os10_vrf role + +**Simple playbook to setup DNS — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_dns + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/defaults/main.yml new file mode 100644 index 00000000..d826575e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_dns diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/handlers/main.yml new file mode 100644 index 00000000..a6cd5e69 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_dns diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/meta/main.yml new file mode 100644 index 00000000..1f0baa16 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/meta/main.yml @@ -0,0 +1,17 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_dns role facilitates the configuration DNS attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tasks/main.yml new file mode 100644 index 00000000..417ebacf --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tasks/main.yml @@ -0,0 +1,17 @@ +--- +# tasks file for Dellos10 + + - name: "Generating DNS configuration for os10" + template: + src: os10_dns.j2 + dest: "{{ build_dir }}/dns10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning DNS configuration for os10" + os10_config: + src: os10_dns.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/templates/os10_dns.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/templates/os10_dns.j2 new file mode 100644 index 00000000..f381b3d0 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/templates/os10_dns.j2 @@ -0,0 +1,101 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{#################################### +Purpose: +Configure DNS commands for OS10 devices +os10_dns: +os10_dns: + domain_lookup: true + name_server: + - ip: + - 3.1.1.1 + - 3.1.1.2 + vrf: + - test + - test1 + - ip: + - 3.1.1.2 + vrf: + - test1 + state: absent + - ip: + - 2.2.2.2 + - ip: + - 3.3.2.2 + state: absent + domain_list: + - name: + - dname7 + - dname8 + vrf: + - test + - test1 + - name: + - dname7 + vrf: + - test + - test1 + state: absent + - name: + - dname3 + - dname4 + - name: + - dname5 + - dname6 + state: absent +#####################################} +{% if (os10_dns is defined and os10_dns) %} + {% if (os10_dns.name_server is defined and os10_dns.name_server) %} + {% for name_server in os10_dns.name_server %} + {% set absent = "" %} + {% if name_server.state is defined and name_server.state == "absent" %} + {% set absent = "no " %} + {% endif %} + + {% set vrf_name_list = name_server.vrf %} + {% if (vrf_name_list is defined and vrf_name_list ) %} + {% for vrf_name in vrf_name_list %} + {% set ip_list = name_server.ip %} + {% if (ip_list is defined and ip_list ) %} + {% for ip_val in ip_list %} + {{ absent }}ip name-server vrf {{ vrf_name }} {{ ip_val }} + {% endfor %} + {% elif name_server.state is defined and name_server.state == "absent"%} + {{ absent }}ip name-server vrf {{ vrf_name }} + {% endif %} + {% endfor %} + {% else %} + {% set ip_list = name_server.ip %} + {% if (ip_list is defined and ip_list ) %} + {{ absent }}ip name-server {{ ip_list|join(' ') }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if (os10_dns.domain_list is defined and os10_dns.domain_list) %} + {% for domain in os10_dns.domain_list %} + {% set absent = "" %} + {% if domain.state is defined and domain.state == "absent" %} + {% set absent = "no " %} + {% endif %} + + {% set vrf_name_list = domain.vrf %} + {% if (vrf_name_list is defined and vrf_name_list ) %} + {% for vrf_name in vrf_name_list %} + {% set name_list = domain.name %} + {% if (name_list is defined and name_list ) %} + {% for name_val in name_list %} + {{ absent }}ip domain-list vrf {{ vrf_name }} {{ name_val }} + {% endfor %} + {% elif domain.state is defined and domain.state == "absent"%} + {{ absent }}ip domain-list vrf {{ vrf_name }} + {% endif %} + {% endfor %} + {% else %} + {% set name_list = domain.name %} + {% if (name_list is defined and name_list ) %} + {{ absent }}ip domain-list {{ name_list|join(' ') }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/main.yaml new file mode 100644 index 00000000..6305318d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/main.yaml @@ -0,0 +1,43 @@ +--- +# vars file for dellemc.os10.os10_dns, +# below gives a sample configuration +# Sample variables for OS10 device +os10_dns: + domain_lookup: true + name_server: + - ip: + - 3.1.1.1 + - 3.1.1.2 + vrf: + - test + - test1 + - ip: + - 3.1.1.2 + vrf: + - test1 + state: absent + - ip: + - 2.2.2.2 + - ip: + - 3.3.2.2 + state: absent + domain_list: + - name: + - dname7 + - dname8 + vrf: + - test + - test1 + - name: + - dname7 + vrf: + - test + - test1 + state: absent + - name: + - dname3 + - dname4 + - name: + - dname5 + - dname6 + state: absent diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/test.yaml new file mode 100644 index 00000000..ab6aaca5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_dns diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/vars/main.yml new file mode 100644 index 00000000..19959956 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_dns/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_dns diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/README.md new file mode 100644 index 00000000..8582e04b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/README.md @@ -0,0 +1,78 @@ +ECMP role +========= + +This role facilitates the configuration of equal cost multi-path (ECMP), and it supports the configuration of ECMP for IPv4. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The ECMP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_ecmp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``ecmp_group_max_paths`` | integer | Configures the number of maximum paths per ECMP group | os10 | +| ``trigger_threshold`` | integer | Configures the number of link bundle utilization trigger threshold | os10 | + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_ecmp* role to configure ECMP for IPv4. The example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The example writes a simple playbook that only references the *os10_ecmp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_ecmp: + ecmp_group_max_paths: 3 + trigger_threshold: 50 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_ecmp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/defaults/main.yml new file mode 100644 index 00000000..406d1cfc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_ecmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/handlers/main.yml new file mode 100644 index 00000000..24ccf4de --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_ecmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/meta/main.yml new file mode 100644 index 00000000..f6448d4c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/meta/main.yml @@ -0,0 +1,17 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_ecmp role facilitates the configuration of ECMP group attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tasks/main.yml new file mode 100644 index 00000000..012d4119 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tasks/main.yml @@ -0,0 +1,17 @@ +--- +# tasks file for os10 + + - name: "Generating ECMP configuration for os10" + template: + src: os10_ecmp.j2 + dest: "{{ build_dir }}/ecmp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning ECMP configuration for os10" + os10_config: + src: os10_ecmp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/templates/os10_ecmp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/templates/os10_ecmp.j2 new file mode 100644 index 00000000..6a0b04dd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/templates/os10_ecmp.j2 @@ -0,0 +1,25 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{#################################### +Purpose: +Configure ECMP commands for OS10 devices +os10_ecmp: + ecmp_group_max_paths: 3 + trigger_threshold: 50 +#####################################} +{% if os10_ecmp is defined and os10_ecmp %} + {% if os10_ecmp.ecmp_group_max_paths is defined %} + {% if os10_ecmp.ecmp_group_max_paths %} +ip ecmp-group maximum-paths {{ os10_ecmp.ecmp_group_max_paths }} + {% else %} +no ip ecmp-group maximum-paths + {% endif %} + {% endif %} + {% if os10_ecmp.trigger_threshold is defined %} + {% if os10_ecmp.trigger_threshold %} +link-bundle-utilization trigger-threshold {{ os10_ecmp.trigger_threshold }} + {% else %} +no link-bundle-utilization trigger-threshold + {% endif %} + {% endif %} + +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/main.os10.yaml new file mode 100644 index 00000000..ff00dfd4 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/main.os10.yaml @@ -0,0 +1,7 @@ +--- +# vars file for dellemc.os10.os10_ecmp, +# below gives a sample configuration +# Sample variables for OS10 device +os10_ecmp: + ecmp_group_max_paths: 3 + trigger_threshold: 50 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/test.yaml new file mode 100644 index 00000000..2df95ee6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_ecmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/vars/main.yml new file mode 100644 index 00000000..cfd6a141 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ecmp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_ecmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/README.md new file mode 100644 index 00000000..12f491dc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/README.md @@ -0,0 +1,119 @@ +os10_fabric_summary +===================================== +This role is used to get show system information of all devices in the fabric. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Fabric summary role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``os10_cli_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the default value is used | +| ``os10_cli_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Dependencies +------------ + +- *xmltodict* library should be installed to get show command output in dict format from XML +- To install the package use the *pip install xmltodict* command + +Example playbook +---------------- + +This example uses the *os10_fabric_summary* role to completely get the show attributes. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the ansible_network_os variable with the corresponding Dell EMC OS10 name. + +The *os10_fabric_summary* role has a simple playbook that only references the *os10_fabric_summary* role. + +**Sample hosts file** + + site1-spine1 ansible_host=10.11.180.21 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site1-spine2 ansible_host=10.11.180.22 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine1 ansible_host=10.11.180.23 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine2 ansible_host=10.11.180.24 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + [spine] + site1-spine1 + site1-spine2 + site2-spine1 + site2-spine2 + [LeafAndSpineSwitch:children] + spine + +**Sample host_vars/site1-spine1** + + + cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + os10_cli_user: xxxx + os10_cli_pass: xxxx + ansible_network_os: dellemc.os10.os10 + +**Simple playbook to setup fabric summary — provision.yaml** + + --- + - name: show system summary command + hosts: localhost + gather_facts: False + connection: local + roles: + - os10_fabric_summary + +**Run** + + ansible-playbook -i hosts provision.yaml + +**Samaple Output** + + "results": [ + { + "device type": "S6010-ON", + "host": "10.11.180.21", + "hostname": "host3", + "inv_name": "site1-spine1", + "node-mac": "e4:f0:04:9b:e5:dc", + "service-tag": "D33FXC2", + "software-version": "10.4.9999EX" + }, + { + "device type": "S6010-ON", + "host": "10.11.180.22", + "hostname": "host22", + "inv_name": "site1-spine2", + "node-mac": "e4:f0:04:9b:eb:dc", + "service-tag": "J33FXC2", + "software-version": "10.4.9999EX" + }, + { + "device type": "S6010-ON", + "host": "10.11.180.24", + "hostname": "site2-spine1", + "inv_name": "site2-spine1", + "node-mac": "e4:f0:04:9b:ee:dc", + "service-tag": "343FXC2", + "software-version": "10.4.9999EX" + }, + { + "device type": "S6010-ON", + "host": "10.11.180.23", + "hostname": "site2-spine2", + "inv_name": "site2-spine2", + "node-mac": "e4:f0:04:9b:f1:dc", + "service-tag": "543FXC2", + "software-version": "10.4.9999EX" + } + ] + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/meta/main.yml new file mode 100644 index 00000000..428d79f6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + role_name: os10_fabric_summary + author: Dell EMC Networking Engineering + description: This role provides the system network information of all the switches in the fabric Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tasks/main.yml new file mode 100644 index 00000000..784d6642 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tasks/main.yml @@ -0,0 +1,20 @@ +--- +- name: "Get Dell EMC OS10 Show system summary" + os10_command: + commands: ['show system | display-xml'] + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_system +- name: "set fact to form database" + set_fact: + output: "{{ output|default([])+ [{'inv_name': item.item, 'host': item.invocation.module_args.provider.host, 'stdout_show_system': item.stdout}] }}" + loop: "{{ show_system.results }}" +- name: "debug the output of system summary DB" + debug: var=output +- name: "show system network call to lib " + show_system_network_summary: + cli_responses: "{{ output }}" + output_type: "{{ output_method if output_method is defined else 'json' }}" + register: show_system_network_summary +- name: "debug the output of system summary DB" + debug: var=show_system_network_summary diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site1-spine1 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site1-spine1 new file mode 100644 index 00000000..36a99cdb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site1-spine1 @@ -0,0 +1,12 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site1-spine2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site1-spine2 new file mode 100644 index 00000000..36a99cdb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site1-spine2 @@ -0,0 +1,12 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site2-spine1 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site2-spine1 new file mode 100644 index 00000000..36a99cdb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site2-spine1 @@ -0,0 +1,12 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site2-spine2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site2-spine2 new file mode 100644 index 00000000..36a99cdb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/host_vars/site2-spine2 @@ -0,0 +1,12 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/inventory.yaml new file mode 100644 index 00000000..ff511df5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/inventory.yaml @@ -0,0 +1,14 @@ +--- +site1-spine1 ansible_host=10.11.180.21 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 +site1-spine2 ansible_host=10.11.180.22 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 +site2-spine1 ansible_host=10.11.180.23 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 +site2-spine2 ansible_host=10.11.180.24 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + +[spine] +site1-spine1 +site1-spine2 +site2-spine1 +site2-spine2 + +[LeafAndSpineSwitch:children] +spine diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/main.yaml new file mode 100644 index 00000000..1f450079 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/main.yaml @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/test.yml new file mode 100644 index 00000000..e865c790 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_fabric_summary/tests/test.yml @@ -0,0 +1,7 @@ +--- +- name: setup for os10 fabric summary + hosts: localhost + gather_facts: False + connection: local + roles: + - dellemc.os10.os10_fabric_summary diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/README.md new file mode 100644 index 00000000..77221904 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/README.md @@ -0,0 +1,152 @@ +ACL flow-based monitor role +=========================== + +This role facilitates configuring ACL flow-based monitoring attributes. Flow-based mirroring is a mirroring session in which traffic matches specified policies that are mirrored to a destination port. Port-based mirroring maintains a database that contains all monitoring sessions (including port monitor sessions). This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The ACL flow-based role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take the `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- `os10_flow_monitor` (dictionary) with session ID key (in *session <ID>* format; 1 to 18) +- Variables and values are case-sensitive + +**session ID keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``session_type`` | string: local_*_,rspan-source,erspan-source | Configures the monitoring session type | os10 | +| ``description`` | string | Configures the monitor session description | os10 | +| ``port_match`` | list | Displays a list of interfaces with location source and destination | os10 | +| ``port_match.interface_name`` | string | Configures the interface | os10 | +| ``port_match.location`` | string: source,destination | Configures the source/destination of an interface | os10 | +| ``port_match.state`` | string: absent,present\* | Deletes the interface if set to absent | os10 | +| ``flow_based`` | boolean | Enables flow-based monitoring | os10 | +| ``shutdown`` | string: up,down\* | Enable/disables the monitoring session | os10 | +| ``state`` | string: absent,present\* | Deletes the monitoring session corresponding to the session ID if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_flow_monitor* role to configure session monitor configuration. It creates a *hosts* file with the switch details and corresponding variables. The hosts file defines the `anisble_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in the *build_dir* path. By default, the variable is set to false. +It writes a simple playbook that only references the *os10_flow_monitor* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + os10_flow_monitor: + session 1: + session_type: local + description: "Discription goes here" + port_match: + - interface_name: ethernet 1/1/4 + location: source + state: present + - interface_name: ethernet 1/1/3 + location: destination + state: present + flow_based: true + shutdown: up + state: present + session 2: + session_type: local + description: "Discription of session goes here" + port_match: + - interface_name: ethernet 1/1/6 + location: source + state: present + - interface_name: ethernet 1/1/7 + location: destination + state: present + flow_based: true + shutdown: up + state: present + session 3: + state: absent + os10_acl: + - name: testflow + type: ipv4 + description: testflow description + extended: true + entries: + - number: 5 + permit: true + protocol: icmp + source: any + destination: any + other_options: capture session 1 count + state: present + - number: 10 + permit: true + protocol: ip + source: 102.1.1.0/24 + destination: any + other_option: capture session 1 count byte + state: present + - number: 15 + permit: false + protocol: udp + source: any + destination: any + other_options: capture session 2 count byte + state: present + - number: 20 + permit: false + protocol: tcp + source: any + destination: any + other_options: capture session 2 count byte + state: present + stage_ingress: + - name: ethernet 1/1/1 + state: present + +> **NOTE**: Destination port should not be an L2/L3 port which can be configured using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_flow_monitor + - dellemc.os10.os10_acl + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/defaults/main.yml new file mode 100644 index 00000000..3cc17642 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_flow_monitor diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/handlers/main.yml new file mode 100644 index 00000000..91b1038e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_flow_moitor diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/meta/main.yml new file mode 100644 index 00000000..c81fad54 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_flow_monitor role facilitates the configuration of ACL flow based monitor attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - os10 + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tasks/main.yml new file mode 100644 index 00000000..b5bf0bc3 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for Dellos10 + - name: "Generating Flow monitor configuration for os10" + template: + src: os10_flow_monitor.j2 + dest: "{{ build_dir }}/flow_monitor10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning Flow monitor configuration for os10" + os10_config: + src: os10_flow_monitor.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/templates/os10_flow_monitor.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/templates/os10_flow_monitor.j2 new file mode 100644 index 00000000..535c6180 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/templates/os10_flow_monitor.j2 @@ -0,0 +1,86 @@ +#jinja2: trim_blocks: True, lstrip_blocks: True +{########################################## +Purpose: +Configure Flow monitor commands for os10 Devices +os10_flow_monitor: + session 1: + session_type: local + description: "Discription goes here" + port_match: + - interface_name: ethernet 1/1/4 + location: source + state: present + - interface_name: ethernet 1/1/3 + location: destination + state: present + flow_based: true + shutdown: up + state: present + session 2: + session_type: local + description: "Discription of session goes here" + port_match: + - interface_name: ethernet 1/1/6 + location: source + state: present + - interface_name: ethernet 1/1/7 + location: destination + state: present + flow_based: false + shutdown: up + state: present + session 3: + state: absent +#########################################} +{% if os10_flow_monitor is defined and os10_flow_monitor %} +{% for key in os10_flow_monitor.keys() %} +{% set session_id = key.split(" ") %} +{% set session_vars = os10_flow_monitor[key] %} +{% set session_type = "" %} + +{% if session_vars.session_type is defined and session_vars.session_type != "local" %} +{% set session_type = "type " + session_vars.session_type %} +{% endif %} + + {% if session_vars.state is defined and session_vars.state == "absent" %} +no monitor session {{ session_id[1] }} + {% else %} +monitor session {{ session_id[1] }} {{ session_type }} + + {% if session_vars.description is defined and session_vars.description %} + description "{{ session_vars.description }}" + {% else %} + no description + {% endif %} + + {% if session_vars.port_match is defined and session_vars.port_match %} + {% for match_vars in session_vars.port_match %} + {% set negate = "" %} + {% if match_vars["state"] is defined and match_vars["state"] == "absent" %} + {% set negate = "no " %} + {% endif %} + {% set location = "source" %} + {% if match_vars["location"] is defined and match_vars["location"] == "destination" %} + {% set location = "destination" %} + {% endif %} + {{ negate }}{{ location }} interface {{ match_vars["interface_name"] }} + {% endfor %} + {% endif %} + + {% if session_vars.shutdown is defined and session_vars.shutdown == "up" %} + no shut + {% else %} + shut + {% endif %} + +{% if session_vars.flow_based is defined %} + {% if session_vars.flow_based %} + flow-based enable + {% else %} + no flow-based enable + {% endif %} +{% endif %} + +{% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/main.yaml new file mode 100644 index 00000000..750932c8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/main.yaml @@ -0,0 +1,33 @@ +--- +# vars file for dellemc.os10.os10_flow_monitor, +# below gives a example configuration +# Sample variables for OS10 device +os10_flow_monitor: + session 1: + session_type: local + description: "Discription goes here" + port_match: + - interface_name: ethernet 1/1/4 + location: source + state: present + - interface_name: ethernet 1/1/3 + location: destination + state: present + flow_based: true + shutdown: up + state: present + session 2: + session_type: local + description: "Discription of session goes here" + port_match: + - interface_name: ethernet 1/1/6 + location: source + state: present + - interface_name: ethernet 1/1/7 + location: destination + state: present + flow_based: false + shutdown: up + state: present + session 3: + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/test.yaml new file mode 100644 index 00000000..44a56b7e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_flow_monitor diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/vars/main.yml new file mode 100644 index 00000000..0943cd2c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_flow_monitor/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_flow_monitor diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/README.md new file mode 100644 index 00000000..bb79fa34 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/README.md @@ -0,0 +1,73 @@ +Image upgrade role +=================================== + +This role facilitates upgrades or installation of a software image. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Image upgrade role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_image_upgrade keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``operation_type`` | string: cancel,install | Displays the type of image operation | os10 | +| ``software_image_url`` | string | Configures the URL path to the image file | os10 | +| ``software_version`` | string | Displays the software version of the image file | os10 | +| ``number_of_retries`` | int | Configures the numbe of retries to check the status of image install process | os10 | + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_image_upgrade* role to upgrade/install software image. It creates a *hosts* file with the switch details, corresponding *host_vars* file, and a simple playbook that references the *os10_image_upgrade* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + os10_image_upgrade: + operation_type: install + software_image_url: tftp://10.16.148.8/PKGS_OS10-Enterprise-10.2.9999E.5790-installer-x86_64.bin + software_version: 10.2.9999E + number_of_retries: 50 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_image_upgrade + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/defaults/main.yml new file mode 100644 index 00000000..809f7a43 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_image_upgrade diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/handlers/main.yml new file mode 100644 index 00000000..7bfc6bc7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_image_upgrade diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/meta/main.yml new file mode 100644 index 00000000..b35a5382 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/meta/main.yml @@ -0,0 +1,17 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_image_upgrade role facilitates install/upgrade software image for OS10 switches + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tasks/main.yml new file mode 100644 index 00000000..ee2d557d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tasks/main.yml @@ -0,0 +1,37 @@ +--- + - block: + - name: "Process image {{ os10_image_upgrade.operation_type }} operation" + vars: + command_postfix: "{{ os10_image_upgrade.operation_type }} {{ '' if os10_image_upgrade.operation_type == 'cancel' else os10_image_upgrade.software_image_url }}" + os10_command: + commands: + - command: "image {{ command_postfix }}" + prompt: "yes/no]:" + answer: "yes" + register: result + - name: "Get image {{ os10_image_upgrade.operation_type }} operation status" + os10_command: + commands: "show image status" + register: image_status + - name: "Validate image status" + fail: msg="Image {{ os10_image_upgrade.operation_type }} operation Failed" + when: image_status.stdout.0.find("Failed") > 1 + - name: "Wait for image {{ os10_image_upgrade.operation_type }} operation" + os10_command: + commands: "show image status" + register: result + until: result.stdout.0.find("In progress") < 1 + retries: "{{ os10_image_upgrade.number_of_retries }}" + delay: 15 + - name: "Wait for image {{ os10_image_upgrade.operation_type }} operation" + os10_command: + commands: "show image status" + register: image_status + - name: "Validate software version" + fail: msg="Image {{ os10_image_upgrade.operation_type }} operation Failed" + when: image_status.stdout.0.find("Failed") > 1 + - name: "Image {{ os10_image_upgrade.operation_type }} status" + debug: msg="Image {{ os10_image_upgrade.operation_type }} successful" + when: image_status.stdout.0.find("Failed") <= -1 + when: + - os10_image_upgrade.operation_type == "install" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/inventory b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/inventory new file mode 100644 index 00000000..85a255f9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/inventory @@ -0,0 +1,2 @@ +--- +localhost diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/main.yml new file mode 100644 index 00000000..66507dc7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/main.yml @@ -0,0 +1,9 @@ +--- +# vars file for dellemc.os10.os10_image_upgrade, +# below gives a example configuration + +os10_image_upgrade: + operation_type: install + software_image_url: http://10.16.127.7//tftpboot/NGOS/FMB-ar-rel_10.5.1-release/AmazonInstallers/last_good/PKGS_OS10-Enterprise-10.5.1.0.124stretch-installer-x86_64.bin + software_version: 10.5.1.0 + number_of_retries: 50 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/test.yml new file mode 100644 index 00000000..a2ed1161 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + connection: network_cli + roles: + - dellemc.os10.os10_image_upgrade diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/vars/main.yml new file mode 100644 index 00000000..a9fa1154 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_image_upgrade/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_image_upgrade, below gives a example configuration diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/README.md new file mode 100644 index 00000000..5692285e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/README.md @@ -0,0 +1,173 @@ +Interface role +============== + +This role facilitates the configuration of interface attributes. It supports the configuration of admin state, description, MTU, IP address, IP helper, suppress_ra, and port mode. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Interface role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- `os10_interface` (dictionary) holds a dictionary with the interface name; interface name can correspond to any of the valid OS interfaces with the unique interface identifier name +- For physical interfaces, the interface name must be in *<interfacename> <tuple>* format; for logical interfaces, the interface must be in *<logical_interfacename> <id>* format; physical interface name can be *ethernet 1/1/32* +- For interface ranges, the interface name must be in *range <interface_type> <node/slot/port[:subport]-node/slot/port[:subport]>* format; *range ethernet 1/1/1-1/1/4* +- Logical interface names can be *vlan 1* or *port-channel 1* +- Variables and values are case-sensitive + +> **NOTE**: Only define supported variables for the interface type, and do not define the *switchport* variable for a logical interface. + +**interface name keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``desc`` | string | Configures a single line interface description | os10 | +| ``portmode`` | string | Configures port-mode according to the device type | os10 | +| ``switchport`` | boolean: true,false\* | Configures an interface in L2 mode | os10 | +| ``admin`` | string: up,down\* | Configures the administrative state for the interface; configuring the value as administratively "up" enables the interface; configuring the value as administratively "down" disables the interface | os10 | +| ``mtu`` | integer | Configures the MTU size for L2 and L3 interfaces (1280 to 65535) | os10 | +| ``fanout`` | string:dual, single; string:10g-4x, 40g-1x, 25g-4x, 100g-1x, 50g-2x (os10) | Configures fanout to the appropriate value | os10 | +| ``suppress_ra`` | string; present,absent | Configures IPv6 router advertisements if set to present | os10 | +| ``ip_type_dynamic`` | boolean: true,false | Configures IP address DHCP if set to true (*ip_and_mask* is ignored if set to true) | os10 | +| ``ipv6_type_dynamic`` | boolean: true,false | Configures an IPv6 address for DHCP if set to true (*ipv6_and_mask* is ignored if set to true) | os10 | +| ``ipv6_autoconfig`` | boolean: true,false | Configures stateless configuration of IPv6 addresses if set to true (*ipv6_and_mask* is ignored if set to true) | os10 | +| ``vrf`` | string | Configures the specified VRF to be associated to the interface | os10 | +| ``min_ra`` | string | Configures RA minimum interval time period | os10 | +| ``max_ra`` | string | Configures RA maximum interval time period | os10 | +| ``ip_and_mask`` | string | Configures the specified IP address to the interface | os10 | +| ``ipv6_and_mask`` | string | Configures a specified IPv6 address to the interface | os10 | +| ``virtual_gateway_ip`` | string | Configures an anycast gateway IP address for a VxLAN virtual network as well as VLAN interfaces| os10 | +| ``virtual_gateway_ipv6`` | string | Configures an anycast gateway IPv6 address for VLAN interfaces| os10 | +| ``state_ipv6`` | string: absent,present\* | Deletes the IPV6 address if set to absent | os10 | +| ``ip_helper`` | list | Configures DHCP server address objects (see ``ip_helper.*``) | os10 | +| ``ip_helper.ip`` | string (required) | Configures the IPv4 address of the DHCP server (A.B.C.D format) | os10 | +| ``ip_helper.state`` | string: absent,present\* | Deletes the IP helper address if set to absent | os10 | +| ``flowcontrol`` | dictionary | Configures the flowcontrol attribute (see ``flowcontrol.*``) | os10 | +| ``flowcontrol.mode`` | string: receive,transmit | Configures the flowcontrol mode | os10 | +| ``flowcontrol.enable`` | string: on,off | Configures the flowcontrol mode on | os10 | +| ``flowcontrol.state`` | string: absent,present\* | Deletes the flowcontrol if set to absent | os10 | +| ``ipv6_bgp_unnum`` | dictionary | Configures the ipv6 bgp unnum attributes (see ``ipv6_bgp_unnum.*``) below | os10 | +| ``ipv6_bgp_unnum.state`` | string: absent,present\* | Disable auto discovery of BGP unnumbered peer if set to absent | os10 | +| ``ipv6_bgp_unnum.peergroup_type`` | string: ebgp,ibgp | Specify the type of template to inherit from | os10 | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_interface* role to set up description, MTU, admin status, port mode, and switchport details for an interface. The example creates a *hosts* file with the switch details and orresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, this variable is set to false. The example writes a simple playbook that only references the *os10_interface* role. + +**Sample hosts file** + + leaf3 ansible_host= <ip_address> + +**Sample host_vars/leaf3** + + hostname: "leaf3" + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_interface: + ethernet 1/1/32: + desc: "Connected to Core 2" + mtu: 2500 + portmode: + admin: up + switchport: False + ip_and_mask: + ip_type_dynamic: True + ipv6_type_dynamic: True + ethernet 1/1/12: + desc: "ipv6 auto config" + switchport: False + mtu: 2500 + admin: up + ipv6_autoconfig: True + ethernet 1/1/14: + fanout: 10g-4x + ethernet 1/1/13: + desc: "set ipv6 address" + switchport: False + admin: up + ipv6_and_mask: 2001:4898:5809:faa2::10/126 + state_ipv6: present + ethernet 1/1/1: + desc: "Connected to Leaf1" + portmode: "trunk" + switchport: True + suppress_ra: present + admin: up + ethernet 1/1/3: + desc: site2-spine2 + ip_and_mask: 10.9.0.4/31 + mtu: 9216 + switchport: False + admin: up + flowcontrol: + mode: "receive" + enable: "on" + state: "present" + + vlan 100: + ip_and_mask: + ipv6_and_mask: 2001:4898:5808:ffaf::1/64 + state_ipv6: present + ip_helper: + - ip: 10.0.0.33 + state: present + admin: up + range ethernet 1/1/1-1/1/32: + mtu: 2500 + port-channel 10: + admin: up + switchport: False + suppress_ra: + ipv6_bgp_unnum: + state: present + peergroup_type: ebgp + vlan 10: + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + admin: up + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf3 + roles: + - dellemc.os10.os10_interface + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/defaults/main.yml new file mode 100644 index 00000000..6f214632 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_interface diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/handlers/main.yml new file mode 100644 index 00000000..72e65874 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_interface diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/meta/main.yml new file mode 100644 index 00000000..8f0bfd3b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_interface role facilitates the configuration of interface attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tasks/main.yml new file mode 100644 index 00000000..c8656c51 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating interface configuration for os10" + template: + src: os10_interface.j2 + dest: "{{ build_dir }}/intf10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning interface configuration for os10" + os10_config: + src: os10_interface.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/templates/os10_interface.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/templates/os10_interface.j2 new file mode 100644 index 00000000..294b457c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/templates/os10_interface.j2 @@ -0,0 +1,245 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{##################################################### +Purpose: +Configure interface commands for os10 Devices. +os10_interface: + ethernet 1/1/31: + desc: "OS10 intf" + portmode: trunk + mtu: 2000 + switchport: False + admin: up + ip_type_dynamic: True + ip_and_mask: "192.168.11.1/24" + virtual_gateway_ip: "172.17.17.1" + suppress_ra: present + ipv6_autoconfig: True + ipv6_and_mask: 2001:4898:5808:ffa2::5/126 + state_ipv6: present + ip_helper: + - ip: 10.0.0.36 + state: present + flowcontrol: + mode: "receive" + enable: "on" + state: "present" + ethernet 1/1/3: + fanout: 10g-4x + range ethernet 1/1/1-1/1/4: + switchport: True + admin: down + virtual-network 100: + vrf: "test" + ip_and_mask: "15.1.1.1/24" + virtual_gateway_ip: "15.1.1.254" + admin: up + port-channel 10: + admin: up + switchport: False + suppress_ra: + ipv6_bgp_unnum: + state: present + peergroup_type: ebgp + vlan 10: + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + admin: up + +#####################################################} +{% if os10_interface is defined and os10_interface %} +{% for key in os10_interface.keys() %} + {% set intf_vars = os10_interface[key] %} + {% set port = key.split(" ") %} + {% set interface_key = "" %} + {% if intf_vars.fanout is defined %} + {% if intf_vars.fanout %} +interface breakout {{ port[1] }} map {{ intf_vars.fanout }} + {% else %} +no interface breakout {{ port[1] }} + {% endif %} + {% endif %} +{% endfor %} +{% for key in os10_interface.keys() %} + {% set intf_vars = os10_interface[key] %} + {% set port = key.split(" ") %} + {% set interface_key = "" %} + {% if (intf_vars.fanout is defined and not intf_vars.fanout) or (intf_vars.fanout is not defined) %} + {% if key.startswith('range')%} + {% set interface_key = port[0] + " " + port[1] + port[2] %} + {% else %} + {% set interface_key = port[0] + port[1] %} + {% endif %} +interface {{ interface_key }} + {% if intf_vars.desc is defined %} + {% if intf_vars.desc %} + {% if intf_vars.desc|wordcount > 1 %} + description "{{ intf_vars.desc }}" + {% else %} + description {{ intf_vars.desc }} + {% endif %} + {% else %} + no description + {% endif %} + {% endif %} + + + + {% if intf_vars.switchport is defined %} + {% if intf_vars.switchport %} + {% if intf_vars.portmode is defined and intf_vars.portmode %} + switchport mode {{ intf_vars.portmode }} + {% endif %} + {% else %} + no switchport + {% endif %} + {% else %} + {% if intf_vars.portmode is defined %} + {% if intf_vars.portmode %} + switchport mode {{ intf_vars.portmode }} + {% else %} + no switchport + {% endif %} + {% endif %} + {% endif %} + + {% if intf_vars.mtu is defined %} + {% if intf_vars.mtu %} + mtu {{ intf_vars.mtu }} + {% else %} + no mtu + {% endif %} + {% endif %} + + {% if intf_vars.ip_type_dynamic is defined %} + {% if intf_vars.ip_type_dynamic %} + ip address dhcp + {% else %} + no ip address + {% endif %} + {% else %} + {% if intf_vars.vrf is defined %} + {% if intf_vars.vrf %} + ip vrf forwarding {{ intf_vars.vrf }} + {% else %} + no ip address vrf + {% endif %} + {% endif %} + {% if intf_vars.ip_and_mask is defined %} + {% if intf_vars.ip_and_mask %} + ip address {{ intf_vars.ip_and_mask }} + {% else %} + no ip address + {% endif %} + {% endif %} + {% endif %} + + {% if intf_vars.virtual_gateway_ip is defined %} + {% if intf_vars.virtual_gateway_ip %} + ip virtual-router address {{ intf_vars.virtual_gateway_ip }} + {% else %} + no ip virtual-router address + {% endif %} + {% endif %} + + {% if intf_vars.virtual_gateway_ipv6 is defined %} + {% if intf_vars.virtual_gateway_ipv6 %} + ipv6 virtual-router address {{ intf_vars.virtual_gateway_ipv6 }} + {% else %} + no ipv6 virtual-router address + {% endif %} + {% endif %} + + {% if intf_vars.suppress_ra is defined %} + {% if intf_vars.suppress_ra == "present" %} + no ipv6 nd send-ra + {% else %} + ipv6 nd send-ra + {% endif %} + {% endif %} + {% if intf_vars.ipv6_autoconfig is defined %} + {% if intf_vars.ipv6_autoconfig %} + ipv6 address autoconfig + {% else %} + no ipv6 address + {% endif %} + {% elif intf_vars.ipv6_type_dynamic is defined %} + {% if intf_vars.ipv6_type_dynamic %} + ipv6 address dhcp + {% else %} + no ipv6 address + {% endif %} + {% else %} + {% if intf_vars.ipv6_and_mask is defined %} + {% if intf_vars.ipv6_and_mask %} + {% if intf_vars.state_ipv6 is defined and intf_vars.state_ipv6 == "absent" %} + no ipv6 address {{ intf_vars.ipv6_and_mask }} + {% else %} + ipv6 address {{ intf_vars.ipv6_and_mask }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% if intf_vars.max_ra is defined %} + {% if intf_vars.max_ra %} + ipv6 nd max-ra-interval {{ intf_vars.max_ra }} + {% else %} + no ipv6 nd max-ra-interval + {% endif %} + {% endif %} + {% if intf_vars.min_ra is defined %} + {% if intf_vars.min_ra %} + ipv6 nd min-ra-interval {{ intf_vars.min_ra }} + {% else %} + no ipv6 nd min-ra-interval + {% endif %} + {% endif %} + {% if intf_vars.ip_helper is defined and intf_vars.ip_helper %} + {% for helper in intf_vars.ip_helper %} + {% if helper.ip is defined and helper.ip %} + {% if helper.state is defined and helper.state == "absent" %} + no ip helper-address {{ helper.ip }} + {% else %} + ip helper-address {{ helper.ip }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if intf_vars.flowcontrol is defined and intf_vars.flowcontrol %} + {% if intf_vars.flowcontrol.mode is defined %} + {% if intf_vars.flowcontrol.mode %} + {% if intf_vars.flowcontrol.state is defined and intf_vars.flowcontrol.state == "absent" %} + no flowcontrol {{ intf_vars.flowcontrol.mode }} + {% else %} + {% if intf_vars.flowcontrol.enable is defined %} + {% if intf_vars.flowcontrol.enable == "on" %} + flowcontrol {{ intf_vars.flowcontrol.mode }} on + {% else %} + flowcontrol {{ intf_vars.flowcontrol.mode }} off + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if intf_vars.admin is defined %} + {% if intf_vars.admin == "up" %} + no shutdown + {% elif intf_vars.admin == "down" %} + shutdown + {% endif %} + {% endif %} + {% if intf_vars.ipv6_bgp_unnum is defined and intf_vars.ipv6_bgp_unnum %} + {% if intf_vars.ipv6_bgp_unnum.state == "absent" %} + no ipv6 bgp unnumbered + {% elif intf_vars.ipv6_bgp_unnum.state == "present" and intf_vars.ipv6_bgp_unnum.peergroup_type == "ebgp" %} + ipv6 bgp unnumbered ebgp-template + {% elif intf_vars.ipv6_bgp_unnum.state == "present" and intf_vars.ipv6_bgp_unnum.peergroup_type == "ibgp" %} + ipv6 bgp unnumbered ibgp-template + {% endif %} + {% endif %} + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/main.os10.yaml new file mode 100644 index 00000000..e9f0fe2e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/main.os10.yaml @@ -0,0 +1,68 @@ +--- +# vars file for dellemc.os10.os10_interface +# Sample variables for OS10 device +os10_interface: + ethernet 1/1/32: + desc: "Connected to Core 2" + mtu: 2500 + portmode: + admin: up + switchport: False + ip_and_mask: + ip_type_dynamic: True + ipv6_type_dynamic: True + ethernet 1/1/12: + desc: "ipv6 auto config" + switchport: False + mtu: 2500 + admin: up + ipv6_autoconfig: True + ethernet 1/1/14: + fanout: 10g-4x + ethernet 1/1/13: + desc: "set ipv6 address" + switchport: False + admin: up + ipv6_and_mask: 2001:4898:5809:faa2::10/126 + state_ipv6: present + ethernet 1/1/1: + desc: "Connected to Leaf1" + portmode: "trunk" + switchport: True + suppress_ra: present + admin: up + ethernet 1/1/3: + desc: site2-spine2 + ip_and_mask: 10.9.0.4/31 + mtu: 9216 + switchport: False + admin: up + flowcontrol: + mode: "receive" + enable: "on" + state: "present" + + vlan 100: + ip_and_mask: + ipv6_and_mask: 2001:4898:5808:ffaf::1/64 + state_ipv6: present + ip_helper: + - ip: 10.0.0.33 + state: present + admin: up + range ethernet 1/1/1-1/1/32: + mtu: 2500 + admin: up + switchport: False + port-channel 10: + admin: up + switchport: False + suppress_ra: + ipv6_bgp_unnum: + state: present + peergroup_type: ebgp + vlan 10: + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + admin: up diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/test.yaml new file mode 100644 index 00000000..5b1ac094 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_interface diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/vars/main.yml new file mode 100644 index 00000000..247ea157 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_interface/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_interface diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/README.md new file mode 100644 index 00000000..c5af266f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/README.md @@ -0,0 +1,103 @@ +LAG role +======== + +This role facilitates the configuration of link aggregation group (LAG) attributes, and supports the creation and deletion of a LAG and its member ports. It also supports the configuration of an interface type as a static or dynamic LAG and minimum required link. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The LAG role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Object drives the tasks in this role +- `os10_lag` (dictionary) contains the hostname (dictionary) +- Hostname is the value of the *hostname* variable that corresponds to the name of the OS device +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value to any variable negates the corresponding configuration +- `os10_lag` (dictionary) holds a dictionary with the port-channel ID key in `Po <ID>` format (1 to 128) +- Variables and values are case-sensitive + +**port-channel ID keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``type`` | string: static,dynamic | Configures the interface either as a static or dynamic LAG | os10 | +| ``min_links`` | integer | Configures the minimum number of links in the LAG that must be in *operup* status (1 to 32) | os10 | +| ``max_bundle_size`` | integer | Configures the maximum bundle size for the port channel | os10 | +| ``lacp_system_priority`` | integer | Configures the LACP system-priority value | os10 | +| ``lacp_fallback_enable`` | boolean | Configures LACP fallback | os10 | +| ``channel_members`` | list | Specifies the list of port members to be associated to the port-channel (see ``channel_members.*``) | os10 | +| ``channel_members.port`` | string | Specifies valid interface names to be configured as port-channel members | os10 | +| ``channel_members.mode`` | string: active,passive,on | Configures mode of channel members | os10 | +| ``channel_members.port_priority`` | integer | Configures port priority on devices for channel members | os10 | +| ``channel_members.lacp_rate_fast`` | boolean | Configures the LACP rate as fast if set to true | os10 | +| ``state`` | string: absent,present\* | Deletes the LAG corresponding to the port-channel ID if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_lag* role to setup port channel ID and description, and configures hash algorithm and minimum links for the LAG. Channel members can be configured for the port-channel either in static or dynamic mode. You can also delete the LAG with the port-channel ID or delete the members associated to it. This example creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_lag* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_lag: + Po 12: + type: dynamic + min_links: 2 + max_bundle_size: 2 + lacp_system_priority: 2 + channel_members: + - port: ethernet 1/1/31 + mode: "active" + port_priority: 3 + lacp_rate_fast: true + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_lag + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/defaults/main.yml new file mode 100644 index 00000000..6eaa54ea --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_lag diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/handlers/main.yml new file mode 100644 index 00000000..06b4bef8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_lag diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/meta/main.yml new file mode 100644 index 00000000..6fcd3c68 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_lag role facilitates the configuration of LAG attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tasks/main.yml new file mode 100644 index 00000000..e103552f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating LAG configuration for os10" + template: + src: os10_lag.j2 + dest: "{{ build_dir }}/lag10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning LAG configuration for os10" + os10_config: + src: os10_lag.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/templates/os10_lag.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/templates/os10_lag.j2 new file mode 100644 index 00000000..722ff5ff --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/templates/os10_lag.j2 @@ -0,0 +1,89 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{################################ +Purpose: +Configure LAG commands for os10 Devices. +os10_lag: + Po 12: + type: dynamic + min_links: 2 + max_bundle_size: 2 + lacp_system_priority: 2 + channel_members: + - port: ethernet 1/1/31 + mode: "active" + port_priority: 3 + lacp_rate_fast: true + state: present +################################} +{% if os10_lag is defined and os10_lag %} +{% for key in os10_lag.keys() %} +{% set channel_id = key.split(" ") %} +{% set lag_vars = os10_lag[key] %} + + {% if lag_vars.lacp_system_priority is defined %} + {% if lag_vars.lacp_system_priority %} +lacp system-priority {{ lag_vars.lacp_system_priority }} + {% else %} +no lacp system-priority + {% endif %} + {% endif %} + + {% if lag_vars.state is defined and lag_vars.state == "absent" %} +no interface port-channel {{ channel_id[1] }} + {% else %} +interface port-channel{{ channel_id[1] }} + {% if lag_vars.min_links is defined %} + {% if lag_vars.min_links %} + minimum-links {{ lag_vars.min_links }} + {% else %} + no minimum-links + {% endif %} + {% endif %} + {% if lag_vars.max_bundle_size is defined %} + {% if lag_vars.max_bundle_size %} + lacp max-bundle {{ lag_vars.max_bundle_size }} + {% else %} + no lacp max-bundle + {% endif %} + {% endif %} + {% if lag_vars.lacp_fallback_enable is defined and lag_vars.lacp_fallback_enable %} + lacp fallback enable + {% endif %} + {% if lag_vars.channel_members is defined %} + {% for ports in lag_vars.channel_members %} + {% if ports.port is defined and ports.port %} +interface {{ ports.port }} + {% if lag_vars.type is defined and lag_vars.type == "static" %} + {% if ports.mode is defined and ports.mode == "on" %} + channel-group {{ channel_id[1] }} mode on + {% else %} + no channel-group + {% endif %} + {% elif lag_vars.type is defined and lag_vars.type == "dynamic" %} + {% if ports.mode is defined and ports.mode == "active" or ports.mode == "passive" %} + channel-group {{ channel_id[1] }} mode {{ ports.mode }} + {% else %} + no channel-group + {% endif %} + {% endif %} + {% if ports.lacp_rate_fast is defined %} + {% if ports.lacp_rate_fast %} + lacp rate fast + {% else %} + no lacp rate fast + {% endif %} + {% endif %} + {% if ports.port_priority is defined %} + {% if ports.port_priority %} + lacp port-priority {{ ports.port_priority }} + {% else %} + no lacp port-priority + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/main.os10.yaml new file mode 100644 index 00000000..52518981 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/main.os10.yaml @@ -0,0 +1,15 @@ +--- +# vars file for dellemc.os10.os10_lag +# Sample variables for OS10 device +os10_lag: + Po 12: + type: dynamic + min_links: 2 + max_bundle_size: 2 + lacp_system_priority: 2 + channel_members: + - port: ethernet 1/1/31 + mode: "active" + port_priority: 3 + lacp_rate_fast: true + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/test.yaml new file mode 100644 index 00000000..6c130a0e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_lag diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/vars/main.yml new file mode 100644 index 00000000..5b1cd5b1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lag/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_lag diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/README.md new file mode 100644 index 00000000..e2f01b33 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/README.md @@ -0,0 +1,149 @@ +LLDP role +========= + +This role facilitates the configuration of link layer discovery protocol (LLDP) attributes at a global and interface level. It supports the configuration of hello, mode, multiplier, advertise TLVs, management interface, FCoE, and iSCSI at global and interface level. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The LLDP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_lldp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``enable`` | boolean | Enables or disables LLDP at a global level | os10 | +| ``multiplier`` | integer | Configures the global LLDP multiplier (2 to 10) | os10 | +| ``reinit`` | integer | Configures the reinit value (1 to 10) | os10 | +| ``timer`` | integer | Configures the timer value (5 to 254) | os10 | +| ``advertise`` | dictionary | Configures LLDP-MED and TLV advertisement at the global level (see ``advertise.*``) | os10 | +| ``advertise.med`` | dictionary | Configures MED TLVs advertisement (see ``med_tlv.*``) | os10 | +| ``med.fast_start_repeat_count`` | integer | Configures med fast start repeat count value (1 to 10) | os10 | +| ``med.application`` | list | Configures global MED TLVs advertisement for an application (see ``application.*``) | os10 | +| ``application.name`` | string | Configures the application name for MED TLVs advertisement | os10 | +| ``application.vlan_id`` | integer | Configures the VLAN ID for the application MED TLVs advertisement (1 to 4094) | os10 | +| ``application.l2_priority`` | integer | Configures the L2 priority for the application MED TLVs advertisement (0 to 7) | os10 | +| ``application.code_point_value`` | integer | Configures differentiated services code point values for MED TLVs advertisement (0 to 63) | os10 | +| ``application.vlan_type`` | string: tag, untag | Configures the VLAN type for the application MED TLvs advertisement | os10 | +| ``application.network_policy_id`` | integer | Configures network policy ID for the application MED TLVs advertisement | os10 | +| ``application.state`` | string: present\*,absent | Deletes the application if set to absent | os10 | +| ``local_interface`` | dictionary | Configures LLDP at the interface level (see ``local_interface.*``) | os10 | +| ``local_interface.<interface name>`` | dictionary | Configures LLDP at the interface level (see ``<interface name>.*``) | os10 | +| ``<interface name>.mode`` | string: rx,tx | Configures LLDP mode configuration at the interface level | os10 | +| ``<interface name>.mode_state`` | string: absent,present | Configures transmit/receive at the interface level| os10 | +| ``<interface name>.advertise`` | dictionary | Configures LLDP-MED TLV advertisement at the interface level (see ``advertise.*``) | os10 | +| ``advertise.med`` | dictionary | Configures MED TLVs advertisement at the interface level (see ``med_tlv.*``) | os10 | +| ``med.enable`` | boolean | Enables interface level MED capabilities | os10 | +| ``med.tlv`` | string | Configures MED TLV advertisement at interface level | os10 | +| ``med.tlv_state`` | string: present\*,absent | Deletes the interface level MED configuration if set to absent | os10 | +| ``med.application`` | list | Configures MED TLVs advertisement for the application at the interface level (see ``application.*``) | os10 | +| ``application.network_policy_id`` | integer | Configures the *network_policy_id* for the application of MED | os10 | +| ``application.state`` | string: present\*,absent | Deletes the associated network policy ID for the application if set to absent.| os10 | +| ``advertise.tlv`` | list | Configures TLVs advertisement at interface level (see `<interface_name>.tlv.*`) | os10 | +| ``tlv.name`` | string: basic-tlv,dcbxp,dcbxp-appln,dot1-tlv,dot3-tlv | Configures corresponding to the TLV name specified at the interface | os10 | +| ``tlv.value`` | string | Specifies corresponding TLV value according to the name as a string | os10 | +| ``tlv.state`` | string: present\*,absent | Deletes the interface level TLVs advertisement if set to absent | os10 | + + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_lldp* role to configure protocol lldp. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_lldp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_lldp: + enable: false + multiplier: 3 + reinit: 2 + timer: 5 + advertise: + med: + fast_start_repeat_count: 4 + application: + - name: guest-voice + network_policy_id: 0 + vlan_id: 2 + vlan_type: tag + l2_priority: 3 + code_point_value: 4 + state: present + - name: voice + network_policy_id: 1 + vlan_id: 3 + vlan_type: untag + l2_priority: 3 + code_point_value: 4 + state: absent + local_interface: + ethernet 1/1/1: + mode: rx + mode_state: present + advertise: + med: + enable: true + tlv: inventory + tlv_state: present + application: + - network_policy_id: 4 + state: present + tlv: + - name: basic-tlv + value: management-address port-description + state: present + - name: dcbxp-appln + value: iscsi + state: present + - name: dcbxp + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_lldp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/defaults/main.yml new file mode 100644 index 00000000..464b4d96 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_lldp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/handlers/main.yml new file mode 100644 index 00000000..f49343b1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_lldp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/meta/main.yml new file mode 100644 index 00000000..7d843eed --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/meta/main.yml @@ -0,0 +1,19 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: > + The os10_lldp role facilitates the configuration of Link Layer Discovery Protocol(LLDP) attributes in devices + running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tasks/main.yml new file mode 100644 index 00000000..fc86a9d4 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for Dellos10 + - name: "Generating LLDP configuration for os10" + template: + src: os10_lldp.j2 + dest: "{{ build_dir }}/lldp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning LLDP configuration for os10" + os10_config: + src: os10_lldp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/templates/os10_lldp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/templates/os10_lldp.j2 new file mode 100644 index 00000000..6d362e21 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/templates/os10_lldp.j2 @@ -0,0 +1,195 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{################################################### +Purpose: +Configure LLDP commands for os10 Devices. + +os10_lldp: + enable: false + multiplier: 3 + reinit: 2 + timer: 5 + advertise: + med: + fast_start_repeat_count: 4 + application: + - name: guest-voice + network_policy_id: 0 + vlan_id: 2 + vlan_type: tag + l2_priority: 3 + code_point_value: 4 + state: present + - name: voice + network_policy_id: 1 + vlan_id: 3 + vlan_type: untag + l2_priority: 3 + code_point_value: 4 + state: absent + local_interface: + ethernet 1/1/1: + mode: rx + mode_state: present + advertise: + med: + enable: true + tlv : inventory + tlv_state: present + application: + - network_policy_id: 4 + state: present + tlv: + - name: basic-tlv + value: management-address port-description + state: present + - name: dcbxp-appln + value: iscsi + state: present + - name: dcbxp + state: present + +{###############################################################################################} +{% if os10_lldp is defined and os10_lldp %} +{% for key,value in os10_lldp.items() %} + {% if key == "enable" %} + {% if value %} +lldp enable + {% else %} +no lldp enable + {% endif %} + {% elif key == "reinit" %} + {% if value %} +lldp reinit {{ value }} + {% else %} +no lldp reinit + {% endif %} + {% elif key == "multiplier" %} + {% if value %} +lldp holdtime-multiplier {{ value }} + {% else %} +no lldp holdtime-multiplier + {% endif %} + {% elif key == "timer" %} + {% if value %} +lldp timer {{ value }} + {% else %} +no lldp timer + {% endif %} + {% elif key == "advertise" %} + {% if value %} + {% for ke,valu in value.items() %} + {% if ke == "med" %} + {% if valu %} + {% for med,val in valu.items() %} + {% if med == "fast_start_repeat_count" %} + {% if val %} +lldp med fast-start-repeat-count {{ val }} + {% else %} +no lldp med fast-start-repeat-count + {% endif %} + {% elif med == "application" %} + {% if val %} + {% for item in val %} + {% if item.network_policy_id is defined and item.network_policy_id %} + {% if item.state is defined and item.state == "absent" %} +no lldp med network-policy {{ item.network_policy_id }} + {% else %} + {% if item.name is defined and item.name %} + {% if item.vlan_id is defined and item.vlan_id %} + {% if item.vlan_type is defined and item.vlan_type %} + {% if item.l2_priority is defined and item.l2_priority %} + {% if item.code_point_value is defined and item.code_point_value %} +lldp med network-policy {{ item.network_policy_id }} app {{ item.name }} vlan {{ item.vlan_id }} vlan-type {{ item.vlan_type }} priority {{ item.l2_priority }} dscp {{ item.code_point_value }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} +{% endfor %} +{% endif %} +{% if os10_lldp is defined and os10_lldp %} +{% for key in os10_lldp.keys() %} +{% set lldp_vars = os10_lldp[key] %} +{% if key == "local_interface" %} + {% for intf in lldp_vars.keys() %} + {% set intf_vars = lldp_vars[intf] %} +interface {{ intf }} + {% if intf_vars.mode is defined and intf_vars.mode %} + {% if intf_vars.mode_state is defined and intf_vars.mode_state == "absent" %} + {% if intf_vars.mode == "rx" %} + no lldp receive + {% elif intf_vars.mode == "tx" %} + no lldp transmit + {% endif %} + {% else %} + {% if intf_vars.mode == "rx" %} + lldp receive + {% elif intf_vars.mode == "tx" %} + lldp transmit + {% endif %} + {% endif %} + {% endif %} + + {% if intf_vars.advertise is defined and intf_vars.advertise %} + {% if intf_vars.advertise.med is defined and intf_vars.advertise.med %} + {% if intf_vars.advertise.med.enable is defined %} + {% if intf_vars.advertise.med.enable %} + lldp med enable + {% else %} + lldp med disable + {% endif %} + {% endif %} + {% if intf_vars.advertise.med.tlv is defined and intf_vars.advertise.med.tlv %} + {% if intf_vars.advertise.med.tlv_state is defined and intf_vars.advertise.med.tlv_state == "absent" %} + no lldp med tlv-select {{ intf_vars.advertise.med.tlv }} + {% else %} + lldp med tlv-select {{ intf_vars.advertise.med.tlv }} + {% endif %} + {% endif %} + {% if intf_vars.advertise.med.application is defined and intf_vars.advertise.med.application %} + {% for item in intf_vars.advertise.med.application %} + {% if item.network_policy_id is defined and item.network_policy_id %} + {% if item.state is defined and item.state == "absent" %} + lldp med network-policy remove {{ item.network_policy_id }} + {% else %} + lldp med network-policy add {{ item.network_policy_id }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% if intf_vars.advertise.tlv is defined and intf_vars.advertise.tlv %} + {% for it in intf_vars.advertise.tlv %} + {% if it.name is defined and it.name %} + {% if it.state is defined and it.state == "absent" %} + {% if it.value is defined and it.value %} + no lldp tlv-select {{ it.name }} {{ it.value }} + {% else %} + no lldp tlv-select {{ it.name }} + {% endif %} + {% else %} + {% if it.value is defined and it.value %} + lldp tlv-select {{ it.name }} {{ it.value }} + {% else %} + lldp tlv-select {{ it.name }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endfor %} +{% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/main.os10.yaml new file mode 100644 index 00000000..f07408ed --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/main.os10.yaml @@ -0,0 +1,48 @@ +--- +# vars file for dellemc.os10.os10_lldp, +# below gives a sample configuration +# Sample variables for OS10 device +os10_lldp: + enable: false + multiplier: 3 + reinit: 2 + timer: 5 + advertise: + med: + fast_start_repeat_count: 4 + application: + - name: guest-voice + network_policy_id: 0 + vlan_id: 2 + vlan_type: tag + l2_priority: 3 + code_point_value: 4 + state: present + - name: voice + network_policy_id: 1 + vlan_id: 3 + vlan_type: untag + l2_priority: 3 + code_point_value: 4 + state: absent + local_interface: + ethernet 1/1/1: + mode: rx + mode_state: present + advertise: + med: + enable: true + tlv: inventory + tlv_state: present + application: + - network_policy_id: 4 + state: present + tlv: + - name: basic-tlv + value: management-address port-description + state: present + - name: dcbxp-appln + value: iscsi + state: present + - name: dcbxp + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/test.yaml new file mode 100644 index 00000000..e928c00f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_lldp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/vars/main.yml new file mode 100644 index 00000000..8802ce76 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_lldp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_lldp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/README.md new file mode 100644 index 00000000..2b65c3ec --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/README.md @@ -0,0 +1,97 @@ +Logging role +============ + +This role facilitates the configuration of global logging attributes, and it supports the configuration of logging servers. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Logging role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, it generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_logging keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``logging`` | list | Configures the logging server (see ``logging.*``) | os10 | +| ``logging.ip`` | string (required) | Configures the IPv4 address for the logging server (A.B.C.D format) | os10 | +| ``logging.state`` | string: absent,present\* | Deletes the logging server if set to absent | os10 | +| ``console`` | dictionary | Configures logging to the console (see ``console.*``) | os10 | +| ``console.enable`` | boolean | Enables/disables logging to the console | os10 | +| ``console.severity`` | string | Configures the minimum severity level for logging to the console | os10 | +| ``log_file`` | dictionary | Configures logging to a log file (see ``log_file.*``) | os10 | +| ``log_file.enable`` | boolean | Enables/disables logging to a log file | os10 | +| ``log_file.severity`` | string | Configures the minimum severity level for logging to a log file | os10 | +| ``source_interface`` | string | Configures the source interface for logging | os10 | + +> **NOTE**: Asterisk (_*_) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_logging* role to completely set up logging servers. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_logging: + logging: + - ip: 1.1.1.1 + state: absent + console: + enable: True + severity: log-err + log_file: + enable: True + severity: log-err + source_interface: "ethernet1/1/30" + +**Simple playbook to setup logging — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_logging + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/defaults/main.yml new file mode 100644 index 00000000..2fbccfcd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_logging diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/handlers/main.yml new file mode 100644 index 00000000..b79ed93f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_logging diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/meta/main.yml new file mode 100644 index 00000000..a9b06cab --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_logging role facilitates the configuration of logging attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tasks/main.yml new file mode 100644 index 00000000..91ce9e7b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating logging configuration for os10" + template: + src: os10_logging.j2 + dest: "{{ build_dir }}/logging10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning logging configuration for os10" + os10_config: + src: os10_logging.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/templates/os10_logging.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/templates/os10_logging.j2 new file mode 100644 index 00000000..1bc7cfeb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/templates/os10_logging.j2 @@ -0,0 +1,67 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +Purpose: +Configure logging commands for os10 Devices +os10_logging: + logging: + - ip: 1.1.1.1 + state: present + console: + enable: True + severity: log-err + log_file: + enable: True + severity: log-err + source_interface: "ethernet1/1/30" +###############################################} +{% if os10_logging is defined and os10_logging %} + {% for key,value in os10_logging.iteritems() %} + {% if key == "logging" %} + {% for item in value %} + {% if item.ip is defined and item.ip %} + {% if item.state is defined and item.state == "absent" %} +no logging server {{ item.ip }} + {% else %} +logging server {{ item.ip }} + {% endif %} + {% endif %} + {% endfor %} + {% elif key == "log_file" %} + {% if value.enable is defined %} + {% if value.enable %} +logging log-file enable + {% else %} +logging log-file disable + {% endif %} + {% endif %} + {% if value.severity is defined %} + {% if value.severity %} +logging log-file severity {{ value.severity }} + {% else %} +no logging log-file severity + {% endif %} + {% endif %} + {% elif key == "console" %} + {% if value.enable is defined %} + {% if value.enable %} +logging console enable + {% else %} +logging console disable + {% endif %} + {% endif %} + {% if value.severity is defined %} + {% if value.severity %} +logging console severity {{ value.severity }} + {% else %} +no logging console severity + {% endif %} + {% endif %} + {% elif key == "source_interface" %} + {% if value %} +logging source-interface {{ value }} + {% else %} +no logging source-interface + {% endif %} + {% endif %} + {% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/inventory.yaml new file mode 100644 index 00000000..d32792f7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.16.148.72 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/main.os10.yaml new file mode 100644 index 00000000..c9255b23 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/main.os10.yaml @@ -0,0 +1,15 @@ +--- +# vars file for dellemc.os10.os10_logging, +# below gives a sample configuration +# Sample variables for OS10 device +os10_logging: + logging: + - ip: 1.1.1.1 + state: absent + console: + enable: True + severity: log-err + log_file: + enable: True + severity: log-err + source_interface: "ethernet1/1/30" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/test.yaml new file mode 100644 index 00000000..cb66b3a8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_logging diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/vars/main.yml new file mode 100644 index 00000000..736ff3b8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_logging/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_logging diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/README.md new file mode 100644 index 00000000..154f5a25 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/README.md @@ -0,0 +1,304 @@ +Network validation role +========================= + +This roles is used to verify network validation. It validates network features of a wiring connection, BGP neighbors, MTU between neighbors, and VLT pairing. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. The Network validation role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +- **Wiring validation** — Based on the LLDP neighbor establishment, the intended neighbor input model is defined by the _group_var/all_ user which is compared with the actual LLDP neighbor; report is generated if there is any mismatch with the intended neighbors + +- **BGP validation** — Based on the BGP neighbor state establishment, report is generated if the BGP neighbor state is not in an established state + +- **MTU validation** — Based on the interface MTU, the report is generated if there is an MTU mismatch between LLDP neighbors + +- **VLT validation** — Based on the VLT information, the report is generated if the backup VLT link is down or not present + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- Variables and values are case-sensitive + +**wiring_validation keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``intended_neighbors`` | list | Defines topology details planned | os10 | +| ``source_switch`` | string | Defines the source switch inventory name planned | os10 | +| ``source_port`` | string | Defines the source port planned | os10 | +| ``dest_switch`` | string | Defines the destination switch inventory name planned | os10 | +| ``dest_port`` | string | Defines the destination port planned | os10 | + +**bgp_validation keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``intended_bgp_neighbors`` | list | Defines topology details planned | os10 | +| ``source_switch`` | string | Defines the source switch inventory name planned | os10 | + +**vlt_validation keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``intended_vlt_pairs`` | list | Defines topology details planned | os10 | +| ``primary`` | string | Defines the primary role of switch inventory name planned | os10 | +| ``secondary`` | string | Defines the secondary role of switch inventory name planned | os10 | + +Connection variables +-------------------- + +Ansible Dell EMC roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible _group_vars_ or _host_vars_ directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if the value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; defaults to 22 | +| ``os10_cli_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the default value is used | +| ``os10_cli_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the _become_ method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use, if required, to enter privileged mode on the remote device; if `ansible_become` is set to no, this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Value is used to load the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (*) denotes the default value if none is specified. + +Dependencies +------------ + +- The _xmltodict_ library should be installed to convert show command output in dictionary format from XML +- To install the package, use the pip install xmltodict command +- The *os10_fabric_summary* role must be included to query system network summary information + +Example playbook +---------------- + +This example uses the *os10_network_validation* role to verify network validations. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + + +**Sample hosts file** + + site1-spine1 ansible_host=10.11.180.21 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site1-spine2 ansible_host=10.11.180.22 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine1 ansible_host=10.11.180.23 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + site2-spine2 ansible_host=10.11.180.24 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + [spine] + site1-spine1 + site1-spine2 + site2-spine1 + site2-spine2 + [LeafAndSpineSwitch:children] + spine + + +**Sample host_vars/site1-spine1** + + cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + + os10_cli_user: xxxx + os10_cli_pass: xxxx + ansible_network_os: dellemc.os10.os10 + + +#### Sample ``group_var/all`` + +**Sample input for wiring validation** + + + intended_neighbors: + - source_switch: site1-spine2 + source_port: ethernet1/1/5 + dest_port: ethernet1/1/29 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/6 + dest_port: ethernet1/1/30 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/7 + dest_port: ethernet1/1/31 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/8 + dest_port: ethernet1/1/32 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/9 + dest_port: ethernet1/1/21 + dest_switch: site1-spine1 + - source_switch: site1-spine2 + source_port: ethernet1/1/7 + dest_port: ethernet1/1/29 + dest_switch: site1-spine3 + +**Sample input for BGP validation** + + intended_bgp_neighbors: + - source_switch: site1-spine1 + neighbor_ip: ["10.11.0.1","10.9.0.1","10.9.0.3","10.9.0.5","1.1.1.1"] + - source_switch: site1-spine2 + neighbor_ip: ["10.11.0.0","10.9.0.9","10.9.0.11","10.9.0.15"] + +**Sample input for VLT validation** + + intended_vlt_pairs: + - primary: site1-spine1 + secondary: site2-spine2 + - primary: site2-spine1 + secondary: site2-spine2 + + +#### Simple playbook to setup network validation + +**Sample playbook of ``validation.yaml`` to run complete validation** + + --- + - name: setup network validation + hosts: localhost + gather_facts: no + connection: local + roles: + - os10_network_validation + +**Sample playbook to run wiring validation** + + --- + - name: setup wiring validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: wiring_validation.yaml + +**Sample playbook to run BGP validation** + + --- + - name: setup bgp validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: bgp_validation.yaml + +**Sample playbook to run VLT validation** + + --- + - name: setup vlt validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: vlt_validation.yaml + +**Sample playbook to run MTU validation** + + --- + - name: setup mtu validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: mtu_validation.yaml + + +**Run** + +Execute the playbook and examine the results. + + ansible-playbook -i inventory.yaml validation.yaml + +**sample output of wiring validation** + + "results": [ + { + "dest_port": "ethernet1/1/1", + "dest_switch": "site2-spine2", + "error_type": "link-missing", + "reason": "link is not found for source switch: site2-spine1,port: ethernet1/1/1", + "source_port": "ethernet1/1/1", + "source_switch": "site2-spine1" + }, + { + "dest_port": "ethernet1/1/2", + "dest_switch": "site2-spine1", + "error_type": "link-mismatch", + "reason": "Destination switch is not an expected value, expected switch: site2-spine1,port: ethernet1/1/2; actual switch: site1-spine2(svc-tag:J33FXC2, node_mac:e4:f0:04:9b:eb:dc), port: ethernet1/1/1", + "source_port": "ethernet1/1/1", + "source_switch": "site1-spine1" + } + ] + +**sample output of BGP validation** + + "results": [ + { + "bgp_neighbor": "10.9.0.1", + "bgp_state": "idle", + "error_type": "remote_port_down", + "possible_reason": "remote port site2-spine1 ethernet1/1/2 is down", + "source_switch": "site1-spine1" + }, + { + "bgp_neighbor": "-", + "bgp_state": "idle", + "error_type": "not_an_intended_neighbor", + "possible_reason": "neighbor 10.9.0.7 is not an intended, please add this neighbor in the intended_bgp_neighbors", + "source_switch": "site1-spine1" + }, + { + "bgp_neighbor": "1.1.1.1", + "error_type": "config_missing", + "possible_reason": "neighbor config missing", + "source_switch": "site1-spine1" + }, + { + "bgp_neighbor": "10.9.0.9", + "bgp_state": "idle", + "error_type": "remote_port_down", + "possible_reason": "remote port site2-spine1 ethernet1/1/3 is down", + "source_switch": "site1-spine2" + } + ] + +**sample output of VLT validation** + + "results": [ + { + "error_type": "secondary_mismatch", + "intended_primary": "site1-spine1", + "intended_secondary": "site2-spine2", + "possible_reason": "config mismatch as site2-spine2 is expected, but the actual secondary is site1-spine2 ", + "secondary": "site1-spine2" + }, + { + "error_type": "peer_missing", + "intended_primary": "site2-spine1", + "intended_secondary": "site2-spine2", + "possible_reason": "peer info is not configured or peer interface is down" + } + ] + +**sample output of MTU validation** + + "msg": { + "results": "There is no MTU mistmatch between neighbors" + } + + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved.
\ No newline at end of file diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/meta/main.yml new file mode 100644 index 00000000..b01fd4b1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/meta/main.yml @@ -0,0 +1,21 @@ +# Copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + role_name: os10_network_validation + author: Dell EMC Networking Engineering + description: The os10_network_validation role faclitates to provide the Network validation in devices running on Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 + + dependencies: + - role: os10_fabric_summary diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/bgp_validation.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/bgp_validation.yaml new file mode 100644 index 00000000..a289b50c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/bgp_validation.yaml @@ -0,0 +1,33 @@ +--- +- name: "Get Dell EMC OS10 Show ip bgp summary" + os10_command: + commands: + - command: "show ip bgp summary | display-xml" + - command: "show ip interface brief | display-xml" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_bgp +- name: "set fact to form bgp database" + set_fact: + output_bgp: "{{ output_bgp|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, 'stdout_show_bgp': item.stdout.0, 'stdout_show_ip': item.stdout.1}] }}" + loop: "{{ show_bgp.results }}" +- name: call lib to convert bgp info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.stdout_show_bgp }}" + with_items: + - "{{ output_bgp }}" + register: show_bgp_list +- name: call lib to convert ip interface info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.stdout_show_ip }}" + with_items: + - "{{ output_bgp }}" + register: show_ip_intf_list +- name: call lib for bgp validation + bgp_validate: + show_ip_bgp: "{{ show_bgp_list.results }}" + show_ip_intf_brief: "{{ show_ip_intf_list.results }}" + bgp_neighbors: "{{ intended_bgp_neighbors }}" + register: bgp_validation_output +- name: "debug bgp database" + debug: var=bgp_validation_output.msg.results diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/main.yaml new file mode 100644 index 00000000..c81545b8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/main.yaml @@ -0,0 +1,9 @@ +--- +- name: "Validate the wiring info" + import_tasks: wiring_validation.yaml +- name: "Validate the BGP info" + import_tasks: bgp_validation.yaml +- name: "Validate the VLT info" + import_tasks: vlt_validation.yaml +- name: "Validate the MTU info for lldp neigbors" + import_tasks: mtu_validation.yaml diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/mtu_validation.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/mtu_validation.yaml new file mode 100644 index 00000000..fbc58538 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/mtu_validation.yaml @@ -0,0 +1,32 @@ +--- +- name: "Get Dell EMC OS10 MTU mismatch info" + os10_command: + commands: + - command: "show lldp neighbors" + - command: "show ip interface brief | display-xml" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_output +- name: "set fact to form database" + set_fact: + output_mtu: "{{ output_mtu|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, 'stdout_show_lldp': item.stdout.0, 'stdout_show_ip': item.stdout.1 }] }}" + loop: "{{ show_output.results }}" +- name: "debug the output database" + debug: var=output_mtu +- name: call lib to convert ip interface info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.stdout_show_ip }}" + with_items: "{{ output_mtu }}" + register: show_ip_intf_list +- name: "Get Dell EMC OS10 Show system" + import_role: + name: os10_fabric_summary + register: show_system_network_summary +- name: "call lib to process" + mtu_validate: + show_lldp_neighbors_list: "{{ output_mtu }}" + show_system_network_summary: "{{ show_system_network_summary.msg.results }}" + show_ip_intf_brief: "{{ show_ip_intf_list.results }}" + register: mtu_validation +- name: "debug mtu validation result" + debug: var=mtu_validation.msg.results diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/vlt_validation.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/vlt_validation.yaml new file mode 100644 index 00000000..1a673e19 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/vlt_validation.yaml @@ -0,0 +1,44 @@ +--- +- name: "Get Dell EMC OS10 Show run vlt" + os10_command: + commands: + - command: "show running-configuration vlt | grep vlt-domain" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_run_vlt +- name: "set fact to form show vlt database" + set_fact: + output_vlt: "{{ output_vlt|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, 'stdout_show_vlt': item.stdout.0}] }}" + loop: "{{ show_run_vlt.results }}" +- name: "debug output_vlt" + debug: var=output_vlt +- name: "Get Dell EMC OS10 Show vlt info" + os10_command: + commands: + - command: "show vlt {{ item.stdout_show_vlt.split()[1] }} | display-xml" + provider: "{{ hostvars[item.inv_name].cli }}" + with_items: "{{ output_vlt }}" + register: show_vlt +- name: "set fact to form vlt database" + set_fact: + vlt_out: "{{ vlt_out|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, 'show_vlt_stdout': item.stdout.0}] }}" + loop: "{{ show_vlt.results }}" + register: vlt_output +- name: call lib to convert vlt info from xml to dict format + base_xml_to_dict: + cli_responses: "{{ item.show_vlt_stdout }}" + with_items: + - "{{ vlt_out }}" + register: vlt_dict_output +- name: "Get Dell EMC OS10 Show system" + import_role: + name: os10_fabric_summary + register: show_system_network_summary +- name: call lib to process + vlt_validate: + show_vlt: "{{ vlt_dict_output.results }}" + show_system_network_summary: "{{ show_system_network_summary.msg.results }}" + intended_vlt_pairs: "{{ intended_vlt_pairs }}" + register: show_vlt_info +- name: "debug vlt validation result" + debug: var=show_vlt_info.msg.results diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/wiring_validation.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/wiring_validation.yaml new file mode 100644 index 00000000..d89ac18c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tasks/wiring_validation.yaml @@ -0,0 +1,24 @@ +--- +- name: "Get Dell EMC OS10 wiring info" + os10_command: + commands: + - command: "show lldp neighbors" + provider: "{{ hostvars[item].cli }}" + with_items: "{{ groups['all'] }}" + register: show_lldp +- name: "set facts to form lldp db" + set_fact: + output_lldp: "{{ output_lldp|default([])+ [{'host': item.invocation.module_args.provider.host, 'inv_name': item.item, 'stdout_show_lldp': item.stdout}] }}" + loop: "{{ show_lldp.results }}" +- name: "Get Dell EMC OS10 Show system" + import_role: + name: os10_fabric_summary + register: show_system_network_summary +- name: call lib to process + wiring_validate: + show_lldp_neighbors_list: "{{ output_lldp }}" + show_system_network_summary: "{{ show_system_network_summary.msg.results }}" + planned_neighbors: "{{ intended_neighbors }}" + register: wiring_validation +- name: "debug the wiring validation results" + debug: var=wiring_validation.msg.results diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/group_vars/all b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/group_vars/all new file mode 100644 index 00000000..01c4856e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/group_vars/all @@ -0,0 +1,30 @@ +#wiring_validation input +intended_neighbors: + - source_switch: site1-spine1 + source_port: ethernet1/1/1 + dest_port: ethernet1/1/1 + dest_switch: site1-spine2 + - source_switch: site2-spine1 + source_port: ethernet1/1/1 + dest_port: ethernet1/1/1 + dest_switch: site2-spine2 + - source_switch: site1-spine1 + source_port: ethernet1/1/1 + dest_port: ethernet1/1/2 + dest_switch: site2-spine1 + - source_switch: site1-spine1 + source_port: ethernet1/1/2 + dest_port: ethernet1/1/2 + dest_switch: site2-spine2 +#bgp_validation input +intended_bgp_neighbors: + - source_switch: site1-spine1 + neighbor_ip: ["10.11.0.1", "10.9.0.1", "10.9.0.3", "10.9.0.5", "1.1.1.1"] + - source_switch: site1-spine2 + neighbor_ip: ["10.11.0.0", "10.9.0.9", "10.9.0.11", "10.9.0.15"] +#vlt_validation input +intended_vlt_pairs: + - primary: site1-spine1 + secondary: site1-spine2 + - primary: site2-spine1 + secondary: site2-spine2 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site1-spine1 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site1-spine1 new file mode 100644 index 00000000..1f450079 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site1-spine1 @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site1-spine2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site1-spine2 new file mode 100644 index 00000000..1f450079 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site1-spine2 @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site2-spine1 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site2-spine1 new file mode 100644 index 00000000..1f450079 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site2-spine1 @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site2-spine2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site2-spine2 new file mode 100644 index 00000000..1f450079 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/host_vars/site2-spine2 @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/inventory.yaml new file mode 100644 index 00000000..d1838947 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/inventory.yaml @@ -0,0 +1,14 @@ +--- +site1-spine1 ansible_host=10.11.180.21 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 +site1-spine2 ansible_host=10.11.180.22 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 +site2-spine1 ansible_host=10.11.180.24 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 +site2-spine2 ansible_host=10.11.180.23 os10_cli_user=admin os10_cli_pass=admin ansible_network_os=dellemc.os10.os10 + +[spine] +site1-spine1 +site1-spine2 +site2-spine1 +site2-spine2 + +[LeafAndSpineSwitch:children] +spine diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/main.yaml new file mode 100644 index 00000000..1f450079 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/main.yaml @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +cli: + host: "{{ ansible_host }}" + username: "{{ os10_cli_user | default('admin') }}" + password: "{{ os10_cli_pass | default('admin') }}" + timeout: 300 + +os10_cli_user: xxxx +os10_cli_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/test.yaml new file mode 100644 index 00000000..aff21dfe --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_network_validation/tests/test.yaml @@ -0,0 +1,56 @@ +--- +# Sample playbook to validate network validation role +- name: setup network validation + hosts: localhost + gather_facts: False + connection: local + roles: + - dellemc.os10.os10_network_validation + +# Sample playbook to validate wiring validation +- name: setup play for wiring validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: wiring_validation.yaml + +# Sample playbook to validate bgp validation +- name: setup playbook to validate bgp validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: bgp_validation.yaml + +# Sample playbook to validate vlt validation +- name: setup playbook to validate vlt validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: vlt_validation.yaml + +# Sample playbook to validate mtu validation +- name: setup playbook to validate mtu validation + hosts: localhost + gather_facts: False + connection: local + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_network_validation + tasks_from: mtu_validation.yaml diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/README.md new file mode 100644 index 00000000..1fa151de --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/README.md @@ -0,0 +1,116 @@ +NTP role +======== + +This role facilitates the configuration of network time protocol (NTP) attributes. It specifically enables configuration of NTP server, NTP source, authentication, and broadcast service. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The NTP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_ntp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``server`` | list | Configures the NTP server (see ``server.*``) | os10 | +| ``server.ip`` | string (required) | Configures an IPv4 address for the NTP server (A.B.C.D format) | os10 | +| ``server.key`` | integer | Configures the peer authentication key for the NTP server | os10 | +| ``server.prefer`` | boolean | Configures the peer preference | os10 | +| ``server.state`` | string: absent,present\* | Deletes the NTP server if set to absent | os10 | +| ``source`` | string | Configures the interface for the source address | os10 | +| ``master`` | integer | Configures the local clock to act as the server | os10 | +| ``authenticate`` | boolean | Configures authenticate time sources | os10 | +| ``authentication_key`` | list | Configures authentication key for trusted time sources (see ``authentication_key.*``) | os10 | +| ``authentication_key.key_num`` | integer | Configures authentication key number | os10 | +| ``authentication_key.key_string_type`` | integer: 0,7 | Configures hidden authentication key string if the value is 7, and configures unencrypted authentication key string if the value is 0 | os10 | +| ``authentication_key.key_string`` | string | Configures the authentication key string | os10 | +| ``authentication_key.state`` | string: absent,present\* | Deletes the authenticaton key if set to absent | os10 | +| ``trusted_key`` | list | Configures key numbers for trusted time sources (see ``trusted_key.*``) | os10 | +| ``trusted_key.key_num`` | integer | Configures the key number | os10 | +| ``trusted_key.state`` | string: absent,present\* | Deletes the trusted key if set to absent | os10 | +| ``intf`` | dictionary | Configures NTP on the interface (see ``intf.*``) | os10 | +| ``intf.<interface name>`` | dictionary | Configures NTP on the interface (see ``<interface name>.*``) | os10 | +| ``<interface name>.disable`` | boolean | Configures NTP disable on the interface | os10 | +| ``<interface name>.broadcast`` | boolean | Configures NTP broadcast client service on the interface | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_ntp* role to set the NTP server, source ip, authentication and broadcast service. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When the `os10_cfg_generate` variable is set to true, it generates the configuration commands as a .part file in *build_dir* path. By default it is set to false. The example writes a simple playbook that only references the *os10_ntp* role. + +By including the role, you automatically get access to all of the tasks to configure NTP attributes. The sample *host_vars* is for os10. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + host: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_ntp: + source: ethernet 1/1/2 + master: 5 + authenticate: true + authentication_key: + - key_num: 123 + key_string_type: 7 + key_string: test + state: present + trusted_key: + - key_num: 1323 + state: present + server: + - ip: 2.2.2.2 + key: 345 + prefer: true + state: present + intf: + ethernet 1/1/2: + disable: true + broadcast: true + +**Simple playbook to setup NTP — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_ntp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/defaults/main.yml new file mode 100644 index 00000000..7d2d8eee --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_ntp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/handlers/main.yml new file mode 100644 index 00000000..965f50b5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_ntp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/meta/main.yml new file mode 100644 index 00000000..3befe0cd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_ntp role facilitates the configuration of NTP attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tasks/main.yml new file mode 100644 index 00000000..e60abf26 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating NTP configuration for os10" + template: + src: os10_ntp.j2 + dest: "{{ build_dir }}/ntp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning NTP configuration for os10" + os10_config: + src: os10_ntp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/templates/os10_ntp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/templates/os10_ntp.j2 new file mode 100644 index 00000000..7a6cdc22 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/templates/os10_ntp.j2 @@ -0,0 +1,117 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +Purpose: +Configure NTP commands for os10 Devices +os10_ntp: + source: ethernet 1/1/2 + master: 5 + authenticate: true + authentication_key: + - key_num: 123 + key_string_type: 7 + key_string: test + state: present + trusted_key: + - key_num: 1323 + state: present + server: + - ip: 2.2.2.2 + key: 345 + prefer: true + state: present + intf: + ethernet 1/1/2: + disable: true + broadcast: true +###############################################} +{% if os10_ntp is defined and os10_ntp %} + {% if os10_ntp.source is defined %} + {% if os10_ntp.source %} +ntp source {{ os10_ntp.source }} + {% else %} +no ntp source + {% endif %} + {% endif %} + {% if os10_ntp.master is defined %} + {% if os10_ntp.master %} +ntp master {{ os10_ntp.master }} + {% else %} +no ntp master + {% endif %} + {% endif %} + {% if os10_ntp.authenticate is defined %} + {% if os10_ntp.authenticate %} +ntp authenticate + {% else %} +no ntp authenticate + {% endif %} + {% endif %} + {% if os10_ntp.server is defined and os10_ntp.server %} + {% for item in os10_ntp.server %} + {% if item.ip is defined and item.ip %} + {% if item.state is defined and item.state == "absent" %} +no ntp server {{ item.ip }} + {% else %} + {% if item.key is defined and item.key %} + {% if item.prefer is defined and item.prefer %} +ntp server {{ item.ip }} key {{ item.key }} prefer + {% else %} +ntp server {{ item.ip }} key {{ item.key }} + {% endif %} + {% else %} + {% if item.prefer is defined and item.prefer %} +ntp server {{ item.ip }} prefer + {% else %} +ntp server {{ item.ip }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if os10_ntp.authentication_key is defined and os10_ntp.authentication_key %} + {% for item in os10_ntp.authentication_key %} + {% if item.key_num is defined and item.key_num %} + {% if item.state is defined and item.state == "absent" %} +no ntp authentication-key {{ item.key_num }} + {% else %} + {% if item.key_string_type is defined and item.key_string_type >= 0 %} + {% if item.key_string is defined and item.key_string %} +ntp authentication-key {{ item.key_num }} md5 {{ item.key_string_type }} {{ item.key_string }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if os10_ntp.trusted_key is defined and os10_ntp.trusted_key %} + {% for item in os10_ntp.trusted_key %} + {% if item.key_num is defined and item.key_num %} + {% if item.state is defined and item.state == "absent" %} +no ntp trusted-key {{ item.key_num }} + {% else %} +ntp trusted-key {{ item.key_num }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if os10_ntp.intf is defined and os10_ntp.intf %} + {% for key in os10_ntp.intf.keys() %} +interface {{ key }} + {% if os10_ntp.intf[key].disable is defined %} + {% if os10_ntp.intf[key].disable %} + ntp disable + {% else %} + no ntp disable + {% endif %} + {% endif %} + {% if os10_ntp.intf[key].broadcast is defined %} + {% if os10_ntp.intf[key].broadcast %} + ntp broadcast client + {% else %} + no ntp broadcast client + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/inventory b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/inventory new file mode 100644 index 00000000..85a255f9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/inventory @@ -0,0 +1,2 @@ +--- +localhost diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/main.os10.yaml new file mode 100644 index 00000000..cc2a9b09 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/main.os10.yaml @@ -0,0 +1,25 @@ +--- +# vars file for dellemc.os10.os10_ntp, +# below gives a sample configuration +# Sample variables for OS10 device +os10_ntp: + source: ethernet 1/1/2 + master: 5 + authenticate: true + authentication_key: + - key_num: 123 + key_string_type: 0 + key_string: test + state: present + trusted_key: + - key_num: 1323 + state: present + server: + - ip: 2.2.2.2 + key: 345 + prefer: true + state: present + intf: + ethernet 1/1/2: + disable: true + broadcast: true diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/test.yml new file mode 100644 index 00000000..dce69c7b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + connection: network_cli + roles: + - dellemc.os10.os10_ntp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/vars/main.yml new file mode 100644 index 00000000..e90d53c0 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_ntp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_ntp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/README.md new file mode 100644 index 00000000..d0a3128d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/README.md @@ -0,0 +1,104 @@ +Prefix-list role +================ + +This role facilitates the configuration of a prefix-list. It supports the configuration of an IP prefix-list, and assigns the prefix-list to line terminals. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The prefix-list role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` value +- If `os10_cfg_generate` set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_prefix_list keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``type`` | string (required): ipv4,ipv6 | Configures an L3 (IPv4/IPv6) prefix-list | os10 | +| ``name`` | string (required) | Configures the prefix-list name | os10 | +| ``description`` | string | Configures the prefix-list description | os10 | +| ``entries`` | list | Configures rules in the prefix-list (see ``seqlist.*``) | os10 | +| ``entries.number`` | int (required) | Specifies the sequence number of the prefix-list rule | os10 | +| ``entries.permit`` | boolean (required): true,false | Specifies the rule to permit packets if set to true, and specifies to reject packets if set to false | os10 | +| ``entries.net_num`` | string (required) | Specifies the network number | os10 | +| ``entries.mask`` | string (required) | Specifies the mask | os10 | +| ``entries.condition_list`` | list | Configures conditions to filter packets (see ``condition_list.*``)| os10 | +| ``condition_list.condition`` | list | Specifies the condition to filter packets from the source address | os10 | +| ``condition_list.prelen`` | string (required) | Specifies the allowed prefix length | os10 | +| ``entries.state`` | string: absent,present\* | Deletes the rule from the prefix-list if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the prefix-list if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_prefix_list* role to configure prefix-list for both IPv4 and IPv6. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_prefix_list* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_prefix_list: + - name: testpl + type: ipv4 + description: pl + entries: + - number: 19 + permit: true + net_num: 20.0.0.0 + mask: 16 + condition_list: + - condition: ge + prelen: 17 + - condition: le + prelen: 18 + state: present + state: present + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_prefix_list + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/defaults/main.yml new file mode 100644 index 00000000..8d218029 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_prefix_list diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/handlers/main.yml new file mode 100644 index 00000000..72b64726 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_prefix_list diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/meta/.galaxy_install_info b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/meta/.galaxy_install_info new file mode 100644 index 00000000..ccddfc42 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/meta/.galaxy_install_info @@ -0,0 +1 @@ +{install_date: 'Fri Mar 10 15:35:29 2017', version: v1.0.1} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/meta/main.yml new file mode 100644 index 00000000..287ff507 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/meta/main.yml @@ -0,0 +1,16 @@ +# Copyright (c) 2017-2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_prefix_list role facilitates the configuration of prefix list attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tasks/main.yml new file mode 100644 index 00000000..449b80ba --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating prefix list configuration for os10" + template: + src: os10_prefix_list.j2 + dest: "{{ build_dir }}/prefixlist10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning prefix list configuration for os10" + os10_config: + src: os10_prefix_list.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/templates/os10_prefix_list.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/templates/os10_prefix_list.j2 new file mode 100644 index 00000000..fe598331 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/templates/os10_prefix_list.j2 @@ -0,0 +1,95 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{#################################### +Purpose: +Configure pl on OS10 devices +os10_prefix_list: + - name: testpl + type: ipv4 + description: pl + entries: + - number: 19 + permit: true + net_num: 20.0.0.0 + mask: 16 + condition_list: + - condition: ge + prelen: 17 + - condition: le + prelen: 18 + state: present + state: present +#####################################} +{% if (os10_prefix_list is defined and os10_prefix_list) %} + {% for val in os10_prefix_list %} + {% if val.name is defined and val.name %} + {% if val.state is defined and val.state == "absent" %} + {% if val.type is defined and val.type == "ipv4" %} +no ip prefix-list {{ val.name }} + {% elif val.type is defined and val.type == "ipv6" %} +no ipv6 prefix-list {{ val.name }} + {% endif %} + {% else %} + {% if val.type is defined and val.type == "ipv4" %} + {% set ip = "ip" %} + {% elif val.type is defined and val.type == "ipv6" %} + {% set ip = "ipv6" %} + {% endif %} + {% if val.description is defined %} + {% if val.description %} +{{ ip }} prefix-list {{ val.name }} description {{ val.description }} + {% else %} +no {{ ip }} prefix-list {{ val.name }} description {{ val.description }} + {% endif %} + {% endif %} + {% if val.entries is defined and val.entries %} + {% for rule in val.entries %} + {% if rule.number is defined and rule.number %} + {% if rule.state is defined %} + {% if rule.state == "absent" %} +no {{ ip }} prefix-list {{ val.name }} seq {{ rule.number }} + {% else %} + {% if rule.permit is defined %} + {% if rule.permit %} + {% set is_permit = "permit" %} + {% else %} + {% set is_permit = "deny" %} + {% endif %} + {% endif %} + {% if rule.net_num is defined and rule.net_num %} + {% if rule.mask is defined %} + {% if rule.mask or rule.mask == 0 %} + {% if rule.condition_list is defined and rule.condition_list %} + {% set condition_string = [' '] %} + {% set item = "" %} + {% if rule.condition_list | length > 1 %} + {% for condition in rule.condition_list %} + {% if rule.condition_list[0].condition == "ge" and rule.condition_list[1].condition == "le" %} + {% set item = condition_string[0] + condition.condition + ' ' + condition.prelen|string + ' ' %} + {% endif %} + {% if condition_string.insert(0,item) %} {% endif %} + {% endfor %} + {% else %} + {% for condition in rule.condition_list %} + {% if rule.condition_list[0].condition == "ge" or rule.condition_list[0].condition == "le" %} + {% set item = condition_string[0] + condition.condition + ' ' + condition.prelen|string + ' ' +%} + {% endif %} + {% if condition_string.insert(0,item) %} {% endif %} + {% endfor %} + {% endif %} +{{ ip }} prefix-list {{ val.name }} seq {{ rule.number }} {{ is_permit }} {{ rule.net_num }}/{{ rule.mask }}{{ condition_string[0] }} + {% else %} +{{ ip }} prefix-list {{ val.name }} seq {{ rule.number}} {{ is_permit }} {{ rule.net_num }}/{{ rule.mask }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/main.os10.yaml new file mode 100644 index 00000000..3e8250fd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/main.os10.yaml @@ -0,0 +1,20 @@ +--- +# vars file for dellemc.os10.os10_prefix_list, +# below gives a sample configuration +# Sample variables for OS10 device +os10_prefix_list: + - name: testpl + type: ipv4 + description: pl + entries: + - number: 19 + permit: true + net_num: 20.0.0.0 + mask: 16 + condition_list: + - condition: ge + prelen: 17 + - condition: le + prelen: 18 + state: present + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/test.yaml new file mode 100644 index 00000000..46fb739a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_prefix_list diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/vars/main.yml new file mode 100644 index 00000000..bcff7f3f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_prefix_list/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_prefix_list diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/README.md new file mode 100644 index 00000000..e8588a38 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/README.md @@ -0,0 +1,90 @@ +QoS role +======== + +This role facilitates the configuration quality of service (QoS) attributes like policy-map and class-map. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The QoS role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_qos keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``policy_map`` | list | Configures the policy-map (see ``policy_map.*``) | os10 | +| ``policy_map.name`` | string (required) | Configures the policy-map name | os10 | +| ``policy_map.type`` | string: qos\*, application, control-plane, network-qos, queuing in os10 | Configures the policy-map type | os10 | +| ``policy_map.state`` | string: present\*,absent | Deletes the policy-map if set to absent | os10 | +| ``class_map`` | list | Configures the class-map (see ``class_map.*``) | os10 | +| ``class_map.name`` | string (required) | Configures the class-map name | os10 | +| ``class_map.type`` | string: qos\*,application,control-plane,network-qos,queuing | Configures the class-map type | os10 | +| ``class_map.state`` | string: present\*,absent | Deletes the class-map if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_qos* role to configure the policy-map class-map. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_qos* role. By including the role, you automatically get access to all of the tasks to configure QoS features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_qos: + policy_map: + - name: testpolicy + type: qos + state: present + class_map: + - name: testclass + type: application + state: present + +**Simple playbook to setup qos — leaf.yaml** + + - hosts: leaf1 + roles: + - Dell-Networking.os10.os10_qos + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/defaults/main.yml new file mode 100644 index 00000000..447b4329 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/defaults/main.yml @@ -0,0 +1,5 @@ +--- +# defaults file for os10_qos +match_type: + match_all: match-all + match_any: match-any diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/handlers/main.yml new file mode 100644 index 00000000..43fd82c7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for os10_qos diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/meta/main.yml new file mode 100644 index 00000000..0b07e1d9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/meta/main.yml @@ -0,0 +1,17 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_qos role facilitates the configuration of qos attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tasks/main.yml new file mode 100644 index 00000000..6921f69a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for Dellos10 + - name: "Provisioning Qos configuration for os10" + os10_config: + src: os10_qos.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output + + - name: "Generating Qos configuration for os10" + template: + src: os10_qos.j2 + dest: "{{ build_dir }}/qos10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/templates/os10_qos.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/templates/os10_qos.j2 new file mode 100644 index 00000000..a94c5415 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/templates/os10_qos.j2 @@ -0,0 +1,48 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{##################################################### +Purpose: +Configure qos commands for os10 Devices. +os10_qos: + policy_map: + - name: testpolicy + type: qos + state: present + class_map: + - name: testclass + type: application + state: present +#####################################################} +{% if os10_qos is defined and os10_qos %} +{% for key in os10_qos.keys() %} + {% if key =="policy_map" %} + {% for vars in os10_qos[key] %} + {% if vars.name is defined and vars.name %} + {% if vars.state is defined and vars.state == "absent" %} +no policy-map {{ vars.name }} + {% else %} + {% if vars.type is defined and vars.type %} +policy-map type {{ vars.type }} {{ vars.name }} + {% else %} +policy-map type qos {{ vars.name }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% elif key =="class_map" %} + {% for vars in os10_qos[key] %} + {% if vars.name is defined and vars.name %} + {% if vars.state is defined and vars.state == "absent" %} +no class-map {{ vars.name }} + {% else %} + {% if vars.type is defined and vars.type %} +class-map type {{ vars.type }} {{ vars.name }} + {% else %} +class-map type qos {{ vars.name }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/inventory b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/inventory new file mode 100644 index 00000000..85a255f9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/inventory @@ -0,0 +1,2 @@ +--- +localhost diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/main.os10.yaml new file mode 100644 index 00000000..191d94ce --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/main.os10.yaml @@ -0,0 +1,11 @@ +--- +# Sample variables for OS10 device +os10_qos: + policy_map: + - name: testpolicy + type: qos + state: present + class_map: + - name: testclas + type: qos + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/test.yml new file mode 100644 index 00000000..4107ee81 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + connection: network_cli + roles: + - os10_qos diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/vars/main.yml new file mode 100644 index 00000000..ecee178e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_qos/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for os10_qos diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/README.md new file mode 100644 index 00000000..eb6c05c5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/README.md @@ -0,0 +1,126 @@ +IPv6 RA uard role +=================== + +This role facilitates the configuration of IPv6 RA Guard attributes. It specifically enables configuration of IPv6 RA Guard feature enable/disable, IPv6 RA Guard policy definition and policy parameter configuration, and attachment of IPv6 RA Guard policy to an interface. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The IPv6 RA Guard role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_raguard keys** + + +| Key | Type | Description |Support | +|--------------------------------------|-------------------------|----------------------------------------------------------|---------| +| ``enable`` | boolean | Enables IPv6 RA-Guard feature | os10 | +| ``policy`` | list | Configures the IPv6 RA Guard policy (see ``policy.*``) | os10 | +| ``policy.state`` | string: absent/present\*| Deletes the policy if set to absent | os10 | +| ``policy.name`` | string (required) | Configures the IPv6 RA Guard policy name | os10 | +| ``policy.device_role.value`` | string (required) | Configures the device role for a policy | os10 | +| ``policy.device_role.state`` | string: absent,present\*| Deletes the device role if set to absent | os10 | +| ``policy.managed_config_flag.value`` | string | Configures the managed config flag param for a policy | os10 | +| ``policy.managed_config_flag.state`` | string: absent,present\*| Deletes the managed config flag if set to absent | os10 | +| ``policy.other_config_flag.value`` | string | Configures the other config flag param for a policy | os10 | +| ``policy.other_config_flag.state`` | string: absent,present\*| Deletes the other config flag if set to absent | os10 | +| ``policy.mtu.value`` | integer | Configures the MTU param for a policy | os10 | +| ``policy.mtu.state`` | string: absent,present\*| Deletes the MTU if set to absent | os10 | +| ``policy.reachable_time.value`` | integer | Configures the reachable time param for a policy | os10 | +| ``policy.reachable_time.state`` | string: absent,present\*| Deletes the reachable time if set to absent | os10 | +| ``policy.retrans_timer.value`` | integer | Configures the retransmit timer param for a policy | os10 | +| ``policy.retrans_timer.state`` | string: absent,present\*| Deletes the retransmit timer if set to absent | os10 | +| ``policy.router_lifetime.value`` | integer | Configures the router lifetime param for a policy | os10 | +| ``policy.router_lifetime.state`` | string: absent,present\*| Deletes the router lifetime if set to absent | os10 | +| ``policy.router_preference.value`` | string | Configures the router preference param for a policy | os10 | +| ``policy.router_preference.state`` | string: absent,present\*| Deletes the router preference if set to absent | os10 | +| ``policy.match`` | list | Configures the prefix/ACL/MAC list param for a policy | os10 | +| ``policy.match.type`` | string | Configures the prefix/ACL/MAC type for a policy | os10 | +| ``policy.match.name`` | string | Configures the prefix/ACL/MAC name for a policy | os10 | +| ``policy.match.state`` | string: absent,present\*| Deletes the prefix/ACL/MAC if set to absent | os10 | +| ``intf`` | dictionary | Configures IPv6 RA Guard on the interface (see``intf.*``) | os10 | +| ``intf.<interface name>`` | dictionary | Configures RA Guard on the interface (see``<interface name>.*``)| os10 | +| ``<interface name>.policy_name`` | String | Configures RA Guard policy name to be attached on an interface | os10 | +| ``<interface name>.vlan`` | String | Configures VLAN name to which policy to be attached on an interface| os10| +| ``<interface name>.state`` | String: absent,present\*| Deletes the policy if set to absent an interface | os10| + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_raguard* role to configure the IPv6 RA Guard feature enable/disable, IPv6 RA Guard Policy defination and policy parameter configuration, Attachment of IPv6 RA Guard policy to an interface. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, it generates the configuration commands as a .part file in *build_dir* path. By default it is set to false. The example writes a simple playbook that only references the *os10_raguard* role. By including the role, you automatically get access to all of the tasks to configure IPv6 RA Guard attributes. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + host: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_raguard: + enable: true + policy: + - policy_name: test + device_role: + value: router + state: present + managed_config_flag: + value: "on" + state: present + mtu: + value: 1280 + state: present + match: + - type: prefix_list + name: test_prefix + state: present + state: present + intf: + ethernet 1/1/2: + policy_name: test + vlan: 10 + state: present + +**Simple playbook to setup IPv6 RA Guard — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_raguard + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/defaults/main.yml new file mode 100644 index 00000000..57e6cf6b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_raguard diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/handlers/main.yml new file mode 100644 index 00000000..5b69a797 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_raguard diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/meta/main.yml new file mode 100644 index 00000000..1093615d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_raguard role facilitates the configuration of IPv6 RA Guard attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tasks/main.yml new file mode 100644 index 00000000..f2ccf55a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tasks/main.yml @@ -0,0 +1,17 @@ +--- +# tasks file for dellemc.os10.os10_raguard +# tasks file for os10 + - name: "Generating IPv6 RA Guard configuration for os10" + template: + src: os10_raguard.j2 + dest: "{{ build_dir }}/raguard10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning IPv6 RA Guard configuration for os10" + os10_config: + src: os10_raguard.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/templates/os10_raguard.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/templates/os10_raguard.j2 new file mode 100644 index 00000000..7abc27d0 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/templates/os10_raguard.j2 @@ -0,0 +1,174 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +Purpose: +Configure IPv6 RA Guard commands for OS10 Devices +os10_raguard: + enable: true + policy: + - policy_name: test + device_role: + value: router + state: present + managed_config_flag: + value: "on" + state: present + other_config_flag: + value: "on" + state: present + mtu: + value: 1280 + state: present + reachable_time: + value: 100 + state: present + retrans_timer: + value: 100 + state: present + router_lifetime: + value: 10 + state: present + router_preference: + value: high + state: present + match: + - type: prefix_list + name: test_prefix + state: present + - type: access_list + name: test_access + state: present + - type: mac_list + name: test_mac + state: present + state: present + intf: + ethernet 1/1/2: + policy_name: test + vlan: 10 + state: present + ethernet 1/1/3: + policy_name: test + vlan: all + state: present + ethernet 1/1/4: + policy_name: test + vlan: 10,11,12,15 + state: present +###############################################} +{% if os10_raguard is defined and os10_raguard %} + {% if os10_raguard.enable is defined %} + {% if os10_raguard.enable %} +ipv6 nd ra-guard enable + {% else %} +no ipv6 nd ra-guard enable + {% endif %} + {% endif %} + {% if os10_raguard.policy is defined and os10_raguard.policy %} + {% for item in os10_raguard.policy %} + {% if item.policy_name is defined and item.policy_name %} + {% if item.state is defined and item.state == "absent" %} +no ipv6 nd ra-guard policy {{ item.policy_name }} + {% else %} +ipv6 nd ra-guard policy {{ item.policy_name }} + {% if item.device_role is defined and item.device_role %} + {% if item.device_role.state is defined and item.device_role.state == "absent" %} +no device-role {{ item.device_role }} + {% else %} +device-role {{ item.device_role.value }} + {% endif %} + {% endif %} + {% if item.device_role is defined and item.device_role.value == "router" %} + {% if item.managed_config_flag is defined and item.managed_config_flag %} + {% if item.managed_config_flag.state is defined and item.managed_config_flag.state == "absent" %} +no managed-config-flag {{ item.managed_config_flag.value }} + {% else %} +managed-config-flag {{ item.managed_config_flag.value }} + {% endif %} + {% endif %} + {% if item.other_config_flag is defined and item.other_config_flag %} + {% if item.other_config_flag.state is defined and item.other_config_flag.state == "absent" %} +no other-config-flag {{ item.other_config_flag.value }} + {% else %} +other-config-flag {{ item.other_config_flag.value }} + {% endif %} + {% endif %} + {% if item.mtu is defined and item.mtu %} + {% if item.mtu.state is defined and item.mtu.state == "absent" %} +no mtu {{ item.mtu.value }} + {% else %} +mtu {{ item.mtu.value }} + {% endif %} + {% endif %} + {% if item.reachable_time is defined and item.reachable_time %} + {% if item.reachable_time.state is defined and item.reachable_time.state == "absent" %} +no reachable-time {{ item.reachable_time.value }} + {% else %} +reachable-time {{ item.reachable_time.value }} + {% endif %} + {% endif %} + {% if item.retrans_timer is defined and item.retrans_timer %} + {% if item.retrans_timer.state is defined and item.retrans_timer.state == "absent" %} +no retrans-timer {{ item.retrans_timer.value }} + {% else %} +retrans-timer {{ item.retrans_timer.value }} + {% endif %} + {% endif %} + {% if item.router_lifetime is defined and item.router_lifetime %} + {% if item.router_lifetime.state is defined and item.router_lifetime.state == "absent" %} +no router-lifetime {{ item.router_lifetime.value }} + {% else %} +router-lifetime {{ item.router_lifetime.value }} + {% endif %} + {% endif %} + {% if item.router_preference is defined and item.router_preference %} + {% if item.router_preference.state is defined and item.router_preference.state == "absent" %} +no router-preference maximum + {% else %} +router-preference maximum {{ item.router_preference.value }} + {% endif %} + {% endif %} + {% if item.match is defined and item.match %} + {% for item1 in item.match %} + {% if item1.type is defined %} + {% if item1.type == "prefix_list" %} + {% if item1.state is defined and item1.state == "absent" %} +no match ra ipv6-prefix-list {{ item1.name }} + {% else %} +match ra ipv6-prefix-list {{ item1.name }} + {% endif %} + {% endif %} + {% if item1.type == "access_list" %} + {% if item1.state is defined and item1.state == "absent" %} +no match ra ipv6-access-list {{ item1.name }} + {% else %} +match ra ipv6-access-list {{ item1.name }} + {% endif %} + {% endif %} + {% if item1.type == "mac_list" %} + {% if item1.state is defined and item1.state == "absent" %} +no match ra mac-access-list {{ item1.name }} + {% else %} +match ra mac-access-list {{ item1.name }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if os10_raguard.intf is defined and os10_raguard.intf %} + {% for key in os10_raguard.intf.keys() %} +interface {{ key }} + {% if os10_raguard.intf[key].policy_name is defined and os10_raguard.intf[key].policy_name %} + {% if os10_raguard.intf[key].state is defined and os10_raguard.intf[key].state == "absent" %} +no ipv6 nd ra-guard attach-policy {{ os10_raguard.intf[key].policy_name }} vlan {{ os10_raguard.intf[key].vlan }} + {% else %} +ipv6 nd ra-guard attach-policy {{ os10_raguard.intf[key].policy_name }} vlan {{ os10_raguard.intf[key].vlan }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/inventory.yaml new file mode 100644 index 00000000..85a255f9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/inventory.yaml @@ -0,0 +1,2 @@ +--- +localhost diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/main.os10.yaml new file mode 100644 index 00000000..3d1548c7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/main.os10.yaml @@ -0,0 +1,56 @@ +--- +# vars file for dellemc.os10.os10_raguard, +# below gives a sample configuration +# Sample variables for OS10 device +os10_raguard: + enable: true + policy: + - policy_name: test + device_role: + value: router + state: present + managed_config_flag: + value: "on" + state: present + other_config_flag: + value: "on" + state: present + mtu: + value: 1280 + state: present + reachable_time: + value: 100 + state: present + retrans_timer: + value: 100 + state: present + router_lifetime: + value: 10 + state: present + router_preference: + value: high + state: present + match: + - type: prefix_list + name: test_prefix + state: present + - type: access_list + name: test_access + state: present + - type: mac_list + name: test_mac + state: present + state: present + intf: + ethernet 1/1/2: + policy_name: test + vlan: 10 + state: present + ethernet 1/1/3: + policy_name: test + vlan: all + state: present + ethernet 1/1/4: + policy_name: test + vlan: 10,11,12,15 + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/test.yaml new file mode 100644 index 00000000..7ae62a2c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + connection: network_cli + roles: + - dellemc.os10.os10_raguard diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/vars/main.yml new file mode 100644 index 00000000..172b49cf --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_raguard/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_raguard diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/README.md new file mode 100644 index 00000000..1976df38 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/README.md @@ -0,0 +1,190 @@ +Route-map role +============== + +This role facilitates the configuration of route-map attributes. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The route-map role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_route_map keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``route_map`` | list | Configures the route-map (see ``route_map.*``) | os10 | +| ``route_map.name`` | string (required) | Configures the route-map name | os10 | +| ``route_map.permit`` | boolean | Configures permit/deny set operations | os10 | +| ``route_map.seq_num`` | integer | Configures the sequence number | os10 | +| ``route_map.continue`` | integer | Configures the next sequence number | os10 | +| ``route_map.set`` | dictionary | Configures route-map to set values in the destination routing protocol (see ``set.*``) | os10 | +| ``set.local_pref`` | integer | Configures the BGP local preference path attribute | os10 | +| ``set.metric`` | string | Configures a specific value to add or subtract from the existing metric value ("+ <value>", "- <value>", <value> format) | os10 | +| ``set.metric_type`` | string: internal,type-1,type-2 | Configures the metric type for the destination routing protocol | os10 | +| ``set.origin`` | string: igp,egp,incomplete | Configures the BGP origin attribute | os10 | +| ``set.weight`` | integer | Configures the weight for the BGP route | os10 | +| ``set.comm_list`` | dictionary | Configures the BGP community list (see ``comm_list.*``) | os10 | +| ``comm_list.add`` | string | Adds the community attribute of a BGP update | os10 | +| ``comm_list.delete`` | string | Deletes a community attribute of a BGP update | os10 | +| ``set.community`` | string | Configures the community attribute for a BGP route update | os10 | +| ``set.extcomm_list`` | dictionary | Configures the BGP extcommunity list (see ``extcomm_list.*``) | os10 | +| ``extcomm_list.add`` | string | Adds an extended community attribute of a BGP update | os10 | +| ``extcomm_list.delete`` | string | Deletes the extended community attribute of a BGP update | os10 | +| ``set.extcommunity`` | string | Configures the extended community attribute for a BGP route update | os10 | +| ``set.next_hop`` | list | Configures the next-hop address (see ``next_hop.*``) | os10 | +| ``next_hop.type`` | string: ip,ipv6 | Configures the type of the next-hop address | os10 | +| ``next_hop.address`` | string | Configures the next-hop address | os10 | +| ``next_hop.track_id`` | integer | Configures the object track ID | os10 | +| ``next_hop.state`` | string: present\*,absent | Deletes the next-hop address if set to absent | os10 | +| ``route_map.match`` | list | Configures the route-map to match values from the route table (see ``match.*``) | os10 | +| ``match.ip_type`` | string (required): ipv4,ipv6 | Configures the IPv4/IPv6 address to match | os10 | +| ``match.access_group`` | string | Configures the access-group or list to match | os10 | +| ``match.source_protocol_ebgp`` | string | Configures the source protocol to eBGP to match | os10 | +| ``match.source_protocol_ibgp`` | string | Configures the source protocol to iBGP to match | os10 | +| ``match.source_protocol_evpn`` | string | Configures the source protocol to EVPN to match | os10 | +| ``match.source_protocol_static`` | string | Configures the source protocol to static to match | os10 | +| ``match.source_protocol_connected`` | string | Configures the source protocol to connected to match | os10 | +| ``match.source_protocol_ospf`` | string | Configures the source protocol to OSPF to match | os10 | +| ``match.prefix_list`` | string | Configures the IP prefix-list to match against | os10 | +| ``route_map.state`` | string, choices: present\*,absent | Deletes the route-map if set to absent | os10 | +| ``as_path`` | list | Configures the BGP AS path filter (see ``as_path.*``) | os10 | +| ``as_path.access_list`` | string (required) | Configures the access-list name | os10 | +| ``as_path.permit`` | boolean (required) | Configures an AS path to accept or reject | os10 | +| ``as_path.regex``| string (required) | Configures a regular expression | os10 | +| ``as_path.state`` | string: absent,present\* | deletes the BGP as path filter if set to absent | os10 | +| ``community_list`` | list | Configures a community list entry (see ``community_list.*``) | os10 | +| ``community_list.type`` | string (required): standard,expanded | Configures the type of community-list entry | os10 | +| ``community_list.name`` | string (required) | Configures the name of community-list entry | os10 | +| ``community_list.permit`` | boolean(required) | Configures the community to accept or reject | os10 | +| ``community_list.regex`` | string (required) | Configures the regular expression for extended community list; mutually exclusive with *community_list.community* | os10 | +| ``community_list.community`` | string (required) | Configures a well-known community or community number for standard community list; mutually exclusive with *community_list.regex* | os10 | +| ``community_list.state`` | string: absent,present\* | Deletes the community list entry if set to absent | os10 | +| ``extcommunity_list`` | list | Configures extcommunity-list entry (see ``extcommunity_list.*``) | os10 | +| ``extcommunity_list.type`` | string (required): standard,expanded | Configures the type of extcommunity-list entry | os10 | +| ``extcommunity_list.name`` | string (required) | Configures the name of extcommunity-list entry | os10 | +| ``extcommunity_list.permit`` | boolean(required) | Configures the extcommunity to accept or reject | os10 | +| ``extcommunity_list.regex`` | string (required) | Configures the regular expression for the extended extcommunity list; mutually exclusive with *extcommunity_list.community* | os10 | +| ``extcommunity_list.community`` | string (required) | Configures the extended community for standard community-list; mutually exclusive with *extcommunity_list.regex* | os10 | +| ``extcommunity_list.state`` | string: absent,present\* | Deletes the extcommunity-list entry if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_route_map* role for the route-map, policy-map, and class-map. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_route_map* role. By including the role, you automatically get access to all of the tasks to configure route-map features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_route_map: + as_path: + - access_list: aa + permit: true + regex: www + state: present + community_list: + - type: expanded + name: qq + permit: true + regex: aaa + state: present + - type: standard + name: qqq + permit: false + community: internet + state: present + extcommunity_list: + - type: expanded + name: qq + permit: true + regex: aaa + state: present + - type: standard + name: qqq + permit: false + community: "rt 22:33" + state: present + route_map: + - name: test + permit: true + seq_num: 1 + continue: 20 + match: + - ip_type: ipv4 + access_group: testaccess + prefix_list: testprefix + source_protocol_ebgp: present + source_protocol_ibgp: present + source_protocol_evpn: present + source_protocol_static: present + source_protocol_ospf: present + source_protocol_connected: present + set: + local_pref: 1200 + metric_type: internal + metric: + 30 + origin: igp + weight: 50 + next_hop: + - type: ip + address: 10.1.1.1 + track_id: 3 + state: present + community: internet + comm_list: + add: qq + delete: qqq + extcommunity: "22:33" + extcomm_list: + add: aa + delete: aa + state: present + +**Simple playbook to setup QoS —leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_route_map + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/defaults/main.yml new file mode 100644 index 00000000..a78d55b8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_route_map diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/handlers/main.yml new file mode 100644 index 00000000..ef0b4531 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_route_map diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/meta/main.yml new file mode 100644 index 00000000..b73ddcef --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/meta/main.yml @@ -0,0 +1,17 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_route_map role facilitates the configuration of route map attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - os10 + - dellemc diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tasks/main.yml new file mode 100644 index 00000000..62c94bdd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Provisioning route-map configuration for os10" + os10_config: + src: os10_route_map.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output + + - name: "Generating route map configuration for os10" + template: + src: os10_route_map.j2 + dest: "{{ build_dir }}/routemap10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/templates/os10_route_map.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/templates/os10_route_map.j2 new file mode 100644 index 00000000..bfca3d17 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/templates/os10_route_map.j2 @@ -0,0 +1,348 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{##################################################### +Purpose: +Configure route-map commands for os10 Devices. +os10_route_map: + as_path: + - access_list: aa + permit: true + regex: www + state: present + community_list: + - type: standard + name: qqq + permit: false + community: internet + state: present + extcommunity_list: + - type: standard + name: qqq + permit: false + community: "rt 22:33" + state: present + route_map: + - name: test + permit: true + seq_num: 1 + continue: 20 + match: + - ip_type: ipv4 + access_group: testaccess + prefix_list: testprefix + source_protocol_ebgp: "present" + source_protocol_ibgp: "present" + source_protocol_evpn: "present" + source_protocol_ospf: "present" + source_protocol_static: "present" + source_protocol_connected: "present" + set: + local_pref: 1200 + metric_type: internal + metric: + 30 + origin: igp + weight: 50 + next_hop: + - type: ip + address: 10.1.1.1 + track_id: 3 + state: present + community: internet + comm_list: + add: qq + delete: qqq + extcommunity: "22:33" + extcomm_list: + add: aa + delete: aa + state: present +#####################################################} +{% if os10_route_map is defined and os10_route_map %} +{% for key in os10_route_map.keys() %} + {% if key == "route_map" %} + {% for vars in os10_route_map[key] %} + {% if vars.name is defined and vars.name %} + {% if vars.state is defined and vars.state == "absent" %} +no route-map {{ vars.name }} + {% else %} + {% if vars.permit is defined and vars.permit %} + {% if vars.seq_num is defined and vars.seq_num %} +route-map {{ vars.name }} permit {{ vars.seq_num }} + {% else %} +route-map {{ vars.name }} permit 10 + {% endif %} + {% elif vars.permit is defined and not vars.permit %} + {% if vars.seq_num is defined and vars.seq_num %} +route-map {{ vars.name }} deny {{ vars.seq_num }} + {% else %} +route-map {{ vars.name }} deny 10 + {% endif %} + {% else %} + {% if vars.seq_num is defined and vars.seq_num %} +route-map {{ vars.name }} permit {{ vars.seq_num }} + {% else %} +route-map {{ vars.name }} permit 10 + {% endif %} + {% endif %} + {% if vars.set is defined and vars.set %} + {% if vars.set.local_pref is defined %} + {% if vars.set.local_pref %} + set local-preference {{ vars.set.local_pref }} + {% else %} + no set local-preference + {% endif %} + {% endif %} + {% if vars.set.metric_type is defined %} + {% if vars.set.metric_type %} + set metric-type {{ vars.set.metric_type }} + {% else %} + no set metric-type internal + {% endif %} + {% endif %} + {% if vars.set.metric is defined %} + {% if vars.set.metric %} + set metric {{ vars.set.metric }} + {% else %} + no set metric + {% endif %} + {% endif %} + {% if vars.set.origin is defined %} + {% if vars.set.origin %} + set origin {{ vars.set.origin }} + {% else %} + no set origin + {% endif %} + {% endif %} + {% if vars.set.community is defined %} + {% if vars.set.community %} + set community {{ vars.set.community }} + {% else %} + no set community internet + {% endif %} + {% endif %} + {% if vars.set.extcommunity is defined %} + {% if vars.set.extcommunity %} + set extcommunity rt {{ vars.set.extcommunity }} + {% else %} + no set extcommunity rt 11:33 + {% endif %} + {% endif %} + {% if vars.set.weight is defined %} + {% if vars.set.weight %} + set weight {{ vars.set.weight }} + {% else %} + no set weight + {% endif %} + {% endif %} + {% if vars.set.comm_list is defined and vars.set.comm_list %} + {% if vars.set.comm_list.add is defined and vars.set.comm_list.add %} + set comm-list {{ vars.set.comm_list.add }} add + {% else %} + no set comm-list aa add + {% endif %} + {% if vars.set.comm_list.delete is defined and vars.set.comm_list.delete %} + set comm-list {{ vars.set.comm_list.delete }} delete + {% else %} + no set comm-list aa delete + {% endif %} + {% endif %} + {% if vars.set.extcomm_list is defined and vars.set.extcomm_list %} + {% if vars.set.extcomm_list.add is defined and vars.set.extcomm_list.add %} + set extcomm-list {{ vars.set.extcomm_list.add }} add + {% else %} + no set extcomm-list aa add + {% endif %} + {% if vars.set.extcomm_list.delete is defined and vars.set.extcomm_list.delete %} + set extcomm-list {{ vars.set.extcomm_list.delete }} delete + {% else %} + no set extcomm-list aa delete + {% endif %} + {% endif %} + {% if vars.set.next_hop is defined and vars.set.next_hop %} + {% for item in vars.set.next_hop %} + {% if item.type is defined and item.type %} + {% if item.address is defined and item.address %} + {% if item.state is defined and item.state=="absent" %} + no set {{ item.type }} next-hop {{ item.address }} + {% else %} + {% if item.track_id is defined and item.track_id %} + set {{ item.type }} next-hop {{ item.address }} track-id {{ item.track_id }} + {% else %} + set {{ item.type }} next-hop {{ item.address }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% if vars.continue is defined %} + {% if vars.continue %} + continue {{ vars.continue }} + {% else %} + no continue + {% endif %} + {% endif %} + {% if vars.match is defined and vars.match %} + {% for match in vars.match %} + {% if match.ip_type is defined and match.ip_type %} + {% if match.ip_type =="ipv4" %} + {% set ip = "ip" %} + {% else %} + {% set ip = "ipv6" %} + {% endif %} + {% if match.access_group is defined %} + {% if match.access_group %} + match {{ ip }} address {{ match.access_group }} + {% else %} + no match {{ ip }} address a + {% endif %} + {% endif %} + {% if match.prefix_list is defined %} + {% if match.prefix_list %} + match {{ ip }} address prefix-list {{ match.prefix_list }} + {% else %} + no match {{ ip }} address prefix-list a + {% endif %} + {% endif %} + {% endif %} + {% if match.source_protocol_ebgp is defined and match.source_protocol_ebgp %} + {% if match.source_protocol_ebgp == "present" %} + match source-protocol bgp ebgp + {% endif %} + {% if match.source_protocol_ebgp == "absent" %} + no match source-protocol bgp ebgp + {% endif %} + {% endif %} + {% if match.source_protocol_ibgp is defined and match.source_protocol_ibgp %} + {% if match.source_protocol_ibgp == "present" %} + match source-protocol bgp ibgp + {% endif %} + {% if match.source_protocol_ibgp == "absent" %} + no match source-protocol bgp ibgp + {% endif %} + {% endif %} + {% if match.source_protocol_evpn is defined and match.source_protocol_evpn %} + {% if match.source_protocol_evpn == "present" %} + match source-protocol bgp evpn + {% endif %} + {% if match.source_protocol_evpn == "absent" %} + no match source-protocol bgp evpn + {% endif %} + {% endif %} + {% if match.source_protocol_ospf is defined and match.source_protocol_ospf %} + {% if match.source_protocol_ospf == "present" %} + match source-protocol ospf + {% endif %} + {% if match.source_protocol_ospf == "absent" %} + no match source-protocol ospf + {% endif %} + {% endif %} + {% if match.source_protocol_static is defined and match.source_protocol_static %} + {% if match.source_protocol_static == "present" %} + match source-protocol static + {% endif %} + {% if match.source_protocol_static == "absent" %} + no match source-protocol static + {% endif %} + {% endif %} + {% if match.source_protocol_connected is defined and match.source_protocol_connected %} + {% if match.source_protocol_connected == "present" %} + match source-protocol connected + {% endif %} + {% if match.source_protocol_connected == "absent" %} + no match source-protocol connected + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% elif key == "as_path" %} + {% for item in os10_route_map[key] %} + {% if item.access_list is defined and item.access_list %} + {% if item.permit is defined %} + {% if item.permit %} + {% set filter = "permit" %} + {% else %} + {% set filter = "deny" %} + {% endif %} + {% if item.regex is defined and item.regex %} + {% if item.state is defined and item.state == "absent" %} +no ip as-path access-list {{ item.access_list }} {{ filter }} {{ item.regex }} + {% else %} +ip as-path access-list {{ item.access_list }} {{ filter }} {{ item.regex }} + {% endif %} + {% endif %} + {% else %} + {% if item.state is defined and item.state == "absent" %} +no ip as-path access-list {{ item.access_list }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% elif key == "community_list" %} + {% for item in os10_route_map[key] %} + {% if item.type is defined and item.type %} + {% if item.name is defined and item.name %} + {% if item.permit is defined %} + {% if item.permit %} + {% set filter = "permit" %} + {% else %} + {% set filter = "deny" %} + {% endif %} + {% if item.regex is defined and item.regex %} + {% if item.state is defined and item.state == "absent" %} +no ip community-list standard {{ item.name }} {{ filter }} {{ item.regex }} + {% else %} +ip community-list standard {{ item.name }} {{ filter }} {{ item.regex }} + {% endif %} + {% elif item.community is defined and item.community %} + {% if item.state is defined and item.state == "absent" %} +no ip community-list standard {{ item.name }} {{ filter }} {{ item.community }} + {% else %} +ip community-list {{ item.type }} {{ item.name }} {{ filter }} {{ item.community }} + {% endif %} + {% endif %} + {% else %} + {% if item.state is defined and item.state == "absent" %} +no ip community-list standard {{ item.name }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% elif key == "extcommunity_list" %} + {% for item in os10_route_map[key] %} + {% if item.type is defined and item.type %} + {% if item.name is defined and item.name %} + {% if item.permit is defined %} + {% if item.permit %} + {% set filter = "permit" %} + {% else %} + {% set filter = "deny" %} + {% endif %} + {% if item.regex is defined and item.regex %} + {% if item.state is defined and item.state == "absent" %} +no ip extcommunity-list standard {{ item.name }} {{ filter }} {{ item.regex }} + {% else %} +ip extcommunity-list standard {{ item.name }} {{ filter }} {{ item.regex }} + {% endif %} + {% elif item.community is defined and item.community %} + {% if item.state is defined and item.state == "absent" %} +no ip extcommunity-list standard {{ item.name }} {{ filter }} {{ item.community }} + {% else %} +ip extcommunity-list {{ item.type }} {{ item.name }} {{ filter }} {{ item.community }} + {% endif %} + {% endif %} + {% else %} + {% if item.state is defined and item.state == "absent" %} +no ip extcommunity-list standard {{ item.name }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/inventory b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/inventory new file mode 100644 index 00000000..85a255f9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/inventory @@ -0,0 +1,2 @@ +--- +localhost diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/main.yaml new file mode 100644 index 00000000..e791b295 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/main.yaml @@ -0,0 +1,55 @@ +--- +# Sample variables for OS10 device +os10_route_map: + as_path: + - access_list: aa + permit: true + regex: www + state: present + community_list: + - type: standard + name: qqq + permit: false + community: internet + state: present + extcommunity_list: + - type: standard + name: qqq + permit: false + community: "rt 22:33" + state: present + route_map: + - name: test + permit: true + seq_num: 1 + continue: 20 + match: + - ip_type: ipv4 + access_group: testaccess + prefix_list: testprefix + source_protocol_ebgp: present + source_protocol_ibgp: present + source_protocol_evpn: present + source_protocol_static: present + source_protocol_ospf: present + source_protocol_connected: present + set: + local_pref: 1200 + metric_type: internal + metric: + 30 + origin: igp + weight: 50 + next_hop: + - type: ip + address: 10.1.1.1 + track_id: 3 + state: present + community: internet + comm_list: + add: qq + delete: qqq + extcommunity: "22:33" + extcomm_list: + add: aa + delete: aa + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/test.yml new file mode 100644 index 00000000..4302a12d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: localhost + connection: network_cli + roles: + - dellemc.os10.os10_route_map diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/vars/main.yml new file mode 100644 index 00000000..ff4a48ac --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_route_map/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_route_map diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/README.md new file mode 100644 index 00000000..e5eb0512 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/README.md @@ -0,0 +1,122 @@ +SNMP role +========= + +This role facilitates the configuration of global SNMP attributes. It supports the configuration of SNMP server attributes including users, group, community, location, and traps. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The SNMP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_snmp keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``snmp_contact`` | string | Configures SNMP contact information | os10 | +| ``snmp_location`` | string | Configures SNMP location information | os10 | +| ``snmp_community`` | list | Configures SNMP community information (see ``snmp_community.*``) | os10 | +| ``snmp_community.name`` | string (required) | Configures the SNMP community string | os10 | +| ``snmp_community.access_mode`` | string: ro,rw | Configures access-mode for the community | os10 | +| ``snmp_community.state`` | string: absent,present\* | Deletes the SNMP community information if set to absent | os10 | +| ``snmp_host`` | list | Configures SNMP hosts to receive SNMP traps (see ``snmp_host.*``) | os10 | +| ``snmp_host.ip`` | string | Configures the IP address of the SNMP trap host | os10 | +| ``snmp_host.communitystring`` | string | Configures the SNMP community string of the trap host | os10 | +| ``snmp_host.udpport`` | string | Configures the UDP number of the SNMP trap host (0 to 65535) | os10 | +| ``snmp_host.version`` | string (required) | Specifies the SNMP version of the host (1 or 2c in os10) | os10 | +| ``snmp_host.state`` | string: absent,present\* | Deletes the SNMP trap host if set to absent | os10 | +| ``snmp_traps`` | list | Configures SNMP traps (see ``snmp_traps.*``) | os10 | +| ``snmp_traps.name`` | string | Enables SNMP traps | os10 | +| ``snmp_traps.state`` | string: absent,present\* | Deletes the SNMP trap if set to absent | os10 | +| ``snmp_view`` | list | Configures SNMPv3 view information (see ``snmp_view.*``) | os10 | +| ``snmp_view.name`` | string | Configures the SNMP view name (up to 20 characters) | os10 | +| ``snmp_view.oid_subtree`` | integer | Configures the SNMP view for the OID subtree | os10 | +| ``snmp_view.include`` | boolean: true,false | Specifies if the MIB family should be included or excluded from the view | os10 | +| ``snmp_view.state`` | string: absent,present\* | Deletes the SNMP view if set to absent | os10 | + + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_snmp* role to completely set up the SNMP server attributes. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_snmp* role. By including the role, you automatically get access to all of the tasks to configure SNMP features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_snmp: + snmp_contact: test + snmp_location: Chennai + snmp_community: + - name: public + access_mode: ro + state: present + snmp_traps: + - name: all + state: present + snmp_view: + - name: view_1 + oid_subtree: 2 + include: true + state: absent + snmp_host: + - ip: 1.1.1.1 + communitystring: c1 + version: "2c" + udpport: 4 + state: present + - ip: 2.2.2.2 + version: 1 + communitystring: c3 + state: present + +**Simple playbook to setup SNMP — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_snmp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/defaults/main.yml new file mode 100644 index 00000000..81a11877 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_snmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/handlers/main.yml new file mode 100644 index 00000000..1a8a3142 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_snmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/meta/main.yml new file mode 100644 index 00000000..efbf4e40 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_snmp role facilitates the configuration of snmp attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tasks/main.yml new file mode 100644 index 00000000..7ed03578 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating SNMP configuration for os10" + template: + src: os10_snmp.j2 + dest: "{{ build_dir }}/snmp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning SNMP configuration for os10" + os10_config: + src: os10_snmp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/templates/os10_snmp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/templates/os10_snmp.j2 new file mode 100644 index 00000000..65ed9a3f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/templates/os10_snmp.j2 @@ -0,0 +1,134 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +Purpose: +Configure snmp commands for os10 Devices +os10_snmp: + snmp_contact: test + snmp_location: Chennai + snmp_community: + - name: public + access_mode: ro + state: present + snmp_traps: + - name: all + state: present + snmp_view: + - name: view_1 + oid_subtree: 2 + include: true + state: absent + snmp_host: + - ip: 1.1.1.1 + communitystring: c1 + version: "2c" + udpport: 4 + state: present + - ip: 2.2.2.2 + version: 1 + communitystring: c3 + state: present +###############################################} +{% if os10_snmp is defined and os10_snmp %} +{% for key,value in os10_snmp.items() %} + {% if key == "snmp_contact" %} + {% if value %} +snmp-server contact {{ value }} + {% else %} +no snmp-server contact + {% endif %} + + {% elif key == "snmp_location" %} + {% if value %} +snmp-server location {{ value }} + {% else %} +no snmp-server location + {% endif %} + + {% elif key == "snmp_community" %} + {% if value %} + {% for item in value %} + {% if item.name is defined and item.name %} + {% if item.access_mode is defined and item.access_mode %} + {% if item.state is defined and item.state == "absent" %} +no snmp-server community {{ item.name }} {{ item.access_mode }} + {% else %} +snmp-server community {{ item.name }} {{ item.access_mode }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% elif key == "snmp_traps" %} + {% if value %} + {% for val in value %} + {% if val.name is defined and val.name %} + {% if val.state is defined and val.state == "absent" %} + {% if val.name == "all" %} + {% set trap_list = ['snmp authentication','snmp linkdown','snmp linkup','envmon fan','envmon power-supply','envmon temperature'] %} + {% for name in trap_list %} +no snmp-server enable traps {{ name }} + {% endfor %} + {% else %} +no snmp-server enable traps {{ val.name }} + {% endif %} + {% else %} + {% if val.name == "all" %} + {% set trap_list = ['snmp authentication','snmp linkdown','snmp linkup','envmon fan','envmon power-supply','envmon temperature'] %} + {% for name in trap_list %} +snmp-server enable traps {{ name }} + {% endfor %} + {% else %} +snmp-server enable traps {{ val.name }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% elif key == "snmp_view" %} + {% if value %} + {% for item in value %} + {% if item.name is defined and item.name %} + {% if item.oid_subtree is defined and item.oid_subtree %} + {% if item.state is defined and item.state == "absent" %} +no snmp-server view {{ item.name }} {{ item.oid_subtree }} + {% else %} + {% if item.include is defined %} + {% if item.include %} +snmp-server view {{ item.name }} {{ item.oid_subtree }} included + {% elif not item.include %} +snmp-server view {{ item.name }} {{ item.oid_subtree }} excluded + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% elif key == "snmp_host" and value %} + {% for item in value %} + {% if item.ip is defined and item.ip %} + {% if item.version is defined and item.version == 1 or item.version == "2c" %} + {% if item.communitystring is defined and item.communitystring %} + {% if item.udpport is defined and item.udpport %} + {% set my_val = "traps version "+item.version|string+" "+item.communitystring+" udp-port "+item.udpport|string %} + {% else %} + {% set my_val = "traps version "+item.version|string+" "+item.communitystring %} + {% endif %} + {% endif %} + {% endif %} + {% if my_val is defined and my_val %} + {% if item.state is defined and item.state == "absent" %} +no snmp-server host {{ item.ip }} {{ my_val }} + {% else %} +snmp-server host {{ item.ip }} {{ my_val }} + {% endif %} + {% endif %} + {% set my_val = "" %} + {% endif %} + {% endfor%} + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/main.os10.yaml new file mode 100644 index 00000000..bafcc210 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/main.os10.yaml @@ -0,0 +1,29 @@ +--- +# vars file for dellemc.os10.os10_snmp, +# below gives a sample configuration +# Sample variables for OS10 device +os10_snmp: + snmp_contact: test + snmp_location: Chennai + snmp_community: + - name: public + access_mode: ro + state: present + snmp_traps: + - name: all + state: present + snmp_view: + - name: view_1 + oid_subtree: 2 + include: false + state: absent + snmp_host: + - ip: 1.1.1.1 + communitystring: c1 + version: "2c" + udpport: 4 + state: present + - ip: 2.2.2.2 + version: 1 + communitystring: c3 + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/test.yaml new file mode 100644 index 00000000..6b4b4e7e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_snmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/vars/main.yml new file mode 100644 index 00000000..407dad8e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_snmp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_snmp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/README.md new file mode 100644 index 00000000..955d3e76 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/README.md @@ -0,0 +1,126 @@ +System role +=========== + +This role facilitates the configuration of global system attributes. It specifically enables configuration of hostname and hashing algorithm. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The System role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_system keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``hostname`` | string | Configures a hostname to the device (no negate command) | os10 | +| ``hardware_forwarding`` | string: scaled-l2,scaled-l3-routes,scaled-l3-hosts | Configures hardware forwarding mode | os10 | +| ``hash_algo`` | dictionary | Configures hash algorithm commands (see ``hash_algo.*``) | os10 | +| ``hash_algo.algo`` | list | Configures hashing algorithm (see ``algo.*``) | os10 | +| ``algo.name`` | string (required) | Configures the name of the hashing algorithm | os10 | +| ``algo.mode`` | string (required) | Configures the hashing algorithm mode | os10 | +| ``algo.state`` | string: absent,present\* | Deletes the hashing algorithm if set to absent | os10 | +| ``load_balance`` | dictionary | Configures the global traffic load balance (see ``load_balance.*``) | os10 | +| ``load_balance.ingress_port`` | boolean: true,false | Specifies whether to use the source port ID for the hashing algorithm | os10 | +| ``load_balance.ip_selection`` | list | Configures IPv4 key fields to use in hashing algorithm; | os10 | +| ``ip_selection.field`` | string | Configures IPv4 key fields to use in hashing algorithm | os10 | +| ``ip_selection.state`` | string: absent,present\* | Deletes the IPv4 key fields if set to absent | os10 | +| ``load_balance.ipv6_selection`` | list | Configures IPv6 key fields to use in hashing algorithm | os10 | +| ``ipv6_selection.field`` | string | Configures IPv6 key fields to use in hashing algorithm | os10 | +| ``ipv6_selection.state`` | string: absent,present\* | Deletes the IPv6 key fields if set to absent | os10 | +| ``load_balance.mac_selection`` | list | Configures MAC key fields to use in hashing algorithm (see ``mac_selection.*``) | os10 | +| ``mac_selection.field`` | string | Configures MAC key fields to use in hashing algorithm | os10 | +| ``mac_selection.state`` | string: absent,present\* | Deletes the MAC key fields if set to absent | os10 | +| ``load_balance.tcp_udp_selection`` | list | Configures TCP UDP ports for load balancing configurations (see ``tcp_udp_selection.*``) | os10 | +| ``tcp_udp_selection.field`` | string | Configures TCP UDP port fields to use in hashing algorithm | os10 | +| ``tcp_udp_selection.state`` | string: absent,present\* | Deletes the TCP UDP ports if set to absent | os10 | +| ``min_ra`` | string | Configure global RA minimum interval value, applicable to all interfaces across VRFs | os10 | +| ``max_ra`` | string | Configure global RA maximum interval value, applicable to all interfaces across VRFs | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_system role* to completely set the NTP server, hostname, enable password, management route, hash alogrithm, clock, line terminal, banner and reload type. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The system role writes a simple playbook that only references the *os10_system* role. By including the role, you automatically get access to all of the tasks to configure system features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_system: + hostname: os10 + hardware_forwarding: scaled-l3-hosts + hash_algo: + algo: + - name: lag + mode: crc + state: present + - name: ecmp + mode: xor + state: present + load_balance: + ingress_port: true + ip_selection: + - field: source-ip + state: present + ipv6_selection: + - field: source-ip + state: present + mac_selection: + - field: source-mac + state: present + tcp_udp_selection: + - field: l4-source-port + state: present + max_ra: 15 + min_ra: 10 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_system + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/defaults/main.yml new file mode 100644 index 00000000..55924055 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_system diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/handlers/main.yml new file mode 100644 index 00000000..b7913129 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_system diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/meta/main.yml new file mode 100644 index 00000000..588850b6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_system role facilitates the configuration of system attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tasks/main.yml new file mode 100644 index 00000000..5b61c862 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating system configuration for os10" + template: + src: os10_system.j2 + dest: "{{ build_dir }}/system10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning system configuration for os10" + os10_config: + src: os10_system.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/templates/os10_system.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/templates/os10_system.j2 new file mode 100644 index 00000000..95edc2eb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/templates/os10_system.j2 @@ -0,0 +1,130 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# + +Purpose: +Configure system commands for os10 Devices + +os10_system: + hostname: os10 + hardware_forwarding: scaled-l3-routes + hash_algo: + algo: + - name: lag + mode: crc + state: present + - name: ecmp + mode: xor + state: present + load_balance: + ingress_port: true + ip_selection: + - field: source-ip + state: present + ipv6_selection: + - field: source-ip + state: present + mac_selection: + - field: source-mac + state: present + tcp_udp_selection: + - field: l4-source-port + state: present + max_ra: 15 + min_ra: 10 + +###############################################} +{% if os10_system is defined and os10_system %} +{% if os10_system.hostname is defined and os10_system.hostname %} +hostname {{ os10_system.hostname }} +{% endif %} +{% if os10_system.max_ra is defined %} + {% if os10_system.max_ra %} +ipv6 nd max-ra-interval {{ os10_system.max_ra }} + {% else %} +no ipv6 nd max-ra-interval + {% endif %} +{% endif %} +{% if os10_system.min_ra is defined %} + {% if os10_system.min_ra %} +ipv6 nd min-ra-interval {{ os10_system.min_ra }} + {% else %} +no ipv6 nd min-ra-interval + {% endif %} +{% endif %} +{% for key,value in os10_system.items() %} + {% if key == "hardware_forwarding" %} + {% if value %} +hardware forwarding-table mode {{ value }} + {% else %} +no hardware forwarding-table mode + {% endif %} + {% elif key == "hash_algo" and value %} + {% if value.algo is defined and value.algo %} + {% for item in value.algo %} + {% if item.name is defined and item.name %} + {% if item.mode is defined and item.mode %} + {% if item.state is defined and item.state == "absent" %} +no hash-algorithm {{ item.name }} {{ item.mode }} + {% else %} +hash-algorithm {{ item.name }} {{ item.mode }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% elif key == "load_balance" and value %} + {% if value.ingress_port is defined %} + {% if value.ingress_port %} +load-balancing ingress-port enable + {% else %} +no load-balancing ingress-port enable + {% endif %} + {% endif %} + {% if value.ip_selection is defined and value.ip_selection %} + {% for listitem in value.ip_selection %} + {% if listitem.field is defined and listitem.field %} + {% if listitem.state is defined and listitem.state == "absent" %} +no load-balancing ip-selection {{ listitem.field }} + {% else %} +load-balancing ip-selection {{ listitem.field }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if value.ipv6_selection is defined and value.ipv6_selection %} + {% for listitem in value.ipv6_selection %} + {% if listitem.field is defined and listitem.field %} + {% if listitem.state is defined and listitem.state == "absent" %} +no load-balancing ipv6-selection {{ listitem.field }} + {% else %} +load-balancing ipv6-selection {{ listitem.field }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if value.mac_selection is defined and value.mac_selection %} + {% for listitem in value.mac_selection %} + {% if listitem.field is defined and listitem.field %} + {% if listitem.state is defined and listitem.state == "absent" %} +no load-balancing mac-selection {{ listitem.field }} + {% else %} +load-balancing mac-selection {{ listitem.field }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if value.tcp_udp_selection is defined and value.tcp_udp_selection %} + {% for listitem in value.tcp_udp_selection %} + {% if listitem.field is defined and listitem.field %} + {% if listitem.state is defined and listitem.state == "absent" %} +no load-balancing tcp-udp-selection {{ listitem.field }} + {% else %} +load-balancing tcp-udp-selection {{ listitem.field }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/main.os10.yaml new file mode 100644 index 00000000..ea4bc20f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/main.os10.yaml @@ -0,0 +1,31 @@ +--- +# vars file for dellemc.os10.os10_system, +# below gives a sample configuration +# Sample variables for OS10 device +os10_system: + hostname: os10 + hardware_forwarding: scaled-l3-hosts + hash_algo: + algo: + - name: lag + mode: crc + state: present + - name: ecmp + mode: xor + state: present + load_balance: + ingress_port: true + ip_selection: + - field: source-ip + state: present + ipv6_selection: + - field: source-ip + state: present + mac_selection: + - field: source-mac + state: present + tcp_udp_selection: + - field: l4-source-port + state: present + max_ra: 15 + min_ra: 10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/test.yaml new file mode 100644 index 00000000..8674f097 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_system diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/vars/main.yml new file mode 100644 index 00000000..4a69de59 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_system/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_system, diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/README.md new file mode 100644 index 00000000..8369b37f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/README.md @@ -0,0 +1,75 @@ +Template role +============== + +This role provides access to structured data from show commands. This role facilitates the TEXTFSM parsing engine. TextFSM is a template based state machine . It takes the raw string input from the CLI of network devices, run them through a TEXTFSM template and return structured text in the form of a Python dictionary. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Template role is highly customizable, and it works with separate template definitions which contain variables and rules with regular expressions. This library is very helpful to parse any text-based CLI output from network devices. The Template role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- Variables and values are case-sensitive + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_template* role to parse any text-based CLI output. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. All the supported CLI commands are imported as tasks in tasks/main.yml. + +For the *os10_template* role plugins to be used, you may need to specify the actual path of role in *ansible.cfg* file. + +**Sample ansible.cfg** + + action_plugins = ../../plugins/modules/ + + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> ansible_network_os=dellemc.os10.os10 ansible_ssh_user=xxxxx ansible_ssh_pass=xxxxx + + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_template + +**Example playbook to run specific show command — leaf.yaml** + + + --- + - name: PARSE SHOW IP INTERFACE BRIEF + hosts: leaf1 + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_template + tasks_from: show_ip_interface_brief.yaml + + + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/meta/main.yml new file mode 100644 index 00000000..4df1a6b4 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + role_name: os10_template + author: Dell EMC Networking Engineering + description: The os10_template role facilitates to provide the structured output from CLI in devices running on Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/main.yml new file mode 100644 index 00000000..90123a4b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/main.yml @@ -0,0 +1,18 @@ +--- + - name: os10 dellemc.os10.os10_template test + import_tasks: show_ip_interface_brief.yaml + + - name: os10 dellemc.os10.os10_template test + import_tasks: show_port-channel_summary.yaml + + - name: os10 dellemc.os10.os10_template test + import_tasks: show_lldp_neighbors.yaml + + - name: os10 dellemc.os10.os10_template test + import_tasks: show_ip_vrf.yaml + + - name: os10 dellemc.os10.os10_template test + import_tasks: show_ip_bgp_summary.yaml + + - name: os10 dellemc.os10.os10_template test + import_tasks: show_vlan.yaml diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_bgp_summary.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_bgp_summary.yaml new file mode 100644 index 00000000..d2ee2ac7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_bgp_summary.yaml @@ -0,0 +1,21 @@ +--- + - name: CAPTURE SHOW IP BGP SUMMARY + os10_command: + commands: + - show ip bgp summary + register: output + + - name: DISPLAY THE OUTPUT + debug: var=output.stdout + + - name: INSTALL TEXTFSM + import_tasks: textfsm.yaml + + - name: PARSE THE OUTPUT for {{ ansible_network_os }} show_ip_bgp_summary + textfsm_parser: + src: "{{ lookup('file', './templates/os10_show_ip_bgp_summary.template') }}" + content: "{{ output.stdout[0] }}" + name: bgp_facts + register: result + vars: + - ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_interface_brief.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_interface_brief.yaml new file mode 100644 index 00000000..f2996775 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_interface_brief.yaml @@ -0,0 +1,21 @@ +--- + - name: CAPTURE SHOW_IP_INTERFACE_BRIEF + os10_command: + commands: + - show ip interface brief + register: output + + - name: DISPLAY THE OUTPUT + debug: var=output.stdout + + - name: INSTALL TEXTFSM + import_tasks: textfsm.yaml + + - name: PARSE THE OUTPUT for {{ ansible_network_os }} show_ip_interface_brief + textfsm_parser: + src: "{{ lookup('file', './templates/os10_show_ip_interface_brief.template') }}" + content: " {{ output.stdout[0] }}" + name: ip_interface_facts + register: result + vars: + - ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_vrf.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_vrf.yaml new file mode 100644 index 00000000..616416ed --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_ip_vrf.yaml @@ -0,0 +1,21 @@ +--- + - name: CAPTURE SHOW IP VRF + os10_command: + commands: + - show ip vrf + register: output + + - name: DISPLAY THE OUTPUT + debug: var=output.stdout + + - name: INSTALL TEXTFSM + import_tasks: textfsm.yaml + + - name: PARSE THE OUTPUT for {{ ansible_network_os }} show_ip_vrf + textfsm_parser: + src: "{{ lookup('file', './templates/os10_show_ip_vrf.template') }}" + content: "{{ output.stdout[0] }}" + name: vrf_facts + register: result + vars: + - ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_lldp_neighbors.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_lldp_neighbors.yaml new file mode 100644 index 00000000..1fedfe4b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_lldp_neighbors.yaml @@ -0,0 +1,21 @@ +--- + - name: CAPTURE SHOW LLDP NEIGHBORS + os10_command: + commands: + - show lldp neighbors + register: output + + - name: DISPLAY THE OUTPUT + debug: var=output.stdout + + - name: INSTALL TEXTFSM + import_tasks: textfsm.yaml + + - name: PARSE THE OUTPUT for {{ ansible_network_os }} show_lldp_neighbors + textfsm_parser: + src: "{{ lookup('file', './templates/os10_show_lldp_neighbors.template') }}" + content: "{{ output.stdout[0] }}" + name: lldp_facts + register: result + vars: + - ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_port-channel_summary.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_port-channel_summary.yaml new file mode 100644 index 00000000..2d26c14e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_port-channel_summary.yaml @@ -0,0 +1,21 @@ +--- + - name: CAPTURE SHOW PORT-CHANNEL SUMMARY + os10_command: + commands: + - show port-channel summary + register: output + + - name: DISPLAY THE OUTPUT + debug: var=output.stdout + + - name: INSTALL TEXTFSM + import_tasks: textfsm.yaml + + - name: PARSE THE OUTPUT for {{ ansible_network_os }} show_port-channel_summary + textfsm_parser: + src: "{{ lookup('file', './templates/os10_show_port-channel_summary.template') }}" + content: "{{ output.stdout[0] }}" + name: port_channel_facts + register: result + vars: + - ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_vlan.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_vlan.yaml new file mode 100644 index 00000000..ee3c988e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/show_vlan.yaml @@ -0,0 +1,21 @@ +--- + - name: CAPTURE SHOW VLAN + os10_command: + commands: + - show vlan + register: output + + - name: DISPLAY THE OUTPUT + debug: var=output.stdout + + - name: INSTALL TEXTFSM + import_tasks: textfsm.yaml + + - name: PARSE THE OUTPUT for {{ ansible_network_os }} show_vlan + textfsm_parser: + src: "{{ lookup('file', './templates/os10_show_vlan.template') }}" + content: "{{ output.stdout[0] }}" + name: vlan_facts + register: result + vars: + - ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/textfsm.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/textfsm.yaml new file mode 100644 index 00000000..99394b44 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tasks/textfsm.yaml @@ -0,0 +1,3 @@ +#Install Textfsm + - pip: + name: textfsm diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_bgp_summary.template b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_bgp_summary.template new file mode 100644 index 00000000..52ddc289 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_bgp_summary.template @@ -0,0 +1,16 @@ +Value Filldown RouterId (\d+\.\d+\.\d+\.\d+) +Value Filldown LocalAs (\d+) +Value Filldown BFD (enabled) +Value Neighbor (\S+) +Value AS (\d+) +Value MsgRcvd (\d+) +Value MsgSent (\d+) +Value Status (\S+) +Value State (\S+) + +Start + ^BGP router identifier ${RouterId} local AS number ${LocalAs} + ^Global BFD is ${BFD} + ^(?!Neighbor)${Neighbor}\s+${AS}\s+${MsgRcvd}\s+${MsgSent}\s+${Status}\s+${State} -> Record + +EOF diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_interface_brief.template b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_interface_brief.template new file mode 100644 index 00000000..20d01717 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_interface_brief.template @@ -0,0 +1,9 @@ +Value INTERFACE_NAME (\S+\s\S+) +Value IP_ADDRESS (\S+) +Value OK (YES|NO) +Value METHOD (DHCP|manual|unset) +Value STATUS (up|down|admin down) +Value PROTOCOL (up|down|admin down) + +Start + ^${INTERFACE_NAME}\s+${IP_ADDRESS}\s+${OK}\s+${METHOD}\s+${STATUS}\s+${PROTOCOL} -> Record diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_vrf.template b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_vrf.template new file mode 100644 index 00000000..c7e4d754 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_ip_vrf.template @@ -0,0 +1,7 @@ +Value VRFName (\S+) +Value Interfaces (\S+) + +Start + ^(?!VRF-Name)${VRFName}\s+${Interfaces} -> Record + ^(?!VRF-Name)${VRFName} -> Record + ^\s+${Interfaces} -> Record diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_lldp_neighbors.template b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_lldp_neighbors.template new file mode 100644 index 00000000..3c935313 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_lldp_neighbors.template @@ -0,0 +1,7 @@ +Value LocPortID (\S+) +Value RemHostName (\S+) +Value RemPortId (\S+) +Value RemChassisId ([a-fA-F0-9:]{17}) + +Start + ^${LocPortID}\s+${RemHostName}\s+${RemPortId}\s+${RemChassisId} -> Record diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_port-channel_summary.template b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_port-channel_summary.template new file mode 100644 index 00000000..1e77b92e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_port-channel_summary.template @@ -0,0 +1,9 @@ +Value GROUP (\d+) +Value PORT_CHANNEL (\S+\s+[(D)|(U)]+) +Value TYPE ([Eth|Gig|ten|For]+) +Value PROTOCOL ([DYNAMIC|STATIC]+) +Value List MEMBER_PORTS (\s.*) + +Start + ^${GROUP}\s+${PORT_CHANNEL}\s+${TYPE}\s+${PROTOCOL}\s+${MEMBER_PORTS} -> Record + ^${GROUP}\s+${PORT_CHANNEL}\s+${TYPE}\s+${PROTOCOL} -> Record diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_vlan.template b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_vlan.template new file mode 100644 index 00000000..f71e9573 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/templates/os10_show_vlan.template @@ -0,0 +1,12 @@ +Value Codes (\*|\@|\M|\R|\s) +Value NUM (\d+) +Value Status (Active|Inactive) +Value Description (\S+|\s+) +Value Q (A|T) +Value Ports (\S+) + +Start + ^${Codes}\s+${NUM}\s+${Status}\s+${Description}\s+${Q}\s+${Ports} -> Record + ^${Codes}\s+${NUM}\s+${Status}\s+${Description} -> Record + ^${Codes}\s+${NUM}\s+${Status} -> Record + ^\s+${Q}\s+${Ports} -> Record diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/group_vars/all b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/group_vars/all new file mode 100644 index 00000000..902b3301 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/group_vars/all @@ -0,0 +1,3 @@ +ansible_ssh_user: xxxx +ansible_ssh_pass: xxxx +ansible_network_os: dellemc.os10.os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/inventory.yaml new file mode 100644 index 00000000..a76e0817 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[LeafAndSpineSwitch:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/main.yaml new file mode 100644 index 00000000..ca1c43cc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/main.yaml @@ -0,0 +1,5 @@ +--- +- hosts: LeafAndSpineSwitch + connection: network_cli + roles: + - dellemc.os10.os10_template diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/test.yaml new file mode 100644 index 00000000..6d49466d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_template/tests/test.yaml @@ -0,0 +1,9 @@ +--- +- hosts: LeafAndSpineSwitch + connection: network_cli + collections: + - dellemc.os10 + tasks: + - import_role: + name: os10_template + tasks_from: show_ip_interface_brief.yaml diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/README.md new file mode 100644 index 00000000..5cf478f3 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/README.md @@ -0,0 +1,101 @@ +Uplink role +=========== + +This role facilitates the configuration of uplink failure detection feature attributes. It specifically enables configuration of association between upstream and downstream interfaces known as uplink-state group. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Uplink role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_uplink keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``uplink_state_group`` | list | Configures the uplink state group (see ``uplink_state_group.*``) | os10 | +| ``uplink_state_group.id`` | integer | Configures the uplink state group instance | os10 | +| ``uplink_state_group.enable`` | boolean: True,False | Enables the uplink state group instance | os10 | +| ``uplink_state_group.uplink_type`` | list | Configures the upstream and downstream attribute (see ``uplink_type.*``) | os10 | +| ``uplink_type.type`` | string: upstream,downstream | Configures the uplink type | os10 | +| ``uplink_type.intf`` | string | Configures the uplink interface | os10 | +| ``uplink_type.state`` | string: absent,present\* | Removes the uplink stream if set to absent | os10 | +| ``uplink_state_group.state`` | string: absent,present\* | Removes the uplink state group instance if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +******************** + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_uplink role* to completely set the uplink sate group instance, and upstream, downstream interfaces. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. The uplink role writes a simple playbook that only references the *os10_uplink* role. By including the role, you automatically get access to all of the tasks to configure uplink features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_uplink: + uplink_state_group: + - id: 1 + enable: True + uplink_type: + - type: "upstream" + intf: "port-channel1" + state: "present" + - type: "downstream" + intf: "ethernet1/1/2-1/1/5" + state: "present" + state: "present" + - id: 2 + enable: True + state: "present" + +> **NOTE**: Interfaces should be created using the *os10_interface* role. + +**Simple playbook to setup uplink — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_uplink + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/defaults/main.yml new file mode 100644 index 00000000..441d767e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_uplink diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/handlers/main.yml new file mode 100644 index 00000000..7abb0012 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_uplink diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/meta/main.yml new file mode 100644 index 00000000..0bc56196 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + role_name: os10_uplink + author: Dell EMC Networking Engineering + description: The os10_uplink role facilitates the configuration of uplink attributes in devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tasks/main.yml new file mode 100644 index 00000000..6500ea3c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating uplink configuration for os10" + template: + src: os10_uplink.j2 + dest: "{{ build_dir }}/uplink10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning uplink configuration for os10" + os10_config: + src: os10_uplink.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/templates/os10_uplink.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/templates/os10_uplink.j2 new file mode 100644 index 00000000..0dd4290f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/templates/os10_uplink.j2 @@ -0,0 +1,61 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +#Purpose: +Configure uplink commands for os10 Devices + +os10_uplink: + uplink_state_group: + - id: 1 + enable: True + uplink_type: + - type: "upstream" + intf: "port-channel1" + state: "present" + - type: "downstream" + intf: "ethernet1/1/2-1/1/5" + state: "present" + state: "present" +###############################################} +{% if os10_uplink is defined and os10_uplink %} + {% if os10_uplink.uplink_state_group is defined and os10_uplink.uplink_state_group %} + {% for uplink_val in os10_uplink.uplink_state_group %} + {% if uplink_val.id is defined %} + {% if uplink_val.state is defined and uplink_val.state == "absent" %} +no uplink-state-group {{ uplink_val.id }} + {% else %} +uplink-state-group {{ uplink_val.id }} + {% if uplink_val.enable is defined %} + {% if uplink_val.enable == True %} + enable + {% else %} + no enable + {% endif %} + {% endif %} + {% if uplink_val.uplink_type is defined and uplink_val.uplink_type %} + {% for uplink in uplink_val.uplink_type %} + {% if uplink.type is defined and uplink.type %} + {% if uplink.state is defined and uplink.state == "absent" %} + {% if uplink.intf is defined and uplink.intf %} + {% if uplink.type == "downstream" %} + no downstream {{ uplink.intf }} + {% elif uplink.type == "upstream" %} + no upstream {{ uplink.intf }} + {% endif %} + {% endif %} + {% else %} + {% if uplink.intf is defined and uplink.intf %} + {% if uplink.type == "downstream" %} + downstream {{ uplink.intf }} + {% elif uplink.type == "upstream" %} + upstream {{ uplink.intf }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/main.yaml new file mode 100644 index 00000000..90afe008 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/main.yaml @@ -0,0 +1,16 @@ +--- +# vars file for dellemc.os10.os10_uplink, +# below gives a sample configuration +# Sample variables for OS10 device +os10_uplink: + uplink_state_group: + - id: 1 + enable: True + uplink_type: + - type: "upstream" + intf: "port-channel1" + state: "present" + - type: "downstream" + intf: "ethernet1/1/2-1/1/5" + state: "present" + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/test.yaml new file mode 100644 index 00000000..92c99613 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_uplink diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/vars/main.yml new file mode 100644 index 00000000..a376eeb1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_uplink/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_uplink diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/README.md new file mode 100644 index 00000000..337010dd --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/README.md @@ -0,0 +1,89 @@ +Users role +========== + +This role facilitates the configuration of global system user attributes, and it supports the configuration of CLI users. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The Users role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_users list keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``username`` | string (required) | Configures the username which must adhere to specific format guidelines (valid usernames begin with A-Z, a-z, or 0-9 and can also contain `@#$%^&*-_= +;<>,.~` characters) | os10 | +| ``password`` | string | Configures the password set for the username; password length must be at least eight characters | os10 | +| ``role`` | string | Configures the role assigned to the user | os10 | +| ``state`` | string: absent,present\* | Deletes a user account if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_users* role to configure global system user attributes. It creates a hosts file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file. It writes a simple playbook that only references the *os10_users* role. By including the role, you automatically get access to all of the tasks to configure user features. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_users: + - username: test + password: a1a2a3a4!@#$ + role: sysadmin + state: present + - username: u1 + password: a1a2a3a4!@#$ + role: netadmin + state: present + +**Simple playbook to setup users — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_users + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/defaults/main.yml new file mode 100644 index 00000000..668eefac --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_users diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/handlers/main.yml new file mode 100644 index 00000000..e73b341b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_users diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/meta/main.yml new file mode 100644 index 00000000..c73b755e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_users role facilitates the configuration of user attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tasks/main.yml new file mode 100644 index 00000000..eb870a13 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating users configuration for os10" + template: + src: os10_users.j2 + dest: "{{ build_dir }}/users10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning users configuration for os10" + os10_config: + src: os10_users.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/templates/os10_users.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/templates/os10_users.j2 new file mode 100644 index 00000000..080f6a59 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/templates/os10_users.j2 @@ -0,0 +1,27 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +Purpose: +Configure users commands for os10 Devices +os10_users: + - username: test + password: test + role: sysadmin + state: present +###############################################} +{% if os10_users is defined and os10_users %} + {% for item in os10_users %} + {% if item.username is defined and item.username %} + {% if item.state is defined and item.state == "absent" %} +no username {{ item.username }} + {% else %} + {% if item.password is defined and item.password %} + {% if item.role is defined and item.role %} +username {{ item.username }} password {{ item.password }} role {{ item.role }} + {% else %} +username {{ item.username }} password {{ item.password }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/main.os10.yaml new file mode 100644 index 00000000..0bbc0633 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/main.os10.yaml @@ -0,0 +1,13 @@ +--- +# vars file for dellemc.os10.os10_users, +# below gives a sample configuration +# Sample variables for OS10 device +os10_users: + - username: test + password: a1a2a3a4!@#$ + role: sysadmin + state: present + - username: u1 + password: a1a2a3a4!@#$ + role: netadmin + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/test.yaml new file mode 100644 index 00000000..26812451 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_users diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/vars/main.yml new file mode 100644 index 00000000..49177b5b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_users/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_users diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/README.md new file mode 100644 index 00000000..275181e5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/README.md @@ -0,0 +1,123 @@ +VLAN role +========= + +This role facilitates configuring virtual LAN (VLAN) attributes. It supports the creation and deletion of a VLAN and its member ports. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VLAN role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- For variables with no state variable, setting an empty value for the variable negates the corresponding configuration +- `os10_vlan` (dictionary) holds the key with the VLAN ID key and default-vlan key. +- VLAN ID key should be in format "vlan ID" (1 to 4094) +- Variables and values are case-sensitive + +**os10_vlan** + +| Key | Type | Notes | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``default_vlan_id`` | integer | Configures the vlan-id as the default VLAN for an existing VLAN | os10 | + +**VLAN ID keys** + +| Key | Type | Notes | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``description`` | string | Configures a single line description for the VLAN | os10 | +| ``tagged_members`` | list | Specifies the list of port members to be tagged to the corresponding VLAN (see ``tagged_members.*``) | os10 | +| ``tagged_members.port`` | string | Specifies valid device interface names to be tagged for each VLAN | os10 | +| ``tagged_members.state`` | string: absent,present | Deletes the tagged association for the VLAN if set to absent | os10 | +| ``untagged_members`` | list | Specifies the list of port members to be untagged to the corresponding VLAN (see ``untagged_members.*``) | os10 | +| ``untagged_members.port`` | string | Specifies valid device interface names to be untagged for each VLAN | os10 | +| ``untagged_members.state`` | string: absent,present | Deletes the untagged association for the VLAN if set to absent | os10 | +| ``state`` | string: absent,present\* | Deletes the VLAN corresponding to the ID if set to absent | os10 | +| ``virtual_gateway_ip`` | string | Configures an anycast gateway IPv4 address for VLAN interfaces| os10 | +| ``virtual_gateway_ipv6`` | string | Configures an anycast gateway IPv6 address for VLAN interfaces| os10 | +| ``ip_and_mask`` | string | Configures the specified IP address to the interface | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars directories* or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +## Example playbook + +This example uses the *os10_vlan* role to setup the VLAN ID and name, and it configures tagged and untagged port members for the VLAN. You can also delete the VLAN with the ID or delete the members associated to it. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_vlan* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_vlan: + default_vlan_id: 2 + vlan 100: + description: "Blue" + tagged_members: + - port: ethernet 1/1/32 + state: present + - port: ethernet 1/1/31 + state: present + untagged_members: + - port: ethernet 1/1/30 + state: present + - port: ethernet 1/1/29 + state: present + state: present + vlan 888: + description: "NSX_Cluster" + untagged_members: + - port: port-channel 1 + state: "present" + state: "present" + vlan 10: + description: "vlan with anycast GW" + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + state: "present" + +> **NOTE**: Interfaces should be created using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vlan + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/defaults/main.yml new file mode 100644 index 00000000..7510d594 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_vlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/handlers/main.yml new file mode 100644 index 00000000..acd66992 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_vlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/meta/main.yml new file mode 100644 index 00000000..03e7a180 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_vlan role facilitates the configuration of VLAN attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tasks/main.yml new file mode 100644 index 00000000..f4d69bc9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating VLAN configuration for os10" + template: + src: os10_vlan.j2 + dest: "{{ build_dir }}/vlan10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning VLAN configuration for os10" + os10_config: + src: os10_vlan.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/.os10_vlan.j2.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/.os10_vlan.j2.un~ Binary files differnew file mode 100644 index 00000000..1a4f595f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/.os10_vlan.j2.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/os10_vlan.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/os10_vlan.j2 new file mode 100644 index 00000000..15fbece5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/os10_vlan.j2 @@ -0,0 +1,121 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{########################################## +Purpose: +Configure VLAN Interface commands for os10 Devices +os10_vlan: + default_vlan_id : 4 + vlan 100: + description: "red" + tagged_members: + - port: ethernet 1/1/32 + state: present + - port: ethernet 1/1/31 + state: absent + untagged_members: + - port: ethernet 1/1/30 + state: present + - port: ethernet 1/1/29 + state: present + state: present + vlan 888: + description: "NSX_Cluster" + untagged_members: + - port: port-channel 1 + state: "present" + state: "present" + vlan 10: + description: "vlan with anycast GW" + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + state: "present" + +#########################################} +{% if os10_vlan is defined and os10_vlan %} +{% for key,value in os10_vlan.items() %} + {% if key == "default_vlan_id" %} + {% if value %} +default vlan-id {{ value }} + {% else %} +no default vlan-id + {% endif %} + {% else %} + + {% set vlan_id = key.split(" ") %} + {% set vlan_vars = os10_vlan[key] %} + + {% if vlan_vars.state is defined and vlan_vars.state == "absent" %} +no interface vlan{{ vlan_id[1] }} + {% else %} +interface vlan{{ vlan_id[1] }} + {% if vlan_vars.description is defined %} + {% if vlan_vars.description %} + {% if vlan_vars.description|wordcount > 1 %} + description "{{ vlan_vars.description }}" + {% else %} + description {{ vlan_vars.description }} + {% endif %} + {% else %} + no description + {% endif %} + {% endif %} + + {% if vlan_vars.ip_and_mask is defined %} + {% if vlan_vars.ip_and_mask %} + ip address {{ vlan_vars.ip_and_mask }} + {% else %} + no ip address + {% endif %} + {% endif %} + + {% if vlan_vars.virtual_gateway_ip is defined %} + {% if vlan_vars.virtual_gateway_ip %} + ip virtual-router address {{ vlan_vars.virtual_gateway_ip }} + {% else %} + no ip virtual-router address + {% endif %} + {% endif %} + + {% if vlan_vars.virtual_gateway_ipv6 is defined %} + {% if vlan_vars.virtual_gateway_ipv6 %} + ipv6 virtual-router address {{ vlan_vars.virtual_gateway_ipv6 }} + {% else %} + no ipv6 virtual-router address + {% endif %} + {% endif %} + + {# Keep member configs in the end as it switches to member interface context #} + {% if vlan_vars.untagged_members is defined %} + {% for ports in vlan_vars.untagged_members %} + {% if ports.port is defined and ports.port %} +interface {{ ports.port.split() | join() }} + {% if ports.state is defined and ports.state == "absent" %} + no switchport access vlan + {% else %} + switchport access vlan {{ vlan_id[1] }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if vlan_vars.tagged_members is defined %} + {% for ports in vlan_vars.tagged_members %} + {% if ports.port is defined and ports.port %} +interface {{ ports.port.split() | join() }} + {% if ports.state is defined and ports.state == "absent" %} + no switchport trunk allowed vlan {{ vlan_id[1] }} + {% else %} + switchport mode trunk + switchport trunk allowed vlan {{ vlan_id[1] }} + {% endif %} + {% if ports.access_vlan is defined and ports.access_vlan == "false" %} + no switchport access vlan + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% endif %} + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/os10_vlan.j2~ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/os10_vlan.j2~ new file mode 100644 index 00000000..a7989022 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/templates/os10_vlan.j2~ @@ -0,0 +1,121 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{########################################## +Purpose: +Configure VLAN Interface commands for os10 Devices +os10_vlan: + default_vlan_id : 4 + vlan 100: + description: "red" + tagged_members: + - port: ethernet 1/1/32 + state: present + - port: ethernet 1/1/31 + state: absent + untagged_members: + - port: ethernet 1/1/30 + state: present + - port: ethernet 1/1/29 + state: present + state: present + vlan 888: + description: "NSX_Cluster" + untagged_members: + - port: port-channel 1 + state: "present" + state: "present" + vlan 10: + description: "vlan with anycast GW" + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + state: "present" + +#########################################} +{% if os10_vlan is defined and os10_vlan %} +{% for key,value in os10_vlan.items() %} + {% if key == "default_vlan_id" %} + {% if value %} +default vlan-id {{ value }} + {% else %} +no default vlan-id + {% endif %} + {% else %} + + {% set vlan_id = key.split(" ") %} + {% set vlan_vars = os10_vlan[key] %} + + {% if vlan_vars.state is defined and vlan_vars.state == "absent" %} +no interface vlan{{ vlan_id[1] }} + {% else %} +interface vlan{{ vlan_id[1] }} + {% if vlan_vars.description is defined %} + {% if vlan_vars.description %} + {% if vlan_vars.description|wordcount > 1 %} + description "{{ vlan_vars.description }}" + {% else %} + description {{ vlan_vars.description }} + {% endif %} + {% else %} + no description + {% endif %} + {% endif %} + + {% if vlan_vars.ip_and_mask is defined %} + {% if vlan_vars.ip_and_mask %} + ip address {{ vlan_vars.ip_and_mask }} + {% else %} + no ip address + {% endif %} + {% endif %} + + {% if vlan_vars.virtual_gateway_ip is defined %} + {% if vlan_vars.virtual_gateway_ip %} + ip virtual-router address {{ vlan_vars.virtual_gateway_ip }} + {% else %} + no ip virtual-router address + {% endif %} + {% endif %} + + {% if vlan_vars.virtual_gateway_ipv6 is defined %} + {% if vlan_vars.virtual_gateway_ipv6 %} + ipv6 virtual-router address {{ vlan_vars.virtual_gateway_ipv6 }} + {% else %} + no ipv6 virtual-router address + {% endif %} + {% endif %} + + {# Keep member configs in the end as it switches to member interface context #} + {% if vlan_vars.untagged_members is defined %} + {% for ports in vlan_vars.untagged_members %} + {% if ports.port is defined and ports.port %} +interface {{ ports.port }} + {% if ports.state is defined and ports.state == "absent" %} + no switchport access vlan + {% else %} + switchport access vlan {{ vlan_id[1] }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if vlan_vars.tagged_members is defined %} + {% for ports in vlan_vars.tagged_members %} + {% if ports.port is defined and ports.port %} +interface {{ ports.port }} + {% if ports.state is defined and ports.state == "absent" %} + no switchport trunk allowed vlan {{ vlan_id[1] }} + {% else %} + switchport mode trunk + switchport trunk allowed vlan {{ vlan_id[1] }} + {% endif %} + {% if ports.access_vlan is defined and ports.access_vlan == "false" %} + no switchport access vlan + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% endif %} + {% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/main.os10.yaml new file mode 100644 index 00000000..78e24738 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/main.os10.yaml @@ -0,0 +1,31 @@ +--- +# vars file for dellemc.os10.os10_vlan, +# below gives a example configuration +# Sample variables for OS10 device +os10_vlan: + default_vlan_id: 2 + vlan 100: + description: "Blue" + tagged_members: + - port: ethernet 1/1/32 + state: present + - port: ethernet 1/1/31 + state: present + untagged_members: + - port: ethernet 1/1/30 + state: present + - port: ethernet 1/1/29 + state: present + state: present + vlan 888: + description: "NSX_Cluster" + untagged_members: + - port: port-channel 1 + state: "present" + state: "present" + vlan 10: + description: "vlan with anycast GW" + ip_and_mask: "10.1.1.1/24" + virtual_gateway_ip: "10.1.1.254" + virtual_gateway_ipv6: "10:1:1::254" + state: "present" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/test.yaml new file mode 100644 index 00000000..13442eff --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_vlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/vars/main.yml new file mode 100644 index 00000000..c856f302 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlan/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_vlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/README.md new file mode 100644 index 00000000..ed24d38d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/README.md @@ -0,0 +1,108 @@ +VLT role +======== + +This role facilitates the configuration of the basics of virtual link trunking (VLT) to provide a loop-free topology. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VLT role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables . + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_vlt keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``domain`` | integer (required) | Configures the VLT domain identification number (1 to 1000) | os10 | +| ``backup_destination`` | string | Configures an IPv4 address for the VLT backup link (A.B.C.D format or X:X:X:X::X format) | os10 | +| ``destination_type`` | string | Configures the backup destination based on this destination type (IPv4 or IPv6)| os10 | +| ``backup_destination_vrf`` | string | Configures the virtual routing and forwarding (VRF) instance through which the backup destination IP is reachable (*vrfname* must be present) | os10 | +| ``discovery_intf`` | string | Configures the discovery interface for the VLT domain (range of interfaces)| os10 | +| ``discovery_intf_state`` | string: absent,present | Deletes the discovery interfaces for the VLT domain if set to absent | os10 | +| ``peer_routing`` | boolean | Configures VLT peer routing | os10 | +| ``priority`` | integer (default:32768) | Configures VLT priority | os10 | +| ``vlt_mac`` | string | Configures the VLT MAC address | os10 | +| ``vlt_peers`` | dictionary | Contains objects to configure the VLT peer port-channel (see ``vlt_peers.*``) | os10 | +| ``vlt_peers.<portchannelid>`` | dictionary | Configures the VLT peer port-channel (`Po <portchannelid> value`) | os10 | +| ``vlt_peers.<portchannelid>.peer_lag`` | integer | Configures the port-channel ID of the VLT peer lag | os10 | +| ``state`` | string: absent,present | Deletes the VLT instance if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network OS roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Dependencies +------------ + +The *os10_vlt* role is built on modules included in the core Ansible code. These modules were added in ansible version 2.2.0. + +Example playbook +---------------- + +This example uses the *os10_vlt* role to setup a VLT-domain. It creates a *hosts* file with the switch details and corresponding variables.The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_vlt* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + + os10_vlt: + domain: 1 + backup_destination: "192.168.211.175" + destination_type: "ipv4" + backup_destination_vrf: + discovery_intf: 1/1/12 + discovery_intf_state: present + peer_routing: True + vlt_mac: aa:aa:aa:aa:aa:aa + vlt_peers: + Po 12: + peer_lag: 13 + state: present + +> **NOTE**: Discovery interface must not be in switchport mode and can be configured using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vlt + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/defaults/main.yml new file mode 100644 index 00000000..daa35993 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_vlt diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/handlers/main.yml new file mode 100644 index 00000000..910f1fa8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_vlt diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/meta/main.yml new file mode 100644 index 00000000..c3164f7d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_vlt role facilitates the configuration of VLT attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tasks/main.yml new file mode 100644 index 00000000..63fa380a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating VLT configuration for os10" + template: + src: os10_vlt.j2 + dest: "{{ build_dir }}/vlt10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning VLT configuration for os10" + os10_config: + src: os10_vlt.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/templates/os10_vlt.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/templates/os10_vlt.j2 new file mode 100644 index 00000000..4915ff71 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/templates/os10_vlt.j2 @@ -0,0 +1,108 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{################################ +Purpose: +Configure VLT commands fon os10 Devices. +os10_vlt: + domain: 1 + backup_destination: "192.168.1.1" + destination_type: "ipv4" + backup_destination_vrf: "management" + discovery_intf: 1/1/12 + discovery_intf_state: present + peer_routing: True + priority: 1 + vlt_mac: aa:aa:aa:aa:aa:aa + vlt_peers: + Po 12: + peer_lag: 13 + state: present +################################} +{% if os10_vlt is defined and os10_vlt %} + {% if os10_vlt.domain is defined and os10_vlt.domain %} + {% if os10_vlt.state is defined and os10_vlt.state == 'absent' %} +no vlt-domain {{ os10_vlt.domain }} + {% else %} +vlt-domain {{ os10_vlt.domain }} + {% if os10_vlt.backup_destination is defined %} + {% if os10_vlt.backup_destination %} + {% if os10_vlt.destination_type is defined %} + {% if os10_vlt.destination_type == "ipv6" %} + backup destination ipv6 {{ os10_vlt.backup_destination }} + {% elif os10_vlt.destination_type == "ipv4" %} + {% if os10_vlt.backup_destination_vrf is defined and os10_vlt.backup_destination_vrf %} + backup destination {{ os10_vlt.backup_destination }} vrf {{ os10_vlt.backup_destination_vrf }} + {% else %} + backup destination {{ os10_vlt.backup_destination }} + {% endif %} + {% endif %} + {% endif %} + {% else %} + no backup destination + {% endif %} + {% endif %} + {% if os10_vlt.discovery_intf_state is defined and os10_vlt.discovery_intf_state == "absent" %} + {% if os10_vlt.discovery_intf is defined and os10_vlt.discovery_intf %} + no discovery-interface ethernet{{ os10_vlt.discovery_intf }} + {% endif %} + {% else %} + {% if os10_vlt.discovery_intf is defined and os10_vlt.discovery_intf %} + discovery-interface ethernet{{ os10_vlt.discovery_intf }} + {% endif %} + {% endif %} + {% if os10_vlt.backup_destination is defined %} + {% if os10_vlt.backup_destination %} + {% if os10_vlt.destination_type is defined %} + {% if os10_vlt.destination_type == 'ipv6' %} + backup destination ipv6 {{ os10_vlt.backup_destination }} + {% elif os10_vlt.destination_type == 'ipv4' %} + {% if os10_vlt.backup_destination_vrf is defined and os10_vlt.backup_destination_vrf %} + backup destination {{ os10_vlt.backup_destination }} vrf {{ os10_vlt.backup_destination_vrf }} + {% else %} + backup destination {{ os10_vlt.backup_destination }} + {% endif %} + {% endif %} + {% endif %} + {% else %} + no backup destination + {% endif %} + {% endif %} + {% if os10_vlt.priority is defined %} + {% if os10_vlt.priority %} + primary-priority {{ os10_vlt.priority }} + {% else %} + no primary-priority + {% endif %} + {% endif %} + {% if os10_vlt.peer_routing is defined %} + {% if os10_vlt.peer_routing %} + peer-routing + {% else %} + no peer-routing + {% endif %} + {% endif %} + {% if os10_vlt.vlt_mac is defined %} + {% if os10_vlt.vlt_mac %} + vlt-mac {{ os10_vlt.vlt_mac }} + {% else %} + no vlt-mac + {% endif %} + {% endif %} + + {% endif %} + {% endif %} + {% if os10_vlt.vlt_peers is defined and os10_vlt.vlt_peers %} + {% for key in os10_vlt.vlt_peers.keys() %} + {% set channel_id = key.split(" ") %} + {% set peer_vars = os10_vlt.vlt_peers[key] %} +interface port-channel{{ channel_id[1] }} + {% if peer_vars.peer_lag is defined %} + {% if peer_vars.peer_lag %} + vlt-port-channel {{ peer_vars.peer_lag}} + {% else %} + no vlt-port-channel + {% endif %} + {% endif %} + + {% endfor %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/main.os10.yaml new file mode 100644 index 00000000..1c15f159 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/main.os10.yaml @@ -0,0 +1,17 @@ +--- +# vars file for dellemc.os10.os10_vlt, +# below gives a example configuration +# Sample variables for OS10 device +os10_vlt: + domain: 1 + backup_destination: "192.168.211.175" + destination_type: "ipv4" + backup_destination_vrf: + discovery_intf: 1/1/12 + discovery_intf_state: present + peer_routing: True + vlt_mac: aa:aa:aa:aa:aa:aa + vlt_peers: + Po 12: + peer_lag: 13 + state: present diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/test.yaml new file mode 100644 index 00000000..8f950f01 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_vlt diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/vars/main.yml new file mode 100644 index 00000000..aee0f95b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vlt/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_vlt diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/README.md new file mode 100644 index 00000000..000ba102 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/README.md @@ -0,0 +1,143 @@ +VRF role +======== + +This role facilitates to configure the basics of virtual routing and forwarding (VRF) that helps in the partition of physical routers to multiple virtual routers. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VRF role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the variable `ansible_network_os` that can take the `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_vrf keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``vrfdetails`` | list | Configures the list of VRF instances (see ``instances.*``) | os10 | +| ``vrfdetails.vrf_name`` | string | Specifies the VRF instance name (default is management) | os10 | +| ``vrfdetails.state`` | string | Deletes the VRF instance name if set to absent | os10 | +| ``vrfdetails.ip_route_import`` | string | Configures VRF IP subcommands | os10 | +| ``ip_route_import.community_value`` | string | Configures the route community value | os10 | +| ``ip_route_import.route_map_value`` | string | Configures the route-map value | os10 | +| ``ip_route_import.state`` | string | Deletes the IP configuration if set to absent | os10 | +| ``vrfdetails.ip_route_export`` | string | Configures VRF IP subcommands | os10 | +| ``ip_route_export.community_value`` | string | Configures the route community value | os10 | +| ``ip_route_export.route_map_value`` | string | Configures the route-map value | os10 | +| ``ip_route_export.state`` | string | Deletes the IP config if set to absent | os10 | +| ``vrfdetails.ipv6_route_import`` | string | Configures VRF IPv6 subcommands | os10 | +| ``ipv6_route_import.community_value`` | string | Configures the route community value | os10 | +| ``ipv6_route_import.route_map_value`` | string | Configures the route-map value | os10 | +| ``ipv6_route_import.state`` | string | Deletes the IP config if set to absent | os10 | +| ``vrfdetails.ipv6_route_export`` | string | Configures VRF IPv6 subcommands | os10 | +| ``ipv6_route_import.community_value`` | string | Configures the route community value | os10 | +| ``ipv6_route_export.route_map_value`` | string | Configures the route-map value | os10 | +| ``ipv6_route_import.state`` | string | Deletes the IP config if set to absent | os10 | +| ``vrfdetails.map_ip_interface`` | list | Specifies a list of valid interface names | os10 | +| ``map_ip_interface.intf_id`` | string | Specifies a valid interface name | os10 | +| ``map_ip_interface.state`` | string | Deletes VRF association in the interface if set to absent | os10 | +| ``upd_src_ip_loopback_id`` | string | Configures the source IP for any leaked route in VRF from the provided loopback ID, delete if empty string| os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Dependencies +------------ + +The *os10_vrf* role is built on modules included in the core Ansible code. These modules were added in ansible version 2.2.0 + +Example playbook +---------------- + +This example uses the *os10_vrf* role to setup a VRF and associate it to an interface. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that references the *os10_vrf* role. +*upd_src_ip_loopback_id* has an dependency with association of the interface in a VRF, and the *os10_vrf* role needs to be invoked twice with different input dictionary one for the create and one for *upd_src_ip_loopback_id*. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + os10_vrf: + vrfdetails: + - vrf_name: "os10vrf" + state: "present" + ip_route_import: + community_value: "10:20" + state: "present" + route_map_value: "test4" + ip_route_export: + community_value: "30:40" + state: "present" + route_map_value: "test3" + ipv6_route_import: + community_value: "40:50" + state: "absent" + route_map_value: "test2" + ipv6_route_export: + community_value: "60:70" + state: "absent" + route_map_value: "test2" + map_ip_interface: + - intf_id : "loopback11" + state : "present" + + os_vrf_upd_src_loopback: + vrfdetails: + - vrf_name: "os10vrf" + state: "present" + upd_src_ip_loopback_id: 11 + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vrf + +**Simple playbook with `upd_src_ip_loopback_id` — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vrf + - hosts: leaf1 + vars: + os10_vrf: "{{ os_vrf_upd_src_loopback }}" + roles: + - dellemc.os10.os10_vrf + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/defaults/main.yml new file mode 100644 index 00000000..e00abdd9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_vrf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/handlers/main.yml new file mode 100644 index 00000000..7bd70e18 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_vrf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/meta/main.yml new file mode 100644 index 00000000..db8f619d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2017-2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_vrf role facilitates the configuration of VRF attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tasks/main.yml new file mode 100644 index 00000000..ef651579 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating vrf configuration for os10" + template: + src: os10_vrf.j2 + dest: "{{ build_dir }}/vrf10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning VRF configuration for os10" + os10_config: + src: os10_vrf.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/templates/os10_vrf.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/templates/os10_vrf.j2 new file mode 100644 index 00000000..e77f6c14 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/templates/os10_vrf.j2 @@ -0,0 +1,122 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{################################ +Purpose: +Configure VRF on os10 Devices. +os10_vrf: + vrfdetails: + -vrf_name: "os10vrf" + state: "present" + ip_route_import: + community_value: 10:15 + state: "absent" + route_map_value: test1 + ip_route_export: + commnity_value: 20:30 + state: "present" + route_map_value: test2 + ipv6_route_import: + community_value: 10:15 + state: "present" + route_map_value: test3 + ipv6_route_export: + commnity_value: 20:30 + state: "present" + route_map_value: test4 + map_ip_interface: + -intf_id : loopback6 + state : "present" + upd_src_ip_loopback_id: 5 + -vrf_name: "os10vrf1" + state: "absent" +################################} +{% if (os10_vrf is defined and os10_vrf) %} +{% if os10_vrf.vrfdetails is defined %} + {% for vrf in os10_vrf.vrfdetails %} + {% if vrf.vrf_name is defined %} + {% if vrf.vrf_name %} + {% if vrf.state is defined and vrf.state == 'absent' %} +no ip vrf {{ vrf.vrf_name }} + {% else %} +ip vrf {{ vrf.vrf_name }} + {% if vrf.ip_route_import is defined and vrf.ip_route_import %} + {% set route_vars = vrf.ip_route_import %} + {% if route_vars.community_value is defined and route_vars.community_value %} + {% if route_vars.state == 'present' %} + {% if route_vars.route_map_value is defined and route_vars.route_map_value %} + ip route-import {{ route_vars.community_value }} route-map {{ route_vars.route_map_value }} + {% else %} + ip route-import {{ route_vars.community_value }} + {% endif %} + {% else %} + no ip route-import {{ route_vars.community_value }} + {% endif %} + {% endif %} + {% endif %} + {% if vrf.ipv6_route_import is defined and vrf.ipv6_route_import %} + {% set route_vars = vrf.ipv6_route_import %} + {% if route_vars.community_value is defined and route_vars.community_value %} + {% if route_vars.state == 'present' %} + {% if route_vars.route_map_value is defined and route_vars.route_map_value %} + ipv6 route-import {{ route_vars.community_value }} route-map {{ route_vars.route_map_value }} + {% else %} + ipv6 route-import {{ route_vars.community_value }} + {% endif %} + {% else %} + no ipv6 route-import {{ route_vars.community_value }} + {% endif %} + {% endif %} + {% endif %} + {% if vrf.ip_route_export is defined and vrf.ip_route_export %} + {% set route_vars = vrf.ip_route_export %} + {% if route_vars.community_value is defined and route_vars.community_value %} + {% if route_vars.state == 'present' %} + {% if route_vars.route_map_value is defined and route_vars.route_map_value %} + ip route-export {{ route_vars.community_value }} route-map {{ route_vars.route_map_value }} + {% else %} + ip route-export {{ route_vars.community_value }} + {% endif %} + {% else %} + no ip route-export {{ route_vars.community_value }} + {% endif %} + {% endif %} + {% endif %} + {% if vrf.ipv6_route_export is defined and vrf.ipv6_route_export %} + {% set route_vars = vrf.ipv6_route_export %} + {% if route_vars.community_value is defined and route_vars.community_value %} + {% if route_vars.state == 'present' %} + {% if route_vars.route_map_value is defined and route_vars.route_map_value %} + ipv6 route-export {{ route_vars.community_value }} route-map {{ route_vars.route_map_value }} + {% else %} + ipv6 route-export {{ route_vars.community_value }} + {% endif %} + {% else %} + no ipv6 route-export {{ route_vars.community_value }} + {% endif %} + {% endif %} + {% endif %} + {% if vrf.map_ip_interface is defined and vrf.map_ip_interface %} + exit + {% for map_ip_interface in vrf.map_ip_interface %} + {% if map_ip_interface.intf_id is defined and map_ip_interface.intf_id %} +interface {{ map_ip_interface.intf_id }} + {% if map_ip_interface.state is defined and map_ip_interface.state == "absent" %} + no ip vrf forwarding + {% else %} + ip vrf forwarding {{ vrf.vrf_name }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if vrf.upd_src_ip_loopback_id is defined %} + {% if vrf.upd_src_ip_loopback_id %} + update-source-ip loopback{{ vrf.upd_src_ip_loopback_id}} + {% else %} + no update-source-ip loopback + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} +{% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/main.os10.yaml new file mode 100644 index 00000000..b8a265d8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/main.os10.yaml @@ -0,0 +1,33 @@ +--- +# vars file for dellemc.os10.os10_vrf, +# below gives a sample configuration +# Sample variables for OS10 device +os10_vrf: + vrfdetails: + - vrf_name: "os10vrf" + state: "present" + ip_route_import: + community_value: "10:20" + state: "present" + route_map_value: "test1" + ip_route_export: + community_value: "30:40" + state: "present" + route_map_value: "test2" + ipv6_route_import: + community_value: "40:50" + state: "absent" + route_map_value: "test3" + ipv6_route_export: + community_value: "60:70" + state: "absent" + route_map_value: "test4" + map_ip_interface: + - intf_id: "loopback11" + state: "present" + +os_vrf_upd_src_loopback: + vrfdetails: + - vrf_name: "os10vrf" + state: "present" + upd_src_ip_loopback_id: 11 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/test.yaml new file mode 100644 index 00000000..6093a28f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_vrf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/vars/main.yml new file mode 100644 index 00000000..5ed35d63 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrf/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars for dellemc.os10.os10_vrf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/README.md new file mode 100644 index 00000000..1771c50f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/README.md @@ -0,0 +1,139 @@ +VRRP role +========= + +This role facilitates configuring virtual router redundancy protocol (VRRP) attributes. It supports the creation of VRRP groups for interfaces and setting the VRRP group attributes. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VRRP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- `os10_vrrp` (dictionary) holds a dictionary with the interface name key +- Interface name can correspond to any of the valid OS10 interface with a unique interface identifier name +- Physical interfaces names must be in *<interfacename> <tuple>* format (for example *fortyGigE 1/1*) +- Variables and values are case-sensitive + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``vrrp`` | dictionary | Configures VRRP commands (see ``vrrp.*``) | os10 | +| ``version`` | dictionary | Configures VRRP version | os10 | +| ``vrrp_active_active_mode`` | dictionary | Configures VRRP active-active mode | os10 | +| ``delay_reload`` | integer | Configures the minimum delay timer applied after boot (0 to 900) | os10 | +| ``vrrp_group`` | list | Configures VRRP group commands (see ``vrrp_group.*``) | os10 | +| ``vrrp_group.type`` | string: ipv6,ipv4 | Specifies the type of the VRRP group | os10 | +| ``vrrp_group.group_id`` | integer (required) | Configures the ID for the VRRP group (1 to 255) | os10 | +| ``vrrp_group.virtual_address`` | string | Configures a virtual-address to the VRRP group (A.B.C.D format) | os10 | +| ``virtual_address.ip`` | string | Configures a virtual ip address (A.B.C.D format) | os10 | +| ``virtual_address.state`` | string: present\*,absent | Configures/unconfigures a virtual-address (A.B.C.D format) | os10 | +| ``vrrp_group.preempt`` | boolean: true\*,false | Configures preempt mode on the VRRP group | os10 | +| ``vrrp_group.priority`` |integer | Configures priority for the VRRP group (1 to 255; default 100) | os10 | +| ``vrrp_group.adv_interval_centisecs`` | integer | Configures the advertisement interval for the VRRP group in centiseconds (25 to 4075; default 100) and in multiple of 25; centisecs gets converted into seconds in version 2 | os10 | +| ``vrrp_group.track_interface`` | list | Configures the track interface of the VRRP group (see ``track.*``) | os10 | +| ``track_interface.resource_id`` | integer | Configures the object tracking resource ID of the VRRP group; mutually exclusive with *track.interface* | os10 | +| ``track_interface.interface`` | string | Configures the track interface of the VRRP group (<interface name> <interface number> format) | os10 | +| ``track_interface.priority_cost`` | integer | Configures the priority cost for track interface of the VRRP group (1 to 254; default 10) | os10 | +| ``track_interface.state`` | string: present\*,absent | Deletes the specific track interface from the VRRP group if set to absent | os10 | +| ``vrrp_group.track_interface.state`` | string: present*,absent | Deletes all track interfaces from the VRRP group if set to absent | os10 | +| ``vrrp_group.state`` | string: present\*,absent | Deletes the VRRP group from the interface if set to absent | os10 | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories, or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_vrrp* role to configure VRRP commands at the interfaces. It creates a *hosts* file with the switch details and corresponding variables. The hosts file should define the `ansible_network_os` variable with corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. It writes a simple playbook that only references the *os10_vrrp* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + os10_vrrp: + vrrp: + delay_reload: 2 + version: 3 + ethernet1/1/1: + vrrp_group: + - group_id: 2 + type: ipv6 + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + virtual_address: + - ip: 2001:4828:5808:ffa3::9 + state: present + - ip: 3001:4828:5808:ffa3::9 + state: present + - ip: 4001:4828:5808:ffa3::9 + state: absent + adv_interval_centisecs: 200 + state: present + - group_id: 4 + virtual_address: + - ip: 4.1.1.1 + state: present + - ip: 4.1.1.2 + state: present + - ip: 4.1.1.3 + state: absent + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + adv_interval_centisecs: 200 + state: present + vlan100: + vrrp_active_active_mode: true + +> **NOTE**: Interface VRRP cannot exist with L2 modes and can be configured using the *os10_interface* role. + +**Simple playbook to setup system — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vrrp + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/defaults/main.yml new file mode 100644 index 00000000..089bfddc --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_vrrp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/handlers/main.yml new file mode 100644 index 00000000..aef7df3b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_vrrp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/meta/main.yml new file mode 100644 index 00000000..38560f94 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/meta/main.yml @@ -0,0 +1,19 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: > + The os10_vrrp role facilitates the configuration of Virtual Router Redundancy Protocol (VRRP) attributes in + devices running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - dellemc + - emc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tasks/main.yml new file mode 100644 index 00000000..3d8a1a6c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating VRRP configuration for os10" + template: + src: os10_vrrp.j2 + dest: "{{ build_dir }}/vrrp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning VRRP configuration for os10" + os10_config: + src: os10_vrrp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/templates/os10_vrrp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/templates/os10_vrrp.j2 new file mode 100644 index 00000000..a1c75b6a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/templates/os10_vrrp.j2 @@ -0,0 +1,154 @@ +#jinja2: trim_blocks: True, lstrip_blocks: True +{########################################## +Purpose: +Configure VRRP commands for os10 Devices +os10_vrrp: + vrrp: + delay_reload: 2 + version: 3 + ethernet1/1/1: + vrrp_group: + - group_id: 2 + type: ipv6 + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + virtual_address: + - ip: 2001:4828:5808:ffa3::9 + state: present + - ip: 3001:4828:5808:ffa3::9 + state: present + - ip: 4001:4828:5808:ffa3::9 + state: absent + adv_interval_centisecs: 200 + state: present + - group_id: 4 + virtual_address: + - ip: 4.1.1.1 + state: present + - ip: 4.1.1.2 + state: present + - ip: 4.1.1.3 + state: absent + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + adv_interval_centisecs: 200 + state: present + vlan100: + vrrp_active_active_mode: True +#########################################} +{% if os10_vrrp is defined and os10_vrrp %} +{% for key,value in os10_vrrp.items() %} +{% if key == "vrrp" %} + {% if value.delay_reload is defined %} + {% if value.delay_reload >=0 %} +vrrp delay reload {{ value.delay_reload }} + {% else %} +vrrp delay reload {{ value.delay_reload }} + {% endif %} + {% endif %} + {% if value.version is defined %} + {% if value.version %} +vrrp version {{ value.version }} + {% else %} +no vrrp version + {% endif %} + {% endif %} +{% else %} +interface {{ key }} + {% if value %} + {% if key.startswith("vlan") %} + {% if value.vrrp_active_active_mode is defined and value.vrrp_active_active_mode %} + vrrp mode active-active + {% else %} + no vrrp mode active-active + {% endif %} + {% endif %} + {% if value.vrrp_group is defined and value.vrrp_group %} + {% for group in value.vrrp_group %} + {% if group.group_id is defined and group.group_id %} + {% if group.state is defined and group.state == "absent" %} + {% if group.type is defined and group.type == "ipv6" %} + no vrrp-ipv6-group {{ group.group_id }} + {% else %} + no vrrp-group {{ group.group_id }} + {% endif %} + {% else %} + {% if group.type is defined and group.type == "ipv6" %} + vrrp-ipv6-group {{ group.group_id }} + {% else %} + vrrp-group {{ group.group_id }} + {% endif %} + {% if group.adv_interval_centisecs is defined %} + {% if group.adv_interval_centisecs %} + advertise-interval centisecs {{ group.adv_interval_centisecs }} + {% else %} + no advertise-interval centisecs + {% endif %} + {% endif %} + {% if group.adv_interval_secs is defined %} + {% if group.adv_interval_secs %} + advertise-interval secs {{ group.adv_interval_secs }} + {% else %} + no advertise-interval secs + {% endif %} + {% endif %} + {% if group.track_interface is defined and group.track_interface %} + {% for track_item in group.track_interface %} + {% if track_item.state is defined and track_item.state == "absent" %} + {% if track_item.resource_id is defined and track_item.resource_id %} + no track {{ track_item.resource_id }} + {% endif %} + {% else %} + {% if track_item.resource_id is defined and track_item.resource_id %} + {% if track_item.priority_cost is defined and track_item.priority_cost %} + track {{ track_item.resource_id }} priority-cost {{ track_item.priority_cost }} + {% else %} + track {{ track_item.resource_id }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if group.virtual_address is defined and group.virtual_address %} + {% for virtual_interface in group.virtual_address %} + {% if virtual_interface.state is defined and virtual_interface.state == "absent" %} + {% if virtual_interface.ip is defined and virtual_interface.ip %} + no virtual-address {{ virtual_interface.ip }} + {% endif %} + {% else %} + {% if virtual_interface.ip is defined and virtual_interface.ip %} + virtual-address {{ virtual_interface.ip }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if group.preempt is defined %} + {% if group.preempt %} + preempt + {% else %} + no preempt + {% endif %} + {% endif %} + {% if group.priority is defined %} + {% if group.priority %} + priority {{ group.priority }} + {% else %} + no priority + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} +{% endif %} +{% endfor %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/main.os10.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/main.os10.yaml new file mode 100644 index 00000000..97475170 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/main.os10.yaml @@ -0,0 +1,45 @@ +--- +# vars file for dellemc.os10.os10_vrrp, +# below gives a example configuration +# Sample variables for OS10 device +os10_vrrp: + vrrp: + delay_reload: 2 + version: 3 + ethernet1/1/1: + vrrp_group: + - group_id: 2 + type: ipv6 + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + virtual_address: + - ip: 2001:4828:5808:ffa3::9 + state: present + - ip: 3001:4828:5808:ffa3::9 + state: present + - ip: 4001:4828:5808:ffa3::9 + state: absent + adv_interval_centisecs: 200 + state: present + - group_id: 4 + virtual_address: + - ip: 4.1.1.1 + state: present + - ip: 4.1.1.2 + state: present + - ip: 4.1.1.3 + state: absent + priority: 120 + preempt: false + track_interface: + - resource_id: 3 + priority_cost: 25 + state: present + adv_interval_centisecs: 200 + state: present + vlan100: + vrrp_active_active_mode: true diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/test.yaml new file mode 100644 index 00000000..2ed5ab8e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_vrrp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/vars/main.yml new file mode 100644 index 00000000..aa78d677 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vrrp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_vrrp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/README.md new file mode 100644 index 00000000..c517baf6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/README.md @@ -0,0 +1,258 @@ +VxLAN role +======== + +This role facilitates the configuration of virtual extensible LAN (VxLAN) attributes. It supports the configuration of virtual networks, Ethernet virtual private network (EVPN), and network virtualization edge (NVE). This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The VxLAN role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, it generates the role configuration commands in a file +- Any role variable with a corresponding state variable setting to absent negates the configuration of that variable +- Setting an empty value for any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**os10_vxlan keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|-----------------------| +| ``anycast_gateway_mac`` | string | Configures an anycast gateway IP address for a VXLAN virtual network | os10 | +| ``loopback`` | dictionary | Configures the loopback interface (see ``loopback.*``) | os10 | +| ``loopback.loopback_id`` | integer | Configures the loopback interface number (0 to 16383) | os10 | +| ``loopback.description`` | string | Configures the interface description | os10 | +| ``loopback.ip_address`` | string | Configure the IP address | os10 | +| ``loopback.state`` | string: absent,present\* | Removes loopback interface if set to absent | os10 | +| ``nve`` | dictionary | Configures network virtualization edge (see ``nve.*``) | os10 | +| ``nve.source_interface`` | integer | Configures source loopback interface | os10 | +| ``nve.controller`` | dictionary | Configures controller; supports only one controller connection at a time (see ``controller.*``) | os10 | +| ``controller.name`` | string: NSX, ovsdb | Configures the nve controller | os10 | +| ``controller.max_backoff`` | integer | Configures max_backoff value (Setting an empty value negates the corresponding configuration) | os10 | +| ``controller.control_cfg`` | list | Configures the controller IP and port (see ``control_cfg.*``) | os10 | +| ``control_cfg.ip_addr`` | string | Configures the controller IP | os10 | +| ``control_cfg.port`` | integer | Configures the controller port | os10 | +| ``control_cfg.state`` | string: absent,present\* | Removes the controller IP and port configuration if set to absent | os10 | +| ``controller.state`` | string: absent,present\* | Removes the controller if set to absent | os10 | +| ``nve.state`` | string: absent,present\* | Removes the network virtualization edge if set to absent | os10 | +| ``evpn`` | dictionary | Enable the EVPN in control plane (see ``evpn.*``) | os10 | +| ``evpn.autoevi`` | boolean: True, False | Configures auto-EVI; no further manual configuration is allowed in auto-EVI mode | os10 | +| ``evpn.rmac`` | string | Configures router MAC address | os10 | +| ``evpn.evi`` | list | Configures EVPN instance (see ``evi.*``)| os10 | +| ``evpn.dis_rt_asn`` | boolean | Enables/disables AS number usage in route target | os10 | +| ``evpn.vrf`` | dictionary | Enable VRF for EVPN| os10 | +| ``vrf.name`` | string | Configures VRF name | os10 | +| ``vrf.vni`` | integer | Configures VNI for the VRF | os10 | +| ``vrf.rd`` | string | Configures RD for the VRF | os10 | +| ``vrf.route_target`` | dictionary | Enable route target for the VRF | os10 | +| ``route_target.type`` | string (manual, auto) | Configure the route target type | os10 | +| ``route_target.asn_value`` | string | Configure AS number | os10 | +| ``route_target.state`` | string (present,absent) | Configures/unconfigures the route target | os10 | +| ``route_target.route_target_type`` | string | Configure the route target type | os10 | +| ``vrf.adv_ipv4`` | dictionary | Enables IPv4 advertisement VRF | os10 | +| ``adv_ipv4.type`` | string | Configures IPv4 advertisement type | os10 | +| ``adv_ipv4.rmap_name`` | string | Configures route map for advertisement | os10 | +| ``adv_ipv4.unconfig`` | boolean | Configures/unconfigures route map for advertisement | os10 | +| ``evi.id`` | integer | Configures the EVPN instance ID (1 to 65535) | os10 | +| ``evi.rd`` | string | Configure the route distinguisher | os10 | +| ``evi.vni`` | dictionary | Configures VNI value (see ``vni.*``) | os10 | +| ``vni.id`` | integer | Configures VNI value; configure the same VNI value that you configure for the VxLAN virtual network | os10 | +| ``vni.state`` | string: absent,present\* | Removes the VNI if set to absent | os10 | +| ``evi.route_target`` | list | Configures route target (see ``route_target.*``) | os10 | +| ``route_target.type`` | string: manual,auto | Configures the route target (auto mode auto-configures an import and export value for EVPN routes) | os10 | +| ``route_target.asn_value`` | string | Configures the route target asn value | os10 | +| ``route_target.route_target_type`` | string: import,export,both | Configures the route target type | os10 | +| ``route_target.state`` | string: absent,present\* | Removes the route target if set to absent | os10 | +| ``evi.state`` | string: absent,present\* | Removes EVPN instance id if set to absent | os10 | +| ``evpn.state`` | string: absent,present\* | Removes the EVPN configuration if set to absent | os10 | +| ``virtual_network`` | dictionary | Configures the virtual network attributes (see ``virtual_network.*``) | os10 | +| ``virtual_network.untagged_vlan`` | integer | Configures the reserved untagged VLAN ID, from 1 to 4093 | os10 | +| ``virtual_network.virtual_net`` | list | Configures the virtual network attributes for VxLAN tunneling (see ``virtual_net.*``) | os10 | +| ``virtual_net.id`` | integer | Configures a virtual network ( virtual-network ID, from 1 to 65535) | os10 | +| ``virtual_net.description`` | string | Configures the Description for Virtual Network | os10 | +| ``virtual_net.vlt_vlan_id`` | integer | Configures VLTi VLAN ID | os10 | +| ``virtual_net.member_interface`` | list | Configures the trunk member interface attributes to the virtual network (see ``member_interface.*``) | os10 | +| ``member_interface.ifname`` | string | Configures interface name to provision the virtual network member interface | os10 | +| ``member_interface.type`` | string: tagged,untagged | Configures the type to provision the virtual network member interface | os10 | +| ``member_interface.vlanid`` | integer | Configures the VLAN ID to provision the virtual network member interface | os10 | +| ``member_interface.state`` | string: absent,present\* | Removes the virtual network member interface if set to absent | os10 | +| ``virtual_net.vxlan_vni`` | dictionary | Configures the VxLAN attributes to virtual network (see ``vxlan_vni.*``) | os10 | +| ``vxlan_vni.id`` | integer | Configures the VXLAN ID to a virtual network | os10 | +| ``vxlan_vni.remote_endpoint`` | list | Configures the IP address of a remote tunnel endpoint in a VxLAN network (see ``remote_endpoint.*``) | os10 | +| ``remote_endpoint.ip`` | string | Configures the IP address of a remote tunnel endpoint (1.1.1.1) | os10 | +| ``remote_endpoint.state`` | string: absent,present\* | Removes the remote tunnel endpoint in a VxLAN network if set to absent | os10 | +| ``vxlan_vni.state`` | string: absent,present\* | Removes the VxLAN ID if set to absent | os10 | +| ``virtual_net.state`` | string: absent,present\* | Removes a virtual network if set to absent | os10 | +| ``vlan_association`` | list | Configures the VLAN association with virtual network (see ``vlan_association.*``) | os10 | +| ``vlan_association.vlan_id`` | integer | Specifies the VLAN ID | os10 | +| ``vlan_association.virtual_net`` | integer | Specifies the virtual netwrok ID which is to be associated with VLAN | os10 | + + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory, or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-----------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOME` environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_vxlan* role to configure the VxLAN network, source IP address on VxLAN tunnel endpoint and virtual networks. It creates a *hosts* file with the switch details, a *host_vars* file with connection variables and the corresponding role variables. The hosts file should define the ansible_network_os variable with the corresponding Dell EMC OS10 name. + +When `os10_cfg_generate` is set to true, the variable generates the configuration commands as a .part file in *build_dir* path. By default, the variable is set to false. This example writes a simple playbook that only references the *os10_vxlan* role. + +**Sample hosts file** + + leaf1 ansible_host= <ip_address> + +**Sample host_vars/leaf1** + + hostname: leaf1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/os10 + + os10_vxlan: + anycast_gateway_mac: "00:22:33:44:55:66" + loopback: + loopback_id: 10 + description: "HARDWARE_VXLAN" + ip_address: "10.8.0.1/32" + state: "present" + nve: + source_interface: 10 + controller: + name: "ovsdb" + max_backoff: 2000 + control_cfg: + - ip_addr: "1.2.3.4" + port: 30 + state: "present" + state: "present" + state: "present" + evpn: + autoevi: False + evi: + - id: 111 + rd: "auto" + vni: + id: 111 + state: "present" + route_target: + - type: "manual" + asn_value: "111:111" + route_target_type: "both" + state: "present" + - type: "manual" + asn_value: "11:11" + route_target_type: "export" + state: "present" + state: "present" + - id: 222 + rd: "2.2.2.2:222" + vni: + id: 222 + state: "present" + route_target: + - type: "auto" + asn_value: + route_target_type: + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + - name: "blue" + state: "absent" + rmac: 00:11:11:11:11:11 + dis_rt_asn: "true" + state: "present" + virtual_network: + untagged_vlan: 1001 + virtual_net: + - id: 111 + description: "NSX_Cluster_VNI_111" + vlt_vlan_id: 11 + member_interface: + - ifname: "ethernet 1/1/15" + type: "tagged" + vlanid: 15 + state: "present" + - ifname: "port-channel 12" + type: "tagged" + vlanid: 11 + state: "present" + vxlan_vni: + id: 111 + remote_endpoint: + - ip: "1.1.1.1" + state: "present" + - ip: "11.11.11.11" + state: "present" + - ip: "111.111.111.111" + state: "present" + state: "present" + state: "present" + - id: 222 + description: "NSX_Cluster_VNI_222" + vlt_vlan_id: 22 + member_interface: + - ifname: "ethernet 1/1/16" + type: "tagged" + vlanid: 16 + state: "present" + vxlan_vni: + id: 222 + remote_endpoint: + - ip: "2.2.2.2" + state: "present" + - ip: "22.22.22.22" + state: "present" + state: "present" + state: "present" + vlan_association: + - vlain_id: 111 + virtual_net: 111 + +> **NOTE**: Member interfaces should be in switchport trunk mode which can be configured using the *os10_interface* role. + +**Simple playbook to configure VxLAN — leaf.yaml** + + - hosts: leaf1 + roles: + - dellemc.os10.os10_vxlan + +**Run** + + ansible-playbook -i hosts leaf.yaml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/defaults/main.yml new file mode 100644 index 00000000..adeae550 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_vxlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/handlers/main.yml new file mode 100644 index 00000000..a6b6bc57 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_vxlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/meta/main.yml new file mode 100644 index 00000000..87908f3c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/meta/main.yml @@ -0,0 +1,20 @@ +# Copyright (c) 2020 Dell Inc. or its subsidiaries. All Rights Reserved. +--- +galaxy_info: + role_name: os10_vxlan + author: Dell EMC Networking Engineering + description: > + The os10_vxlan role facilitates the configuration of nve evpn and virtual network attributes in devices + running Dell EMC SmartFabric OS10. + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - emc + - dellemc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tasks/main.yml new file mode 100644 index 00000000..f90be2d7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating vxlan configuration for os10" + template: + src: os10_vxlan.j2 + dest: "{{ build_dir }}/vxlan10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning vxlan configuration for os10" + os10_config: + src: os10_vxlan.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/templates/os10_vxlan.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/templates/os10_vxlan.j2 new file mode 100644 index 00000000..b56da068 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/templates/os10_vxlan.j2 @@ -0,0 +1,434 @@ +#jinja2: trim_blocks: True,lstrip_blocks: True +{############################################# +#Purpose: +Configure VXLAN commands for os10 Devices +os10_vxlan: + anycast_gateway_mac: "00:22:33:44:55:66" + loopback: + loopback_id: 10 + description: "HARDWARE_VXLAN" + ip_address: "10.8.0.1/32" + state: "present" + nve: + source_interface: 10 + controller: + name: "ovsdb" + max_backoff: 2000 + control_cfg: + - ip_addr: "1.2.3.4" + port: 30 + state: "present" + state: "present" + state: "present" + evpn: + autoevi: False + evi: + - id: 111 + rd: "auto" + vni: + id: 111 + state: "present" + route_target: + - type: "manual" + asn_value: "111:111" + route_target_type: "both" + state: "present" + - type: "manual" + asn_value: "11:11" + route_target_type: "export" + state: "present" + state: "present" + - id: 222 + rd: "2.2.2.2:222" + vni: + id: 222 + state: "present" + route_target: + - type: "auto" + asn_value: + route_target_type: + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + - name: "blue" + state: "absent" + rmac: 00:11:11:11:11:11 + dis_rt_asn: "true" + state: "present" + virtual_network: + untagged_vlan: 1001 + virtual_net: + - id: 111 + description: "NSX_Cluster_VNI_111" + vlt_vlan_id: 11 + member_interface: + - ifname: "ethernet 1/1/15" + type: "tagged" + vlanid: 15 + state: "present" + - ifname: "port-channel 12" + type: "tagged" + vlanid: 11 + state: "present" + vxlan_vni: + id: 111 + remote_endpoint: + - ip: "1.1.1.1" + state: "present" + - ip: "11.11.11.11" + state: "present" + - ip: "111.111.111.111" + state: "present" + state: "present" + state: "present" + - id: 222 + description: "NSX_Cluster_VNI_222" + vlt_vlan_id: 22 + member_interface: + - ifname: "ethernet 1/1/16" + type: "tagged" + vlanid: 16 + state: "present" + vxlan_vni: + id: 222 + remote_endpoint: + - ip: "2.2.2.2" + state: "present" + - ip: "22.22.22.22" + state: "present" + state: "present" + state: "present" + vlan_association: + - vlain_id: 111 + virtual_net: 111 +###############################################} +{% if os10_vxlan is defined and os10_vxlan %} + {% if os10_vxlan.anycast_gateway_mac is defined %} + {% if os10_vxlan.anycast_gateway_mac %} +ip virtual-router mac-address {{ os10_vxlan.anycast_gateway_mac }} + {% else %} +no ip virtual-router mac-address + {% endif %} + {% endif %} + {% if os10_vxlan.loopback is defined %} + {% set loopback = os10_vxlan.loopback %} + {% if loopback.state is defined and loopback.state == "absent" %} + {% if loopback.loopback_id is defined and loopback.loopback_id %} +no interface loopback {{ loopback.loopback_id }} + {% endif %} + {% else %} + {% if loopback.loopback_id is defined and loopback.loopback_id %} +interface loopback {{ loopback.loopback_id }} + {% endif %} + {% if loopback.description is defined %} + {% if loopback.description %} + description {{ loopback.description }} + {% else %} + no description {{ loopback.description }} + {% endif %} + {% endif %} + {% if loopback.ip_address is defined %} + {% if loopback.ip_address %} + ip address {{ loopback.ip_address }} + {% else %} + no ip address + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if os10_vxlan.nve is defined and os10_vxlan.nve %} + {% set nve = os10_vxlan.nve %} + {% if nve.state is defined and nve.state == "absent" %} +no nve + {% else %} +nve + {% if nve.source_interface is defined %} + {% if nve.source_interface >= 0 %} + source-interface loopback{{ nve.source_interface }} + {% else %} + no source-interface + {% endif %} + {% endif %} + {% if nve.controller is defined %} + {% set controller = os10_vxlan.nve.controller %} + {% if controller.state is defined and controller.state == "absent" %} + no controller + {% else %} + {% if controller.name is defined and controller.name %} + controller {{ controller.name }} + {% endif %} + {% if controller.max_backoff is defined %} + {% if controller.max_backoff %} + max-backoff {{ controller.max_backoff }} + {% else %} + no max-backoff + {% endif %} + {% endif %} + {% if controller.control_cfg is defined and controller.control_cfg %} + {% for ctrl_cfg in controller.control_cfg %} + {% if ctrl_cfg.ip_addr is defined and ctrl_cfg.ip_addr %} + {% if ctrl_cfg.port is defined and ctrl_cfg.port %} + {% if ctrl_cfg.state is defined and ctrl_cfg.state == "absent" %} + {% if controller.name == "ovsdb" %} + no ip {{ ctrl_cfg.ip_addr }} port {{ ctrl_cfg.port }} ssl + {% else %} + no ip {{ ctrl_cfg.ip_addr }} port {{ ctrl_cfg.port }} + {% endif %} + {% else %} + {% if controller.name == "ovsdb" %} + ip {{ ctrl_cfg.ip_addr }} port {{ ctrl_cfg.port }} ssl + {% else %} + ip {{ ctrl_cfg.ip_addr }} port {{ ctrl_cfg.port }} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if os10_vxlan.evpn is defined and os10_vxlan.evpn %} + {% set evpn = os10_vxlan.evpn %} + {% if evpn.state is defined and evpn.state == "absent" %} +no evpn + {% else %} +evpn + {% if evpn.rmac is defined %} + {% if evpn.rmac %} + router-mac {{ evpn.rmac }} + {% else %} + no router-mac + {% endif %} + {% endif %} + {% if evpn.dis_rt_asn is defined and evpn.dis_rt_asn == "true" %} + disable-rt-asn + {% else %} + no disable-rt-asn + {% endif %} + {% if evpn.evi is defined and evpn.evi %} + {% for evi in evpn.evi %} + {% if evi.id is defined and evi.id %} + {% if evi.state is defined and evi.state == "absent" %} + no evi {{ evi.id }} + {% else %} + evi {{ evi.id }} + {% if evi.vni is defined and evi.vni %} + {% if evi.vni.id is defined and evi.vni.id %} + {% if evi.vni.state is defined and evi.vni.state == "absent" %} + no vni {{ evi.vni.id }} + {% else %} + vni {{ evi.vni.id }} + {% endif %} + {% endif %} + {% endif %} + {% if evi.rd is defined %} + {% if evi.rd %} + rd {{ evi.rd }} + {% else %} + no rd + {% endif %} + {% endif %} + {% if evi.route_target is defined and evi.route_target %} + {% for rt in evi.route_target %} + {% if rt.type is defined and rt.type == "manual" %} + {% if rt.asn_value is defined and rt.asn_value %} + {% if rt.state is defined and rt.state == "absent" %} + no route-target {{ rt.asn_value }} + {% else %} + {% if rt.route_target_type is defined and rt.route_target_type %} + route-target {{ rt.asn_value }} {{ rt.route_target_type }} + {% endif %} + {% endif %} + {% endif %} + {% elif rt.type is defined and rt.type == "auto" %} + {% if rt.state is defined and rt.state == "absent" %} + no route-target auto + {% else %} + route-target auto + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if evpn.vrf is defined %} + {% for evpn_vrf in evpn.vrf %} + {% if evpn_vrf.state is defined and evpn_vrf.state == "absent" and evpn_vrf.name %} + no vrf {{ evpn_vrf.name }} + {% elif evpn_vrf.name %} + vrf {{ evpn_vrf.name }} + {% if evpn_vrf.vni is defined %} + {% if evpn_vrf.vni %} + vni {{ evpn_vrf.vni }} + {% else %} + no vni + {% endif %} + {% endif %} + {% if evpn_vrf.rd is defined %} + {% if evpn_vrf.rd %} + rd {{ evpn_vrf.rd }} + {% else %} + no rd + {% endif %} + {% endif %} + {% if evpn_vrf.route_target is defined and evpn_vrf.route_target %} + {% for rt in evpn_vrf.route_target %} + {% if rt.type is defined and rt.type == "manual" %} + {% if rt.asn_value is defined and rt.asn_value %} + {% if rt.state is defined and rt.state == "absent" %} + no route-target {{ rt.asn_value }} + {% else %} + {% if rt.route_target_type is defined and rt.route_target_type %} + route-target {{ rt.asn_value }} {{ rt.route_target_type }} + {% endif %} + {% endif %} + {% endif %} + {% elif rt.type is defined and rt.type == "auto" %} + {% if rt.state is defined and rt.state == "absent" %} + no route-target auto + {% else %} + route-target auto + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if evpn_vrf.adv_ipv4 is defined and evpn_vrf.adv_ipv4 %} + {% for rt in evpn_vrf.adv_ipv4 %} + {% if rt.unconfig is defined and rt.unconfig == "true" and rt.type is defined and rt.rmap_name is defined %} + no advertise ipv4 {{ rt.type }} route-map {{ rt.rmap_name }} + {% elif rt.type is defined and rt.rmap_name is defined %} + advertise ipv4 {{ rt.type }} route-map {{ rt.rmap_name }} + {% elif rt.unconfig is defined and rt.unconfig == "true" and rt.type is defined %} + no advertise ipv4 {{ rt.type }} + {% elif rt.type is defined %} + advertise ipv4 {{ rt.type }} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + + {% if evpn.autoevi is defined %} + {% if evpn.autoevi == True %} + auto-evi + {% else %} + no auto-evi + {% endif %} + {% endif %} + {% endif %} + {% endif %} + + {% if os10_vxlan.virtual_network is defined and os10_vxlan.virtual_network %} + {% set vir_net = os10_vxlan.virtual_network %} + {% if vir_net.untagged_vlan is defined %} + {% if vir_net.untagged_vlan %} +virtual-network untagged-vlan {{ vir_net.untagged_vlan }} + {% else %} +no virtual-network untagged-vlan + {% endif %} + {% endif %} + {% if vir_net.virtual_net is defined and vir_net.virtual_net %} + {% for v_net in vir_net.virtual_net %} + {% if v_net.id is defined and v_net.id %} + {% if v_net.state is defined and v_net.state == "absent" %} +no interface virtual-network {{ v_net.id }} +no virtual-network {{ v_net.id }} + {% else %} +virtual-network {{ v_net.id }} + {% if v_net.description is defined %} + {% if v_net.description %} + description {{ v_net.description }} + {% else %} + no description + {% endif %} + {% endif %} + {% if v_net.vlt_vlan_id is defined %} + {% if v_net.vlt_vlan_id %} + vlti-vlan {{ v_net.vlt_vlan_id }} + {% else %} + no vlti-vlan + {% endif %} + {% endif %} + {% if v_net.member_interface is defined and v_net.member_interface %} + {% for member_intf in v_net.member_interface %} + {% if member_intf.ifname is defined and member_intf.ifname %} + {% if member_intf.type is defined %} + {% if member_intf.type == "tagged" %} + {% if member_intf.vlanid is defined and member_intf.vlanid %} + {% if member_intf.state is defined and member_intf.state == "absent" %} + no member-interface {{ member_intf.ifname }} vlan-tag {{ member_intf.vlanid }} + {% else %} + member-interface {{ member_intf.ifname }} vlan-tag {{ member_intf.vlanid }} + {% endif %} + {% endif %} + {% elif member_intf.type == "untagged" %} + {% if member_intf.state is defined and member_intf.state == "absent" %} + no member-interface {{ member_intf.ifname }} untagged + {% else %} + member-interface {{ member_intf.ifname }} untagged + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if v_net.vxlan_vni is defined and v_net.vxlan_vni %} + {% set vxlan_vni = v_net.vxlan_vni %} + {% if vxlan_vni.id is defined and vxlan_vni.id %} + {% if vxlan_vni.state is defined and vxlan_vni.state == "absent" %} + no vxlan-vni {{ vxlan_vni.id }} + {% else %} + vxlan-vni {{ vxlan_vni.id }} + {% if vxlan_vni.remote_endpoint is defined and vxlan_vni.remote_endpoint %} + {% for remote_endpt in vxlan_vni.remote_endpoint %} + {% if remote_endpt.ip is defined and remote_endpt.ip %} + {% if remote_endpt.state is defined and remote_endpt.state == "absent" %} + no remote-vtep {{ remote_endpt.ip }} + {% else %} + remote-vtep {{ remote_endpt.ip }} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endif %} + {% if os10_vxlan.vlan_association is defined and os10_vxlan.vlan_association %} + {% for vlan in os10_vxlan.vlan_association %} + {% if vlan.vlan_id is defined and vlan.vlan_id %} +interface vlan{{ vlan.vlan_id }} + {% if vlan.virtual_net is defined %} + {% if vlan.virtual_net %} + virtual-network {{ vlan.virtual_net }} + {% else %} + no virtual-network + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/main.yaml new file mode 100644 index 00000000..d326e635 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/main.yaml @@ -0,0 +1,112 @@ +--- +os10_vxlan: + anycast_gateway_mac: "00:22:33:44:55:66" + loopback: + loopback_id: 10 + description: "HARDWARE_VXLAN" + ip_address: "10.8.0.1/32" + state: "present" + nve: + source_interface: 10 + controller: + name: "ovsdb" + max_backoff: 2000 + control_cfg: + - ip_addr: "1.2.3.4" + port: 30 + state: "present" + state: "present" + state: "present" + evpn: + autoevi: False + evi: + - id: 111 + rd: "auto" + vni: + id: 111 + state: "present" + route_target: + - type: "manual" + asn_value: "111:111" + route_target_type: "both" + state: "present" + - type: "manual" + asn_value: "11:11" + route_target_type: "export" + state: "present" + state: "present" + - id: 222 + rd: "2.2.2.2:222" + vni: + id: 222 + state: "present" + route_target: + - type: "auto" + asn_value: + route_target_type: + state: "present" + state: "present" + vrf: + - name: "test" + vni: 1000 + adv_ipv4: + - type: "connected" + state: "present" + - type: "bgp" + state: "present" + route_target: + - type: "manual" + asn_value: "65530:65534" + route_target_type: "both" + state: "present" + - name: "blue" + state: "absent" + rmac: 00:11:11:11:11:11 + dis_rt_asn: "true" + state: "present" + virtual_network: + untagged_vlan: 1001 + virtual_net: + - id: 111 + description: "NSX_Cluster_VNI_111" + vlt_vlan_id: 11 + member_interface: + - ifname: "ethernet 1/1/15" + type: "tagged" + vlanid: 15 + state: "present" + - ifname: "port-channel 12" + type: "tagged" + vlanid: 11 + state: "present" + vxlan_vni: + id: 111 + remote_endpoint: + - ip: "1.1.1.1" + state: "present" + - ip: "11.11.11.11" + state: "present" + - ip: "111.111.111.111" + state: "present" + state: "present" + state: "present" + - id: 222 + description: "NSX_Cluster_VNI_222" + vlt_vlan_id: 22 + member_interface: + - ifname: "ethernet 1/1/16" + type: "tagged" + vlanid: 16 + state: "present" + vxlan_vni: + id: 222 + remote_endpoint: + - ip: "2.2.2.2" + state: "present" + - ip: "22.22.22.22" + state: "present" + state: "present" + state: "present" + vlan_association: + - vlain_id: 111 + virtual_net: 111 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/test.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/test.yml new file mode 100644 index 00000000..f5e4a6c1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/tests/test.yml @@ -0,0 +1,5 @@ +--- +- hosts: os10host + connection: network_cli + roles: + - dellemc.os10.os10_vxlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/vars/main.yml new file mode 100644 index 00000000..0373f0aa --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_vxlan/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_vxlan diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/LICENSE b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/LICENSE new file mode 100644 index 00000000..2c9b8e1f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (c) 2020, Dell Inc. All rights reserved. + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <https://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (c) 2020, Dell Inc. All rights reserved. + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<https://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<https://www.gnu.org/licenses/why-not-lgpl.html>. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/README.md b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/README.md new file mode 100644 index 00000000..1ad914b7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/README.md @@ -0,0 +1,196 @@ +# xSTP role + +This role facilitates the configuration of xSTP attributes. It supports multiple version of spanning-tree protocol (STP), rapid spanning-tree (RSTP), rapid per-VLAN spanning-tree (Rapid PVST+), multiple spanning-tree (MST), and per-VLAN spanning-tree (PVST). It supports the configuration of bridge priority, enabling and disabling spanning-tree, creating and deleting instances, and mapping virtual LAN (VLAN) to instances. This role is abstracted for Dell EMC PowerSwitch platforms running Dell EMC SmartFabric OS10. + +The xSTP role requires an SSH connection for connectivity to a Dell EMC OS10 device. You can use any of the built-in OS connection variables. + +Role variables +-------------- + +- Role is abstracted using the `ansible_network_os` variable that can take `dellemc.os10.os10` as the value +- If `os10_cfg_generate` is set to true, the variable generates the role configuration commands in a file +- `os10_xstp` (dictionary) contains the hostname (dictionary) +- Hostname is the value of the *hostname* variable that corresponds to the name of the device +- Any role variable with a corresponding state variable set to absent negates the configuration of that variable +- Setting an empty value to any variable negates the corresponding configuration +- Variables and values are case-sensitive + +**hostname keys** + +| Key | Type | Description | Support | +|------------|---------------------------|---------------------------------------------------------|----------------------| +| ``type`` | string (required) | Configures the type of spanning-tree mode specified that can vary according to the device including RSTP, rapid-PVST, and MST | os10 | +| ``enable`` | boolean: true,false | Enables/disables the spanning-tree protocol specified in the type variable | os10 | +| ``mac_flush_timer`` | integer | Configures the mac_flush_timer value (0 to 500) | os10 | +| ``rstp`` | dictionary | Configures rapid spanning-tree (see ``rstp.*``) | os10 | +| ``rstp.bridge_priority`` | integer | Configures bridge-priority for the spanning-tree (0 to 61440 in multiples of 4096) | os10 | +| ``rstp.max_age`` | integer | Configures the max_age timer for RSTP (6 to 40) | os10 | +| ``rstp.hello_time`` | integer | Configures the hello-time for RSTP (1 to 10) | os10 | +| ``rstp.forward_time`` | integer | Configures the forward-time for RSTP (4 to 30) | os10 | +| ``rstp.force_version`` | string: stp | Configures the force version for the BPDUs transmitted by RSTP | os10 | +| ``rstp.mac_flush_threshold`` | integer | Configures the MAC flush threshold for RSTP (1 to 65535) | os10 | +| ``pvst`` | dictionary | Configures per-VLAN spanning-tree protocol (see ``pvst.*``) | os10 | +| ``pvst.vlan`` | list | Configures the VLAN for PVST (see ``vlan.*``) | os10 | +| ``vlan.range_or_id`` | string | Configures a VLAN/range of VLANs for the per-VLAN spanning-tree protocol | os10 | +| ``vlan.max_age`` | integer | Configures the max_age timer for a VLAN (6 to 40) | os10 | +| ``vlan.hello_time`` | integer | Configures the hello-time for a VLAN (1 to 10) | os10 | +| ``vlan.forward_time`` | integer | Configures the forward-time for a VLAN (4 to 30) | os10 | +| ``vlan.enable`` | boolean: true,false | Enables/disables spanning-tree for the associated VLAN range_or_id | os10 | +| ``vlan.mac_flush_threshold`` | integer | Configures the MAC flush threshold for a VLAN (1 to 65535) | os10 | +| ``vlan.root`` | string: primary,secondary | Designates the primary or secondary root for the associated VLAN range_or_id; mutually exclusive with *vlan.bridge_priority* | os10 | +| ``vlan.bridge_priority`` | integer | Configures bridge-priority for the per-VLAN spanning-tree (0 to 61440 in multiples of 4096); mutually exclusive with *vlan.root* | os10 | +| ``mstp`` | dictionary | Configures multiple spanning-tree protocol (see ``mstp.*``) | os10 | +| ``mstp.max_age`` | integer | Configures the max_age timer for MSTP (6 to 40) | os10 | +| ``mstp.max_hops`` | integer | Configures the max-hops for MSTP (6 to 40) | os10 | +| ``mstp.hello_time`` | integer | Configures the hello-time for MSTP (1 to 10) | os10 | +| ``mstp.forward_time`` | integer | Configures the forward-time for MSTP (4 to 30) | os10 | +| ``mstp.force_version`` | string: stp,rstp | Configures the force-version for the BPDUs transmitted by MSTP | os10 | +| ``mstp.mstp_instances`` | list | Configures a MSTP instance (see ``mstp_instances.*``) | os10 | +| ``mstp_instances.number_or_range`` | integer | Configures the multiple spanning-tree instance number| os10 | +| ``mstp_instances.bridge_priority`` | integer | Configures the bridge-priority for the spanning-tree (0 to 61440 in multiples of 4096); mutually exclusive with *mstp_instances.root* | os10 | +| ``mstp_instances.enable`` | boolean: true,false | Enables/disables spanning-tree for the associated MSTP instance | os10 | +| ``mstp_instances.mac_flush_threshold`` | integer | Configures the MAC flush-threshold for an MSTP instance (1 to 65535) | os10 | +| ``mstp_instances.root`` | string: primary,secondary | Designates the primary or secondary root for the associated MSTP instance; mutually exclusive with *mstp_instances.bridge_priority* | os10 | +| ``mstp.mst_config`` | dictionary | Configures multiple spanning-tree (see ``mstp.mst_config.*``); supported | os10 | +| ``mst_config.name`` | string | Configures the name which is specified for the MSTP | os10 | +| ``mst_config.revision`` | integer | Configures the revision number for MSTP | os10 | +| ``mst_config.cfg_list`` | list | Configures the multiple spanning-tree list (see ``mst_config.cfg_list.*``) | os10 | +| ``cfg_list.number`` | integer | Specifies the MSTP instance number | os10 | +| ``cfg_list.vlans`` | string | Configures a VLAN/range of VLANs by mapping it to an instance number | os10 | +| ``cfg_list.vlans_state`` | string: absent,present\* | Deletes a set of VLANs mapped to the spanning-tree instance if set to absent | os10 | +| ``intf`` | list | Configures multiple spanning-tree in an interface (see ``intf.*``) | os10 | +| ``intf <interface name>``| dictionary | Configures the interface name (see ``intf.<interface name>.*``) | os10 | +| ``intf.<interface name>.edge_port`` | boolean: true,false | Configures the EdgePort as dynamic if set to true | os10 | +| ``intf.<interface name>.bpdu_filter``| boolean: true,false | Enables/disables bpdufilter at the interface | os10 | +| ``intf.<interface name>.bpdu_guard``| boolean: true,false | Enables/disables bpduguard at the interface | os10 | +| ``intf.<interface name>.guard``| string: loop,root,none | Configures guard on the interface | os10 | +| ``intf.<interface name>.enable`` | boolean: true,false | Enables/disables spanning-tree at the interface level | os10 | +| ``intf.<interface name>.link_type``| string: auto,point-to-point,shared | Configures the link type at the interface | os10 | +| ``intf.<interface name>.rstp`` | dictionary | Configures the RSTP interface name (see ``intf.<interface name>.rstp.*``) | os10 | +| ``rstp.priority``| integer | Configures the RSTP priority value at the interface | os10 | +| ``rstp.cost`` | integer | Configures the RSTP cost value at the interface | os10 | +| ``intf.<interface name>.msti`` | list | Configures the MSTi interface name (see ``intf.<interface name>.msti``) | os10 | +| ``msti.instance_number`` | integer or range | Specifies the MSTP instance number or range | os10 | +| ``msti.priority`` | integer | Specifies the priority value to be configured at the interface | os10 | +| ``msti.cost`` | integer | Specifies the cost value to be configured at the interface | os10 | +| ``intf.<interface name>.vlan`` | list | Configures the VLAN interface name (see ``intf.<interface name>.vlan``) | os10 | +| ``vlan.range_or_id`` | integer or range | Specifies the VLAN ID or range | os10 | +| ``vlan.priority`` | integer | Specifies the priority value to be configured at the interface | os10 | +| ``vlan.cost`` | integer | Specifies the cost value to be configured at the interface | os10 | + +> **NOTE**: Asterisk (_*_) denotes the default value if none is specified. + +Connection variables +-------------------- + +Ansible Dell EMC network roles require connection information to establish communication with the nodes in your inventory. This information can exist in the Ansible *group_vars* or *host_vars* directories or inventory or in the playbook itself. + +| Key | Required | Choices | Description | +|-------------|----------|------------|-------------------------------------------------------| +| ``ansible_host`` | yes | | Specifies the hostname or address for connecting to the remote device over the specified transport | +| ``ansible_port`` | no | | Specifies the port used to build the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_PORT` option is used; it defaults to 22 | +| ``ansible_ssh_user`` | no | | Specifies the username that authenticates the CLI login for the connection to the remote device; if value is unspecified, the `ANSIBLE_REMOTE_USER` environment variable value is used | +| ``ansible_ssh_pass`` | no | | Specifies the password that authenticates the connection to the remote device | +| ``ansible_become`` | no | yes, no\* | Instructs the module to enter privileged mode on the remote device before sending any commands; if value is unspecified, the `ANSIBLE_BECOM`E environment variable value is used, and the device attempts to execute all commands in non-privileged mode | +| ``ansible_become_method`` | no | enable, sudo\* | Instructs the module to allow the become method to be specified for handling privilege escalation; if value is unspecified, the `ANSIBLE_BECOME_METHOD` environment variable value is used | +| ``ansible_become_pass`` | no | | Specifies the password to use if required to enter privileged mode on the remote device; if ``ansible_become`` is set to no this key is not applicable | +| ``ansible_network_os`` | yes | os10, null\* | Loads the correct terminal and cliconf plugins to communicate with the remote device | + +> **NOTE**: Asterisk (\*) denotes the default value if none is specified. + + +Example playbook +---------------- + +This example uses the *os10_xstp* role to configure different variants of spanning-tree. Based on the type of STP and defined objects, VLANs are associated and bridge priorities are assigned. It creates a *hosts* file with the switch details, and a *host_vars* file with connection variables. The corresponding role variables are defined in the *vars/main.yml* file at the role path. + +It writes a simple playbook that only references the *os10_xstp* role. By including the role, you automatically get access to all of the tasks to configure xSTP. + +**Sample hosts file** + + spine1 ansible_host= <ip_address> + +**Sample host_vars/spine1** + + hostname: spine1 + ansible_become: yes + ansible_become_method: xxxxx + ansible_become_pass: xxxxx + ansible_ssh_user: xxxxx + ansible_ssh_pass: xxxxx + ansible_network_os: dellemc.os10.os10 + build_dir: ../temp/temp_os10 + +**Sample vars/main.yml** + + os10_xstp: + type: rstp + enable: true + path_cost: true + mac_flush_timer: 4 + rstp: + max_age: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + bridge_priority: 4096 + mac_flush_threshold: 5 + pvst: + vlan: + - range_or_id: 10 + max_age: 6 + enable: true + hello_time: 7 + forward_time: 7 + bridge_priority: 4096 + mac_flush_threshold: 9 + mstp: + max_age: 6 + max_hops: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + mstp_instances: + - number_or_range: 1 + enable: true + mac_flush_threshold: 9 + bridge_priority: 4096 + mst_config: + name: cfg1 + revision: 5 + cfg_list: + - number: 1 + vlans: 10,12 + vlans_state: present + intf: + ethernet 1/1/8: + edge_port: true + bpdu_filter: true + bpdu_guard: true + guard: loop + enable: true + link_type: point-to-point + msti: + - instance_number: 1 + priority: 32 + cost: 1 + rstp: + priority: 32 + cost: 7 + vlan: + - range_or_id: 6 + priority: 16 + cost: 8 + + +**Simple playbook to setup system — spine.yml** + + - hosts: spine + roles: + - dellemc.os10.os10_xstp + +**Run** + + ansible-playbook -i hosts spine.yml + +(c) 2017-2020 Dell Inc. or its subsidiaries. All rights reserved. diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/defaults/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/defaults/main.yml new file mode 100644 index 00000000..daaf0f8f --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/defaults/main.yml @@ -0,0 +1,2 @@ +--- +# defaults file for dellemc.os10.os10_xstp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/handlers/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/handlers/main.yml new file mode 100644 index 00000000..645522da --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/handlers/main.yml @@ -0,0 +1,2 @@ +--- +# handlers file for dellemc.os10.os10_xstp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/meta/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/meta/main.yml new file mode 100644 index 00000000..8a63b500 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/meta/main.yml @@ -0,0 +1,18 @@ +# Copyright (c) 2020 Dell Inc. +--- +galaxy_info: + author: Dell EMC Networking Engineering + description: The os10_xstp role facilitates the configuration of STP attributes in devices running Dell EMC SmartFabric OS10. + company: Dell Technologies + license: GPLv3 + min_ansible_version: 2.9.6 + + platforms: + - name: os10 + + galaxy_tags: + - networking + - dell + - dellemc + - emc + - os10 diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tasks/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tasks/main.yml new file mode 100644 index 00000000..e14eb0f7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tasks/main.yml @@ -0,0 +1,16 @@ +--- +# tasks file for os10 + - name: "Generating xSTP configuration for os10" + template: + src: os10_xstp.j2 + dest: "{{ build_dir }}/xstp10_{{ hostname }}.conf.part" + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") and ((os10_cfg_generate | default('False')) | bool) +# notify: save config os10 + register: generate_output + + - name: "Provisioning xSTP configuration for os10" + os10_config: + src: os10_xstp.j2 + when: (ansible_network_os is defined and ansible_network_os == "dellemc.os10.os10") +# notify: save config os10 + register: output diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/templates/os10_xstp.j2 b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/templates/os10_xstp.j2 new file mode 100644 index 00000000..dc7456ba --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/templates/os10_xstp.j2 @@ -0,0 +1,398 @@ +#jinja2: trim_blocks: True, lstrip_blocks: True +{############################################### +PURPOSE: Configure xSTP commands for OS10 devices +os10_xstp: + type: rstp + enable: true + mac_flush_timer: 4 + rstp: + max_age: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + bridge_priority: 4096 + mac_flush_threshold: 5 + pvst: + vlan: + - range_or_id: 10 + max_age: 6 + enable: true + hello_time: 7 + forward_time: 7 + bridge_priority: 4096 + mac_flush_threshold: 9 + mstp: + max_age: 6 + max_hops: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + mstp_instances: + - number_or_range: 1 + enable: true + mac_flush_threshold: 9 + bridge_priority: 4096 + mst_config: + name: cfg1 + revision: 5 + cfg_list: + - number: 1 + vlans: 10,12 + vlans_state: present + intf: + ethernet 1/1/8: + edge_port: true + bpdu_filter: true + bpdu_guard: true + guard: loop + enable: true + link_type: point-to-point + msti: + - instance_number: 1 + priority: 32 + cost: 1 + rstp: + priority: 32 + cost: 7 + vlan: + - range_or_id: 6 + priority: 16 + cost: 8 +#################################################} +{% if os10_xstp is defined and os10_xstp %} +{% set xstp_vars = os10_xstp %} +{% if xstp_vars.type is defined %} + {% if xstp_vars.type %} +spanning-tree mode {{ xstp_vars.type }} + {% else %} +no spanning-tree mode r + {% endif %} +{% endif %} +{% if xstp_vars.enable is defined %} + {% if xstp_vars.enable %} +no spanning-tree disable + {% else %} +spanning-tree disable + {% endif %} +{% endif %} +{% if xstp_vars.mac_flush_timer is defined %} + {% if xstp_vars.mac_flush_timer == 0 or xstp_vars.mac_flush_timer %} +spanning-tree mac-flush-timer {{ xstp_vars.mac_flush_timer }} + {% else %} +no spanning-tree mac-flush-timer + {% endif %} +{% endif %} + +{% if xstp_vars.rstp is defined and xstp_vars.rstp %} + {% set val = xstp_vars.rstp %} + {% if val.bridge_priority is defined %} + {% if val.bridge_priority == 0 or val.bridge_priority %} +spanning-tree rstp priority {{ val.bridge_priority }} + {% else %} +no spanning-tree rstp priority + {% endif %} + {% endif %} + {% if val.forward_time is defined %} + {% if val.forward_time %} +spanning-tree rstp forward-time {{ val.forward_time }} + {% else %} +no spanning-tree rstp forward-time + {% endif %} + {% endif %} + {% if val.hello_time is defined %} + {% if val.hello_time %} +spanning-tree rstp hello-time {{ val.hello_time }} + {% else %} +no spanning-tree rstp hello-time + {% endif %} + {% endif %} + {% if val.max_age is defined %} + {% if val.max_age %} +spanning-tree rstp max-age {{ val.max_age }} + {% else %} +no spanning-tree rstp max-age + {% endif %} + {% endif %} + {% if val.mac_flush_threshold is defined %} + {% if val.mac_flush_threshold %} +spanning-tree rstp mac-flush-threshold {{ val.mac_flush_threshold }} + {% else %} +no spanning-tree rstp mac-flush-threshold + {% endif %} + {% endif %} + {% if val.force_version is defined %} + {% if val.force_version %} +spanning-tree rstp force-version {{ val.force_version }} + {% else %} +no spanning-tree rstp force-version + {% endif %} + {% endif %} +{% endif %} + +{% if xstp_vars.pvst is defined and xstp_vars.pvst %} + {% set val = xstp_vars.pvst %} + {% if val.vlan is defined and val.vlan %} + {% for vlan in val.vlan %} + {% if vlan.range_or_id is defined and vlan.range_or_id %} + {% if vlan.bridge_priority is defined %} + {% if vlan.bridge_priority == 0 or vlan.bridge_priority %} +spanning-tree vlan {{ vlan.range_or_id }} priority {{ vlan.bridge_priority }} + {% else %} +no spanning-tree vlan {{ vlan.range_or_id }} priority + {% endif %} + {% endif %} + {% if vlan.enable is defined %} + {% if vlan.enable %} +no spanning-tree vlan {{ vlan.range_or_id }} disable + {% else %} +spanning-tree vlan {{ vlan.range_or_id }} disable + {% endif %} + {% endif %} + + {% if vlan.forward_time is defined %} + {% if vlan.forward_time %} +spanning-tree vlan {{ vlan.range_or_id }} forward-time {{ vlan.forward_time }} + {% else %} +no spanning-tree vlan {{ vlan.range_or_id }} forward-time + {% endif %} + {% endif %} + {% if vlan.hello_time is defined %} + {% if vlan.hello_time %} +spanning-tree vlan {{ vlan.range_or_id }} hello-time {{ vlan.hello_time }} + {% else %} +no spanning-tree vlan {{ vlan.range_or_id }} hello-time + {% endif %} + {% endif %} + {% if vlan.max_age is defined %} + {% if vlan.max_age %} +spanning-tree vlan {{ vlan.range_or_id }} max-age {{ vlan.max_age }} + {% else %} +no spanning-tree vlan {{ vlan.range_or_id }} max-age + {% endif %} + {% endif %} + {% if vlan.mac_flush_threshold is defined %} + {% if vlan.mac_flush_threshold %} +spanning-tree vlan {{ vlan.range_or_id }} mac-flush-threshold {{ vlan.mac_flush_threshold }} + {% else %} +no spanning-tree vlan {{ vlan.range_or_id }} mac-flush-threshold + {% endif %} + {% endif %} + {% if vlan.root is defined %} + {% if vlan.root %} +spanning-tree vlan {{ vlan.range_or_id }} root {{ vlan.root }} + {% else %} +no spanning-tree vlan {{ vlan.range_or_id }} root p + {% endif %} + {% endif %} + + {% endif %} + {% endfor %} + {% endif %} +{% endif %} +{% if xstp_vars.mstp is defined and xstp_vars.mstp %} + {% set val = xstp_vars.mstp %} + {% if val.forward_time is defined %} + {% if val.forward_time %} +spanning-tree mst forward-time {{ val.forward_time }} + {% else %} +no spanning-tree mst forward-time + {% endif %} + {% endif %} + {% if val.hello_time is defined %} + {% if val.hello_time %} +spanning-tree mst hello-time {{ val.hello_time }} + {% else %} +no spanning-tree mst hello-time + {% endif %} + {% endif %} + {% if val.max_age is defined %} + {% if val.max_age %} +spanning-tree mst max-age {{ val.max_age }} + {% else %} +no spanning-tree mst max-age + {% endif %} + {% endif %} + {% if val.max_hops is defined %} + {% if val.max_hops %} +spanning-tree mst max-hops {{ val.max_hops }} + {% else %} +no spanning-tree mst max-hops + {% endif %} + {% endif %} + {% if val.force_version is defined %} + {% if val.force_version %} +spanning-tree mst force-version {{ val.force_version }} + {% else %} +no spanning-tree mst force-version + {% endif %} + {% endif %} + + {% if val.mstp_instances is defined and val.mstp_instances %} + {% for instance in val.mstp_instances %} + {% if instance.number_or_range is defined and instance.number_or_range %} + {% if instance.bridge_priority is defined %} + {% if instance.bridge_priority ==0 or instance.bridge_priority %} +spanning-tree mst {{ instance.number_or_range }} priority {{ instance.bridge_priority }} + {% else %} +no spanning-tree mst {{ instance.number_or_range }} priority + {% endif %} + {% endif %} + {% if instance.enable is defined %} + {% if instance.enable %} +no spanning-tree mst {{ instance.number_or_range }} disable + {% else %} +spanning-tree mst {{ instance.number_or_range }} disable + {% endif %} + {% endif %} + {% if instance.mac_flush_threshold is defined %} + {% if instance.mac_flush_threshold %} +spanning-tree mst {{ instance.number_or_range }} mac-flush-threshold {{ instance.mac_flush_threshold }} + {% else %} +no spanning-tree mst {{ instance.number_or_range }} mac-flush-threshold + {% endif %} + {% endif %} + {% if instance.root is defined %} + {% if instance.root %} +spanning-tree mst {{ instance.number_or_range }} root {{ instance.root }} + {% else %} +no spanning-tree mst {{ instance.number_or_range }} root p + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if val.mst_config is defined and val.mst_config %} +spanning-tree mst configuration + {% if val.mst_config.name is defined %} + {% if val.mst_config.name %} + name {{ val.mst_config.name }} + {% else %} + no name + {% endif %} + {% endif %} + {% if val.mst_config.revision is defined %} + {% if val.mst_config.revision %} + revision {{ val.mst_config.revision }} + {% else %} + no revision + {% endif %} + {% endif %} + {% for instance in val.mst_config.cfg_list %} + {% if instance.number is defined and instance.number %} + {% if instance.vlans is defined and instance.vlans %} + {% if instance.vlans_state is defined and instance.vlans_state == "absent" %} + no instance {{ instance.number }} vlan {{ instance.vlans }} + {% else %} + instance {{ instance.number }} vlan {{ instance.vlans }} + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} +{% endif %} +{% if xstp_vars.intf is defined and xstp_vars.intf %} + {% for intr in xstp_vars.intf.keys() %} + {% set intf_vars = xstp_vars.intf[intr] %} +interface {{ intr }} + {% if intf_vars.edge_port is defined %} + {% if not intf_vars.edge_port %} + no spanning-tree port type edge + {% else %} + spanning-tree port type edge + {% endif %} + {% endif %} + {% if intf_vars.bpdu_filter is defined %} + {% if intf_vars.bpdu_filter %} + spanning-tree bpdufilter enable + {% else %} + spanning-tree bpdufilter disable + {% endif %} + {% endif %} + {% if intf_vars.bpdu_guard is defined %} + {% if intf_vars.bpdu_guard %} + spanning-tree bpduguard enable + {% else %} + spanning-tree bpduguard disable + {% endif %} + {% endif %} + {% if intf_vars.guard is defined %} + {% if intf_vars.guard %} + spanning-tree guard {{ intf_vars.guard }} + {% else %} + spanning-tree guard none + {% endif %} + {% endif %} + {% if intf_vars.enable is defined %} + {% if intf_vars.enable %} + no spanning-tree disable + {% else %} + spanning-tree disable + {% endif %} + {% endif %} + {% if intf_vars.link_type is defined %} + {% if intf_vars.link_type %} + spanning-tree link-type {{ intf_vars.link_type }} + {% else %} + no spanning-tree link-type + {% endif %} + {% endif %} + {% if intf_vars.rstp is defined and intf_vars.rstp %} + {% if intf_vars.rstp.priority is defined %} + {% if intf_vars.rstp.priority %} + spanning-tree rstp priority {{ intf_vars.rstp.priority }} + {% else %} + no spanning-tree rstp priority + {% endif %} + {% endif %} + {% if intf_vars.rstp.cost is defined %} + {% if intf_vars.rstp.cost %} + spanning-tree rstp cost {{ intf_vars.rstp.cost }} + {% else %} + no spanning-tree rstp cost + {% endif %} + {% endif %} + {% endif %} + {% if intf_vars.msti is defined and intf_vars.msti %} + {% for inst in intf_vars.msti %} + {% if inst.instance_number is defined and inst.instance_number==0 or inst.instance_number %} + {% if inst.priority is defined %} + {% if inst.priority %} + spanning-tree msti {{ inst.instance_number }} priority {{ inst.priority }} + {% else %} + no spanning-tree msti {{ inst.instance_number }} priority 1 + {% endif %} + {% endif %} + {% if inst.cost is defined %} + {% if inst.cost %} + spanning-tree msti {{ inst.instance_number }} cost {{ inst.cost }} + {% else %} + no spanning-tree msti {{ inst.instance_number }} cost 1 + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% if intf_vars.vlan is defined and intf_vars.vlan %} + {% for inst in intf_vars.vlan %} + {% if inst.range_or_id is defined and inst.range_or_id %} + {% if inst.priority is defined %} + {% if inst.priority %} + spanning-tree vlan {{ inst.range_or_id }} priority {{ inst.priority }} + {% else %} + no spanning-tree vlan {{ inst.range_or_id }} priority 1 + {% endif %} + {% endif %} + {% if inst.cost is defined %} + {% if inst.cost %} + spanning-tree vlan {{ inst.range_or_id }} cost {{ inst.cost }} + {% else %} + no spanning-tree vlan {{ inst.range_or_id }} cost 1 + {% endif %} + {% endif %} + {% endif %} + {% endfor %} + {% endif %} + {% endfor %} +{% endif %} + +{% endif %} diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/inventory.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/inventory.yaml new file mode 100644 index 00000000..b1ff63e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/inventory.yaml @@ -0,0 +1,22 @@ +--- +spine1 ansible_host=10.11.182.25 ansible_network_os="dellemc.os10.os10" +spine2 ansible_host=10.16.151.220 ansible_network_os="dellemc.os10.os10" + +leaf1 ansible_host=10.11.182.23 ansible_network_os="dellemc.os10.os10" +leaf2 ansible_host=10.11.182.16 ansible_network_os="dellemc.os10.os10" +leaf3 ansible_host=10.11.182.17 ansible_network_os="dellemc.os10.os10" +leaf4 ansible_host=10.16.148.79 ansible_network_os="dellemc.os10.os10" + +[spine] +spine1 +spine2 + +[leaf] +leaf1 +leaf2 +leaf3 +leaf4 + +[datacenter:children] +spine +leaf diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/main.yaml new file mode 100644 index 00000000..7b55af45 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/main.yaml @@ -0,0 +1,74 @@ +--- +# vars file for dellemc.os10.os10_xstp, +# below gives a sample configuration +# Sample variables for OS10 device +os10_xstp: + type: rstp + enable: true + path_cost: true + mac_flush_timer: 4 + rstp: + max_age: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + bridge_priority: 4096 + mac_flush_threshold: 5 + pvst: + vlan: + - range_or_id: 10 + max_age: 6 + enable: true + hello_time: 7 + forward_time: 7 + bridge_priority: 4096 + mac_flush_threshold: 9 + mstp: + max_age: 6 + max_hops: 6 + hello_time: 7 + forward_time: 7 + force_version: stp + mstp_instances: + - number_or_range: 1 + enable: true + mac_flush_threshold: 9 + bridge_priority: 4096 + mst_config: + name: cfg1 + revision: 5 + cfg_list: + - number: 1 + vlans: 10,12 + vlans_state: present + intf: + ethernet 1/1/8: + edge_port: true + bpdu_filter: true + bpdu_guard: true + guard: loop + enable: true + link_type: point-to-point + msti: + - instance_number: 1 + priority: 32 + cost: 1 + rstp: + priority: 32 + cost: 7 + vlan: + - range_or_id: 6 + priority: 16 + cost: 8 + +# Sample variables for OS10 devices to configure root in pvst and mst +#--- +#os10_xstp: +# pvst: +# vlan: +# - range_or_id: 10 +# root: primary +# mstp: +# mstp_instances: +# - number_or_range: 1 +# root: secondary diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/test.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/test.yaml new file mode 100644 index 00000000..438212ca --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/tests/test.yaml @@ -0,0 +1,5 @@ +--- +- hosts: datacenter + connection: network_cli + roles: + - dellemc.os10.os10_xstp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/vars/main.yml b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/vars/main.yml new file mode 100644 index 00000000..b3eb721a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/roles/os10_xstp/vars/main.yml @@ -0,0 +1,2 @@ +--- +# vars file for dellemc.os10.os10_xstp diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/defaults/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/defaults/main.yaml new file mode 100644 index 00000000..5f709c5a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tasks/cli.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tasks/cli.yaml new file mode 100644 index 00000000..8c11e106 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tasks/cli.yaml @@ -0,0 +1,16 @@ +--- +- name: collect all cli test cases + find: + paths: "{{ role_path }}/tests/cli" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: + test_items: "{{ test_cases.files | map(attribute='path') | list }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tasks/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tasks/main.yaml new file mode 100644 index 00000000..415c99d8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: cli.yaml, tags: ['cli'] } diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/bad_operator.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/bad_operator.yaml new file mode 100644 index 00000000..1fd619b5 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/bad_operator.yaml @@ -0,0 +1,20 @@ +--- +- debug: msg="START cli/bad_operator.yaml" + +- name: test bad operator + os10_command: + commands: + - show version + - show interface ethernet 1/1/1 + wait_for: + - "result[0] contains 'Description : blah'" + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "result.failed == true" + - "result.msg is defined" + +- debug: msg="END cli/bad_operator.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/contains.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/contains.yaml new file mode 100644 index 00000000..77aac00b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/contains.yaml @@ -0,0 +1,20 @@ +--- +- debug: msg="START cli/contains.yaml" + +- name: test contains operator + os10_command: + commands: + - show version + - show interface ethernet 1/1/1 + wait_for: + - "result[0] contains OS10-Premium" + - "result[1] contains Ethernet " + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + +- debug: msg="END cli/contains.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/invalid.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/invalid.yaml new file mode 100644 index 00000000..6c8aefe1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/invalid.yaml @@ -0,0 +1,28 @@ +--- +- debug: msg="START cli/invalid.yaml" + +- name: run invalid command + os10_command: + commands: ['show foo'] + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "'Error: Unrecognized command' in result.stdout" + +- name: run commands that include invalid command + os10_command: + commands: + - show version + - show foo + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "'Error: Unrecognized command' in result.stdout" + +- debug: msg="END cli/invalid.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/output.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/output.yaml new file mode 100644 index 00000000..48749b2c --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/output.yaml @@ -0,0 +1,29 @@ +--- +- debug: msg="START cli/output.yaml" + +- name: get output for single command + os10_command: + commands: ['show version'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + +- name: get output for multiple commands + os10_command: + commands: + - show version + - show interface Eth 1/1/1 + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.stdout is defined" + - "result.stdout | length == 2" + +- debug: msg="END cli/output.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/timeout.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/timeout.yaml new file mode 100644 index 00000000..d3da30bb --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_command/os10_command/tests/cli/timeout.yaml @@ -0,0 +1,19 @@ +--- +- debug: msg="START cli/timeout.yaml" + +- name: test bad condition + os10_command: + commands: + - show version + wait_for: + - "result[0] contains bad_value_string" + provider: "{{ cli }}" + register: result + ignore_errors: yes + +- assert: + that: + - "result.failed == true" + - "result.msg is defined" + +- debug: msg="END cli/timeout.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/defaults/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/defaults/main.yaml new file mode 100644 index 00000000..5f709c5a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tasks/cli.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tasks/cli.yaml new file mode 100644 index 00000000..d675462d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tasks/cli.yaml @@ -0,0 +1,15 @@ +--- +- name: collect all cli test cases + find: + paths: "{{ role_path }}/tests/cli" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: test_items="{{ test_cases.files | map(attribute='path') | list }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tasks/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tasks/main.yaml new file mode 100644 index 00000000..415c99d8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: cli.yaml, tags: ['cli'] } diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel.yaml new file mode 100644 index 00000000..2fa9951a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel.yaml @@ -0,0 +1,42 @@ +--- +- debug: msg="START cli/sublevel.yaml" + +- name: setup test + os10_config: + lines: + - 'no ip access-list test' + provider: "{{ cli }}" + match: none + +- name: configure sub level command + os10_config: + lines: ['seq 5 permit ip any any count byte'] + parents: ['ip access-list test'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'seq 5 permit ip any any count byte' in result.updates" + +- name: configure sub level command idempotent check + os10_config: + lines: ['seq 5 permit ip any any count byte'] + parents: ['ip access-list test'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os10_config: + lines: + - 'no ip access-list test' + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/sublevel.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_block.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_block.yaml new file mode 100644 index 00000000..32fe1bde --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_block.yaml @@ -0,0 +1,62 @@ +--- +- debug: msg="START cli/sublevel_block.yaml" + +- name: setup + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + parents: ['ip access-list test'] + before: ['no ip access-list test'] + after: ['exit'] + provider: "{{ cli }}" + match: none + +- name: configure sub level command using block resplace + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + parents: ['ip access-list test'] + replace: block + after: ['exit'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'seq 5 permit ip host 192.0.2.1 any count byte' in result.updates" + - "'seq 10 permit ip host 192.0.2.2 any count byte' in result.updates" + - "'seq 15 permit ip host 192.0.2.3 any count byte' in result.updates" + - "'seq 20 permit ip host 192.0.2.4 any count byte' in result.updates" + +- name: check sub level command using block replace + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + parents: ['ip access-list test'] + replace: block + after: ['exit'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os10_config: + lines: + - no ip access-list test + match: none + provider: "{{ cli }}" + +- debug: msg="END cli/sublevel_block.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_exact.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_exact.yaml new file mode 100644 index 00000000..d4dcd8ac --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_exact.yaml @@ -0,0 +1,66 @@ +--- +- debug: msg="START cli/sublevel_exact.yaml" + +- name: setup + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + - seq 25 permit ip host 192.0.2.5 any count byte + parents: ['ip access-list test'] + before: ['no ip access-list test'] + after: ['exit'] + provider: "{{ cli }}" + match: none + +- name: configure sub level command using exact match + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + parents: ['ip access-list test'] + after: ['exit'] + match: exact + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'seq 5 permit ip host 192.0.2.1 any count byte' in result.updates" + - "'seq 10 permit ip host 192.0.2.2 any count byte' in result.updates" + - "'seq 15 permit ip host 192.0.2.3 any count byte' in result.updates" + - "'seq 20 permit ip host 192.0.2.4 any count byte' in result.updates" + - "'seq 25 permit ip host 192.0.2.5 any count byte' not in result.updates" + +- name: check sub level command using exact match + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + - seq 25 permit ip host 192.0.2.5 any count byte + parents: ['ip access-list test'] + after: ['exit'] + match: exact + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os10_config: + lines: + - no ip access-list test + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/sublevel_exact.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_strict.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_strict.yaml new file mode 100644 index 00000000..94c85eb2 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/sublevel_strict.yaml @@ -0,0 +1,63 @@ +--- +- debug: msg="START cli/sublevel_strict.yaml" + +- name: setup + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + - seq 25 permit ip host 192.0.2.5 any count byte + parents: ['ip access-list test'] + before: ['no ip access-list test'] + after: ['exit'] + provider: "{{ cli }}" + match: none + +- name: configure sub level command using strict match + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 20 permit ip host 192.0.2.4 any count byte + parents: ['ip access-list test'] + match: strict + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: check sub level command using strict match + os10_config: + lines: + - seq 5 permit ip host 192.0.2.1 any count byte + - seq 15 permit ip host 192.0.2.3 any count byte + - seq 10 permit ip host 192.0.2.2 any count byte + parents: ['ip access-list test'] + after: ['exit'] + match: strict + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'ip access-list test' in result.updates" + - "'seq 5 permit ip host 192.0.2.1 any count byte' not in result.updates" + - "'seq 10 permit ip host 192.0.2.2 any count byte' in result.updates" + - "'seq 15 permit ip host 192.0.2.3 any count byte' in result.updates" + - "'seq 20 permit ip host 192.0.2.4 any count byte' not in result.updates" + - "'seq 25 permit ip host 192.0.2.5 any count byte' not in result.updates" + +- name: teardown + os10_config: + lines: + - no ip access-list test + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/sublevel_strict.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel.yaml new file mode 100644 index 00000000..e148a46d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel.yaml @@ -0,0 +1,37 @@ +--- +- debug: msg="START cli/toplevel.yaml" + +- name: setup + os10_config: + lines: ['hostname {{ inventory_hostname_short }}'] + provider: "{{ cli }}" + match: none + +- name: configure top level command + os10_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + +- name: configure top level command idempotent check + os10_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os10_config: + lines: ['hostname {{ inventory_hostname_short }}'] + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_after.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_after.yaml new file mode 100644 index 00000000..94122739 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_after.yaml @@ -0,0 +1,44 @@ +--- +- debug: msg="START cli/toplevel_after.yaml" + +- name: setup + os10_config: + lines: + - "snmp-server contact ansible" + - "hostname {{ inventory_hostname_short }}" + provider: "{{ cli }}" + match: none + +- name: configure top level command with before + os10_config: + lines: ['hostname foo'] + after: ['snmp-server contact bar'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + - "'snmp-server contact bar' in result.updates" + +- name: configure top level command with before idempotent check + os10_config: + lines: ['hostname foo'] + after: ['snmp-server contact foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os10_config: + lines: + - "no snmp-server contact" + - "hostname {{ inventory_hostname_short }}" + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel_after.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_before.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_before.yaml new file mode 100644 index 00000000..da8b604e --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_before.yaml @@ -0,0 +1,44 @@ +--- +- debug: msg="START cli/toplevel_before.yaml" + +- name: setup + os10_config: + lines: + - "snmp-server contact ansible" + - "hostname {{ inventory_hostname_short }}" + provider: "{{ cli }}" + match: none + +- name: configure top level command with before + os10_config: + lines: ['hostname foo'] + before: ['snmp-server contact bar'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + - "'snmp-server contact bar' in result.updates" + +- name: configure top level command with before idempotent check + os10_config: + lines: ['hostname foo'] + before: ['snmp-server contact foo'] + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + +- name: teardown + os10_config: + lines: + - "no snmp-server contact" + - "hostname {{ inventory_hostname_short }}" + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel_before.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_nonidempotent.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_nonidempotent.yaml new file mode 100644 index 00000000..03f5ade1 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_config/os10_config/tests/cli/toplevel_nonidempotent.yaml @@ -0,0 +1,39 @@ +--- +- debug: msg="START cli/toplevel_nonidempotent.yaml" + +- name: setup + os10_config: + lines: ['hostname {{ inventory_hostname_short }}'] + provider: "{{ cli }}" + match: none + +- name: configure top level command + os10_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + match: strict + register: result + +- assert: + that: + - "result.changed == true" + - "'hostname foo' in result.updates" + +- name: configure top level command idempotent check + os10_config: + lines: ['hostname foo'] + provider: "{{ cli }}" + match: strict + register: result + +- assert: + that: + - "result.changed == true" + +- name: teardown + os10_config: + lines: ['hostname {{ inventory_hostname_short }}'] + provider: "{{ cli }}" + match: none + +- debug: msg="END cli/toplevel_nonidempotent.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/defaults/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/defaults/main.yaml new file mode 100644 index 00000000..5f709c5a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/defaults/main.yaml @@ -0,0 +1,2 @@ +--- +testcase: "*" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tasks/cli.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tasks/cli.yaml new file mode 100644 index 00000000..8c11e106 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tasks/cli.yaml @@ -0,0 +1,16 @@ +--- +- name: collect all cli test cases + find: + paths: "{{ role_path }}/tests/cli" + patterns: "{{ testcase }}.yaml" + register: test_cases + +- name: set test_items + set_fact: + test_items: "{{ test_cases.files | map(attribute='path') | list }}" + +- name: run test case + include: "{{ test_case_to_run }}" + with_items: "{{ test_items }}" + loop_control: + loop_var: test_case_to_run diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tasks/main.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tasks/main.yaml new file mode 100644 index 00000000..415c99d8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- { include: cli.yaml, tags: ['cli'] } diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tests/cli/facts.yaml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tests/cli/facts.yaml new file mode 100644 index 00000000..d5b45e1d --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/integration/targets/os10_facts/os10_facts/tests/cli/facts.yaml @@ -0,0 +1,48 @@ +--- +- debug: msg="START cli/facts.yaml" + +- name: test all facts + os10_facts: + gather_subset: + - all + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.ansible_facts is defined" + - "result.ansible_facts.ansible_net_interfaces is defined" + - "result.ansible_facts.ansible_net_memfree_mb is defined" + - "result.ansible_facts.ansible_net_model is defined" + - "result.ansible_facts.ansible_net_servicetag is defined" + - "result.ansible_facts.ansible_net_version is defined" + +- name: test all facts except hardware + os10_facts: + gather_subset: + - "!hardware" + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.ansible_facts.ansible_net_interfaces is defined" + - "result.ansible_facts.ansible_net_memfree_mb is not defined" + +- name: test interface facts + os10_facts: + gather_subset: + - interfaces + provider: "{{ cli }}" + register: result + +- assert: + that: + - "result.changed == false" + - "result.ansible_facts.ansible_net_interfaces is defined" + - "result.ansible_facts.ansible_net_memfree_mb is not defined" + + +- debug: msg="END cli/facts.yaml" diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/.ignore-2.10.txt.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/.ignore-2.10.txt.un~ Binary files differnew file mode 100644 index 00000000..baa7567b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/.ignore-2.10.txt.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/.ignore-2.11.txt.un~ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/.ignore-2.11.txt.un~ Binary files differnew file mode 100644 index 00000000..c88a7f61 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/.ignore-2.11.txt.un~ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.10.txt b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.10.txt new file mode 100644 index 00000000..d9c7ccd0 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.10.txt @@ -0,0 +1,10 @@ +plugins/action/os10.py action-plugin-docs +plugins/action/textfsm_parser.py action-plugin-docs +plugins/modules/bgp_validate.py validate-modules:parameter-list-no-elements +plugins/modules/mtu_validate.py validate-modules:parameter-list-no-elements +plugins/modules/vlt_validate.py validate-modules:parameter-list-no-elements +plugins/modules/wiring_validate.py validate-modules:parameter-list-no-elements +plugins/modules/show_system_network_summary.py validate-modules:parameter-list-no-elements +plugins/modules/os10_config.py validate-modules:parameter-list-no-elements +plugins/modules/os10_facts.py validate-modules:parameter-list-no-elements +plugins/modules/os10_command.py validate-modules:parameter-list-no-elements diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.10.txt~ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.10.txt~ new file mode 100644 index 00000000..79237511 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.10.txt~ @@ -0,0 +1,9 @@ +plugins/action/os10.py action-plugin-docs +plugins/action/textfsm_parser.py action-plugin-docs +plugins/modules/bgp_validate.py validate-modules:parameter-list-no-elements +plugins/modules/mtu_validate.py validate-modules:parameter-list-no-elements +plugins/modules/vlt_validate.py validate-modules:parameter-list-no-elements +plugins/modules/wiring_validate.py validate-modules:parameter-list-no-elements +plugins/modules/show_system_network_summary.py validate-modules:parameter-list-no-elements +plugins/modules/os10_config.py validate-modules:parameter-list-no-elements +plugins/modules/os10_facts.py validate-modules:parameter-list-no-elements diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.11.txt b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.11.txt new file mode 100644 index 00000000..d9c7ccd0 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.11.txt @@ -0,0 +1,10 @@ +plugins/action/os10.py action-plugin-docs +plugins/action/textfsm_parser.py action-plugin-docs +plugins/modules/bgp_validate.py validate-modules:parameter-list-no-elements +plugins/modules/mtu_validate.py validate-modules:parameter-list-no-elements +plugins/modules/vlt_validate.py validate-modules:parameter-list-no-elements +plugins/modules/wiring_validate.py validate-modules:parameter-list-no-elements +plugins/modules/show_system_network_summary.py validate-modules:parameter-list-no-elements +plugins/modules/os10_config.py validate-modules:parameter-list-no-elements +plugins/modules/os10_facts.py validate-modules:parameter-list-no-elements +plugins/modules/os10_command.py validate-modules:parameter-list-no-elements diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.11.txt~ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.11.txt~ new file mode 100644 index 00000000..79237511 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.11.txt~ @@ -0,0 +1,9 @@ +plugins/action/os10.py action-plugin-docs +plugins/action/textfsm_parser.py action-plugin-docs +plugins/modules/bgp_validate.py validate-modules:parameter-list-no-elements +plugins/modules/mtu_validate.py validate-modules:parameter-list-no-elements +plugins/modules/vlt_validate.py validate-modules:parameter-list-no-elements +plugins/modules/wiring_validate.py validate-modules:parameter-list-no-elements +plugins/modules/show_system_network_summary.py validate-modules:parameter-list-no-elements +plugins/modules/os10_config.py validate-modules:parameter-list-no-elements +plugins/modules/os10_facts.py validate-modules:parameter-list-no-elements diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.9.txt b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.9.txt new file mode 100644 index 00000000..debd43de --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/ignore-2.9.txt @@ -0,0 +1,4 @@ +plugins/action/os10.py action-plugin-docs +plugins/action/textfsm_parser.py action-plugin-docs +plugins/modules/wiring_validate.py pylint:duplicate-code +tests/units/modules/network/os10/test_os10_facts.py pylint:duplicate-code diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/requirements.txt b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/requirements.txt new file mode 100644 index 00000000..3e3a9669 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/sanity/requirements.txt @@ -0,0 +1,4 @@ +packaging # needed for update-bundled and changelog +sphinx ; python_version >= '3.5' # docs build requires python 3+ +sphinx-notfound-page ; python_version >= '3.5' # docs build requires python 3+ +straight.plugin ; python_version >= '3.5' # needed for hacking/build-ansible.py which will host changelog generation and requires python 3+ diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/__init__.py b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/__init__.py new file mode 100644 index 00000000..e69de29b --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/__init__.py diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/os10_config_config.cfg b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/os10_config_config.cfg new file mode 100644 index 00000000..83e3e891 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/os10_config_config.cfg @@ -0,0 +1,13 @@ +! +hostname router +! +interface ethernet1/1/2 + ip address 1.2.3.4/24 + description test string +! +interface ethernet1/1/3 + ip address 6.7.8.9/24 + description test string + shutdown +! + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/os10_config_src.cfg b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/os10_config_src.cfg new file mode 100644 index 00000000..7303a0c4 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/os10_config_src.cfg @@ -0,0 +1,12 @@ +! +hostname foo +! +interface ethernet1/1/2 + no ip address +! +interface ethernet1/1/3 + ip address 6.7.8.9/24 + description test string + shutdown +! + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_interface__display-xml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_interface__display-xml new file mode 100644 index 00000000..bd13f0e6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_interface__display-xml @@ -0,0 +1,19467 @@ +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/1</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/1</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/1</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305068</if-index> + <phys-address>14:18:77:09:ae:01</phys-address> + <speed>40000000000</speed> + <statistics> + <in-octets>884475</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>5429</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>6212880</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>88684</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>94113</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>7097355</ether-octets> + <ether-pkts>94113</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>88684</ether-tx-no-errors> + <ether-rx-no-errors>5429</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>4</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>5425</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>83258</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>5426</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>5429</in-pkts> + <out-pkts>88684</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:01</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>16272700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/1</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/2</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/2</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/2</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305094</if-index> + <phys-address>14:18:77:09:ae:05</phys-address> + <speed>40000000000</speed> + <statistics> + <in-octets>6220575</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>88787</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>892090</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>5523</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>94310</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>7112665</ether-octets> + <ether-pkts>94310</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>5523</ether-tx-no-errors> + <ether-rx-no-errors>88787</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>83350</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>5437</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>77</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>6</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>5440</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>88787</in-pkts> + <out-pkts>5523</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:05</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>16306900</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + <link-local-addr>fe80::1618:77ff:fe09:ae05/64</link-local-addr> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/2</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/3</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/3</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/3</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305120</if-index> + <phys-address>14:18:77:09:ae:09</phys-address> + <speed>40000000000</speed> + <statistics> + <in-octets>6396220</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>91295</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>911207</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>5593</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>96888</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>7307427</ether-octets> + <ether-pkts>96888</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>5593</ether-tx-no-errors> + <ether-rx-no-errors>91295</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>85705</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>5590</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>4</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>5589</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>91295</in-pkts> + <out-pkts>5593</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:09</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>16764600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/3</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/4</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/4</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/4</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305146</if-index> + <phys-address>14:18:77:09:ae:0d</phys-address> + <speed>40000000000</speed> + <statistics> + <in-octets>919800</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>5693</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>6410845</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>91497</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>97190</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>7330645</ether-octets> + <ether-pkts>97190</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>91497</ether-tx-no-errors> + <ether-rx-no-errors>5693</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>77</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>6</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>5610</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>85890</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>5607</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>5693</in-pkts> + <out-pkts>91497</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:0d</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>16818100</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/4</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/5</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/5</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/5</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305172</if-index> + <phys-address>14:18:77:09:ae:11</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:11</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>16913000</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/5</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/6</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/6</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/6</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305198</if-index> + <phys-address>14:18:77:09:ae:15</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:15</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>16950900</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/6</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/7</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/7</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/7</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305224</if-index> + <phys-address>14:18:77:09:ae:19</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:19</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>16995200</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/7</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/8</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/8</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/8</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305250</if-index> + <phys-address>14:18:77:09:ae:1d</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:1d</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17021600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/8</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/9</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/9</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/9</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305276</if-index> + <phys-address>14:18:77:09:ae:21</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:21</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17027900</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/9</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/10</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/10</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/10</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305302</if-index> + <phys-address>14:18:77:09:ae:25</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:25</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17039500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/10</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/11</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/11</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/11</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305328</if-index> + <phys-address>14:18:77:09:ae:29</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:29</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17048300</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/11</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/13</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/13</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <vrrp-ipv4> + <vrrp-instance> + <vrid>4</vrid> + <log-state-change>false</log-state-change> + <preempt> + <enable>false</enable> + <hold-time>0</hold-time> + </preempt> + <priority>120</priority> + <advertise-interval> + <advertise-interval-sec>1</advertise-interval-sec> + <advertise-interval-centi-sec>200</advertise-interval-centi-sec> + </advertise-interval> + <virtual-ip-address>4.1.1.1</virtual-ip-address> + <virtual-ip-address>4.1.1.2</virtual-ip-address> + <accept-mode>false</accept-mode> + <auth-type>no-authentication</auth-type> + <protocol>ip</protocol> + <track-list> + <track-id>3</track-id> + <priority-decrement>25</priority-decrement> + </track-list> + </vrrp-instance> + </vrrp-ipv4> + <vrrp-ipv6> + <vrrp-instance> + <vrid>2</vrid> + <log-state-change>false</log-state-change> + <preempt> + <enable>false</enable> + <hold-time>0</hold-time> + </preempt> + <priority>120</priority> + <advertise-interval> + <advertise-interval-sec>1</advertise-interval-sec> + <advertise-interval-centi-sec>200</advertise-interval-centi-sec> + </advertise-interval> + <virtual-ip-address>fe80::10</virtual-ip-address> + <virtual-ip-address>3001:4828:5808:ffa3::9</virtual-ip-address> + <accept-mode>false</accept-mode> + <auth-type>no-authentication</auth-type> + <protocol>ip</protocol> + <track-list> + <track-id>3</track-id> + <priority-decrement>25</priority-decrement> + </track-list> + </vrrp-instance> + </vrrp-ipv6> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/13</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305380</if-index> + <phys-address>14:18:77:09:ae:31</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:31</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17074100</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/13</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/16</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/16</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/16</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305458</if-index> + <phys-address>14:18:77:09:ae:34</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:34</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17087400</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/16</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/17</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/17</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/17</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305484</if-index> + <phys-address>14:18:77:09:ae:35</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:35</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17090400</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/17</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/18</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/18</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/18</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305510</if-index> + <phys-address>14:18:77:09:ae:39</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:39</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17116100</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/18</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/19</name> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/19</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2DISABLED</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/19</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305536</if-index> + <phys-address>14:18:77:09:ae:3d</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:3d</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17128600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/19</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/20</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/20</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/20</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305562</if-index> + <phys-address>14:18:77:09:ae:41</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:41</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17135100</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/20</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/21</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/21</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/21</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305588</if-index> + <phys-address>14:18:77:09:ae:45</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:45</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17145300</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/21</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/23</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/23</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/23</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305640</if-index> + <phys-address>14:18:77:09:ae:4d</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:4d</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17164100</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/23</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/24</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/24</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/24</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305666</if-index> + <phys-address>14:18:77:09:ae:51</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:51</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17164900</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/24</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/25</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/25</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/25</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305692</if-index> + <phys-address>14:18:77:09:ae:55</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:55</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17424700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/25</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/26</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/26</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/26</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305718</if-index> + <phys-address>14:18:77:09:ae:59</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:59</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17431600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/26</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/27</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/27</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/27</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305744</if-index> + <phys-address>14:18:77:09:ae:5d</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:5d</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17470200</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/27</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/28</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/28</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/28</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305770</if-index> + <phys-address>14:18:77:09:ae:61</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:61</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17477600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/28</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/30</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/30</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/30</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305822</if-index> + <phys-address>14:18:77:09:ae:66</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:66</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17491400</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/30</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/31</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/31</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/31</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305848</if-index> + <phys-address>14:18:77:09:ae:67</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:67</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17493000</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/31</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>ethernet1/1/32</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>ethernet1/1/32</name> + <type>ianaift:ethernetCsmacd</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <lldp-med-cfg> + <med-enable>true</med-enable> + <notif-enable>false</notif-enable> + </lldp-med-cfg> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>ethernet1/1/32</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305874</if-index> + <phys-address>14:18:77:09:ae:68</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + <dcbx-stats> + <ets-conf-tx-tlv-count>0</ets-conf-tx-tlv-count> + <ets-conf-rx-tlv-count>0</ets-conf-rx-tlv-count> + <ets-conf-rx-tlv-errors>0</ets-conf-rx-tlv-errors> + <ets-reco-tx-tlv-count>0</ets-reco-tx-tlv-count> + <ets-reco-rx-tlv-count>0</ets-reco-rx-tlv-count> + <ets-reco-rx-tlv-errors>0</ets-reco-rx-tlv-errors> + <pfc-tx-tlv-count>0</pfc-tx-tlv-count> + <pfc-rx-tlv-count>0</pfc-rx-tlv-count> + <pfc-rx-tlv-errors>0</pfc-rx-tlv-errors> + <app-prio-tx-tlv-count>0</app-prio-tx-tlv-count> + <app-prio-rx-tlv-count>0</app-prio-rx-tlv-count> + <app-prio-rx-tlv-errors>0</app-prio-rx-tlv-errors> + <dcbx-frames-tx-total>0</dcbx-frames-tx-total> + <dcbx-frames-rx-total>0</dcbx-frames-rx-total> + <dcbx-frames-error-total>0</dcbx-frames-error-total> + <dcbx-frames-unrecognized>0</dcbx-frames-unrecognized> + </dcbx-stats> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:68</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17498900</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <qos-if-params> + <flow-control-rx>false</flow-control-rx> + <flow-control-tx>false</flow-control-tx> + <pfc-mode>false</pfc-mode> + <ets-mode>false</ets-mode> + <unknown-unicast-rate-pps>0</unknown-unicast-rate-pps> + <weight-info> + <queue-id>0</queue-id> + <weight>1</weight> + </weight-info> + <weight-info> + <queue-id>1</queue-id> + <weight>2</weight> + </weight-info> + <weight-info> + <queue-id>2</queue-id> + <weight>3</weight> + </weight-info> + <weight-info> + <queue-id>3</queue-id> + <weight>4</weight> + </weight-info> + <weight-info> + <queue-id>4</queue-id> + <weight>5</weight> + </weight-info> + <weight-info> + <queue-id>5</queue-id> + <weight>10</weight> + </weight-info> + <weight-info> + <queue-id>6</queue-id> + <weight>25</weight> + </weight-info> + <weight-info> + <queue-id>7</queue-id> + <weight>50</weight> + </weight-info> + </qos-if-params> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>ethernet1/1/32</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr/> + <interfaces> + <interface> + <name>mgmt1/1/1</name> + <type>base-if:management</type> + <enabled>true</enabled> + <mtu>1500</mtu> + <mac-learn>HW</mac-learn> + <duplex>auto</duplex> + <speed>AUTO</speed> + <keepalive>true</keepalive> + <ipv4> + <address> + <primary-addr>10.16.148.144/16</primary-addr> + </address> + </ipv4> + <ipv6> + <autoconfig>true</autoconfig> + <intf-v6-enabled>true</intf-v6-enabled> + </ipv6> + <lldp> + <tx-enable>true</tx-enable> + <rx-enable>true</rx-enable> + </lldp> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>mgmt1/1/1</name> + <type>base-if:management</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>35454736</if-index> + <phys-address>00:a0:c9:00:00:00</phys-address> + <speed>1000000000</speed> + <statistics> + <in-octets>74473686</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>66</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>17129927</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>889900</in-pkts> + <out-pkts>52776</out-pkts> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-speed>10MBPS</supported-speed> + <supported-speed>100MBPS</supported-speed> + <supported-speed>1GIGE</supported-speed> + <supported-autoneg>NOT_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <bind-ni-name>default</bind-ni-name> + <current-phys-address>00:a0:c9:00:00:00</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17509300</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <ipv4-info> + <assignment-mode>manual-cfg</assignment-mode> + <addr>10.16.148.144/16</addr> + </ipv4-info> + <ipv6> + <enable-status>true</enable-status> + <link-local-addr>fe80::2a0:c9ff:fe00:0/64</link-local-addr> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>mgmt1/1/1</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr/> + <interfaces> + <interface> + <name>vlan1</name> + <type>ianaift:l2vlan</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <vlan-type>DATA</vlan-type> + <untagged-ports>ethernet1/1/1</untagged-ports> + <untagged-ports>ethernet1/1/3</untagged-ports> + <untagged-ports>ethernet1/1/4</untagged-ports> + <untagged-ports>ethernet1/1/5</untagged-ports> + <untagged-ports>ethernet1/1/6</untagged-ports> + <untagged-ports>ethernet1/1/7</untagged-ports> + <untagged-ports>ethernet1/1/9</untagged-ports> + <untagged-ports>ethernet1/1/10</untagged-ports> + <untagged-ports>ethernet1/1/11</untagged-ports> + <untagged-ports>ethernet1/1/20</untagged-ports> + <untagged-ports>ethernet1/1/21</untagged-ports> + <untagged-ports>ethernet1/1/22</untagged-ports> + <untagged-ports>ethernet1/1/23</untagged-ports> + <untagged-ports>ethernet1/1/24</untagged-ports> + <untagged-ports>ethernet1/1/25</untagged-ports> + <untagged-ports>ethernet1/1/26</untagged-ports> + <untagged-ports>ethernet1/1/27</untagged-ports> + <untagged-ports>ethernet1/1/28</untagged-ports> + <untagged-ports>ethernet1/1/29</untagged-ports> + <untagged-ports>ethernet1/1/30</untagged-ports> + <untagged-ports>ethernet1/1/31</untagged-ports> + <untagged-ports>ethernet1/1/32</untagged-ports> + <untagged-ports>port-channel12</untagged-ports> + <vlt-control>false</vlt-control> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>vlan1</name> + <type>ianaift:l2vlan</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>69208865</if-index> + <phys-address>14:18:77:09:af:01</phys-address> + <speed>10000000000</speed> + <statistics> + <in-octets>8587506</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>9015054</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-in-vlan-discards>0</if-in-vlan-discards> + <if-out-qlen>0</if-out-qlen> + <in-pkts>107065</in-pkts> + <out-pkts>107059</out-pkts> + </statistics> + <current-phys-address>14:18:77:09:af:01</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>17517200</last-counter-clear> + <mtu>1532</mtu> + <vlan-type>DATA</vlan-type> + <untagged-ports>ethernet1/1/1</untagged-ports> + <untagged-ports>ethernet1/1/3</untagged-ports> + <untagged-ports>ethernet1/1/4</untagged-ports> + <untagged-ports>ethernet1/1/5</untagged-ports> + <untagged-ports>ethernet1/1/6</untagged-ports> + <untagged-ports>ethernet1/1/7</untagged-ports> + <untagged-ports>ethernet1/1/9</untagged-ports> + <untagged-ports>ethernet1/1/10</untagged-ports> + <untagged-ports>ethernet1/1/11</untagged-ports> + <untagged-ports>ethernet1/1/20</untagged-ports> + <untagged-ports>ethernet1/1/21</untagged-ports> + <untagged-ports>ethernet1/1/22</untagged-ports> + <untagged-ports>ethernet1/1/23</untagged-ports> + <untagged-ports>ethernet1/1/24</untagged-ports> + <untagged-ports>ethernet1/1/25</untagged-ports> + <untagged-ports>ethernet1/1/26</untagged-ports> + <untagged-ports>ethernet1/1/27</untagged-ports> + <untagged-ports>ethernet1/1/28</untagged-ports> + <untagged-ports>ethernet1/1/29</untagged-ports> + <untagged-ports>ethernet1/1/30</untagged-ports> + <untagged-ports>ethernet1/1/31</untagged-ports> + <untagged-ports>ethernet1/1/32</untagged-ports> + <untagged-ports>port-channel12</untagged-ports> + <vlt-control>false</vlt-control> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + <link-local-addr>fe80::1618:77ff:fe09:af01/64</link-local-addr> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>vlan1</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr/> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>vlan4094</name> + <type>ianaift:l2vlan</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>69212958</if-index> + <phys-address>14:18:77:09:af:01</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-in-vlan-discards>0</if-in-vlan-discards> + <if-out-qlen>0</if-out-qlen> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + </statistics> + <current-phys-address>14:18:77:09:af:01</current-phys-address> + <last-change-time>3992</last-change-time> + <last-counter-clear>17135400</last-counter-clear> + <mtu>1532</mtu> + <vlan-type>INTERNAL</vlan-type> + <vlt-control>true</vlt-control> + <ipv4-info/> + <ipv6> + <enable-status>true</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>vlan4094</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr> + <interface-in-running> + <name>port-channel12</name> + <untagged-vlan>vlan1</untagged-vlan> + </interface-in-running> + </cms-interface-backptr> + <interfaces> + <interface> + <name>port-channel12</name> + <type>ianaift:ieee8023adLag</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + <mode>MODE_L2</mode> + <load-interval>299</load-interval> + <min-links>1</min-links> + <lag-mode>STATIC</lag-mode> + <vlti-lag>false</vlti-lag> + <vlt> + <vlt-id>13</vlt-id> + </vlt> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>port-channel12</name> + <type>ianaift:ieee8023adLag</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>85886092</if-index> + <phys-address>14:18:77:09:ae:8d</phys-address> + <speed>0</speed> + <statistics> + <in-octets>0</in-octets> + <in-unicast-pkts>0</in-unicast-pkts> + <in-broadcast-pkts>0</in-broadcast-pkts> + <in-multicast-pkts>0</in-multicast-pkts> + <in-discards>0</in-discards> + <in-errors>0</in-errors> + <in-unknown-protos>0</in-unknown-protos> + <out-octets>0</out-octets> + <out-unicast-pkts>0</out-unicast-pkts> + <out-broadcast-pkts>0</out-broadcast-pkts> + <out-multicast-pkts>0</out-multicast-pkts> + <out-discards>0</out-discards> + <out-errors>0</out-errors> + <if-out-qlen>0</if-out-qlen> + <ether-drop-events>0</ether-drop-events> + <ether-multicast-pkts>0</ether-multicast-pkts> + <ether-broadcast-pkts>0</ether-broadcast-pkts> + <ether-undersize-pkts>0</ether-undersize-pkts> + <ether-fragments>0</ether-fragments> + <ether-oversize-pkts>0</ether-oversize-pkts> + <ether-rx-oversize-pkts>0</ether-rx-oversize-pkts> + <ether-tx-oversize-pkts>0</ether-tx-oversize-pkts> + <ether-jabbers>0</ether-jabbers> + <ether-octets>0</ether-octets> + <ether-pkts>0</ether-pkts> + <ether-collisions>0</ether-collisions> + <ether-crc-align-errors>0</ether-crc-align-errors> + <ether-tx-no-errors>0</ether-tx-no-errors> + <ether-rx-no-errors>0</ether-rx-no-errors> + <green-discard-dropped-packets>0</green-discard-dropped-packets> + <green-discard-dropped-bytes>0</green-discard-dropped-bytes> + <yellow-discard-dropped-packets>0</yellow-discard-dropped-packets> + <yellow-discard-dropped-bytes>0</yellow-discard-dropped-bytes> + <red-discard-dropped-packets>0</red-discard-dropped-packets> + <red-discard-dropped-bytes>0</red-discard-dropped-bytes> + <discard-dropped-packets>0</discard-dropped-packets> + <discard-dropped-bytes>0</discard-dropped-bytes> + <ether-in-pkts-64-octets>0</ether-in-pkts-64-octets> + <ether-in-pkts-65-to-127-octets>0</ether-in-pkts-65-to-127-octets> + <ether-in-pkts-128-to-255-octets>0</ether-in-pkts-128-to-255-octets> + <ether-in-pkts-256-to-511-octets>0</ether-in-pkts-256-to-511-octets> + <ether-in-pkts-512-to-1023-octets>0</ether-in-pkts-512-to-1023-octets> + <ether-in-pkts-1024-to-1518-octets>0</ether-in-pkts-1024-to-1518-octets> + <ether-in-pkts-1519-to-2047-octets>0</ether-in-pkts-1519-to-2047-octets> + <ether-in-pkts-2048-to-4095-octets>0</ether-in-pkts-2048-to-4095-octets> + <ether-in-pkts-4096-to-9216-octets>0</ether-in-pkts-4096-to-9216-octets> + <ether-in-pkts-9217-to-16383-octets>0</ether-in-pkts-9217-to-16383-octets> + <ether-out-pkts-64-octets>0</ether-out-pkts-64-octets> + <ether-out-pkts-65-to-127-octets>0</ether-out-pkts-65-to-127-octets> + <ether-out-pkts-128-to-255-octets>0</ether-out-pkts-128-to-255-octets> + <ether-out-pkts-256-to-511-octets>0</ether-out-pkts-256-to-511-octets> + <ether-out-pkts-512-to-1023-octets>0</ether-out-pkts-512-to-1023-octets> + <ether-out-pkts-1024-to-1518-octets>0</ether-out-pkts-1024-to-1518-octets> + <ether-out-pkts-1519-to-2047-octets>0</ether-out-pkts-1519-to-2047-octets> + <ether-out-pkts-2048-to-4095-octets>0</ether-out-pkts-2048-to-4095-octets> + <ether-out-pkts-4096-to-9216-octets>0</ether-out-pkts-4096-to-9216-octets> + <ether-out-pkts-9217-to-16383-octets>0</ether-out-pkts-9217-to-16383-octets> + <pause-rx-pkts>0</pause-rx-pkts> + <pause-tx-pkts>0</pause-tx-pkts> + <in-pkts>0</in-pkts> + <out-pkts>0</out-pkts> + <utilization-percentage>0</utilization-percentage> + <in-bit-rate>0</in-bit-rate> + <in-pkt-rate>0</in-pkt-rate> + <in-line-rate>0</in-line-rate> + <out-bit-rate>0</out-bit-rate> + <out-pkt-rate>0</out-pkt-rate> + <out-line-rate>0</out-line-rate> + <link-bundle-monitoring-alarm>false</link-bundle-monitoring-alarm> + <lacp-statistics> + <lacpdus-rx>0</lacpdus-rx> + <lacpdus-tx>0</lacpdus-tx> + <unknown-rx>0</unknown-rx> + <illegal-rx>0</illegal-rx> + <marker-pdus-tx>0</marker-pdus-tx> + <marker-response-pdus-tx>0</marker-response-pdus-tx> + <marker-pdus-rx>0</marker-pdus-rx> + <marker-response-pdus-rx>0</marker-response-pdus-rx> + </lacp-statistics> + </statistics> + <auto-negotiation>false</auto-negotiation> + <supported-autoneg>NOT_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <current-phys-address>14:18:77:09:ae:8d</current-phys-address> + <last-change-time>3750</last-change-time> + <last-counter-clear>17160800</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <min-links>1</min-links> + <lag-mode>STATIC</lag-mode> + <num-ports-up>0</num-ports-up> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>port-channel12</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <cms-interface-backptr/> + <interfaces> + <interface> + <name>null0</name> + <type>base-if:null</type> + <enabled>true</enabled> + <mtu>1532</mtu> + <mac-learn>HW</mac-learn> + </interface> + </interfaces> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data> + <interface> + <name>null0</name> + <type>base-if:null</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>119690512</if-index> + <last-change-time>39</last-change-time> + <last-counter-clear>17549600</last-counter-clear> + <ipv4-info/> + <ipv6> + <enable-status>false</enable-status> + </ipv6> + <fc-intf-params> + <port-type>Disabled</port-type> + <pwwn>00:00:00:00:00:00:00:00</pwwn> + <fc-id>00:00:00</fc-id> + <bb-credit>0</bb-credit> + </fc-intf-params> + </interface> + </data> + <last-keys> + <name>null0</name> + </last-keys> + </bulk> +</rpc-reply> +<?xml version="1.0"?> +<rpc-reply> + <data> + <ip-config> + <ipv4> + <arp> + <timeout>60</timeout> + </arp> + </ipv4> + </ip-config> + <ports> + <ports-state> + <port> + <name>phy-eth1/1/1</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/2</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/3</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>131137546</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/4</name> + <base-ID-fields> + <media-laser-wavelength>38</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-category>QSFP-PLUS</media-category> + <media-type>AR_QSFP_40GBASE_CR4_1M</media-type> + <present>true</present> + </port> + <port> + <name>phy-eth1/1/5</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/6</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/7</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/8</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/9</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/10</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/11</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/12</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/13</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/14</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/15</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/16</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/17</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/18</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/19</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/20</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/21</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/22</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/23</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/24</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/25</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/26</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3758089944</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/27</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3840747224</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/28</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/29</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/30</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3857532632</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/31</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3865925336</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + <port> + <name>phy-eth1/1/32</name> + <base-ID-fields> + <media-laser-wavelength>0</media-laser-wavelength> + </base-ID-fields> + <channel> + <sub-port>3849139928</sub-port> + <rx-power>0.0</rx-power> + </channel> + <media-type>AR_POPTICS_NOTPRESENT</media-type> + <present>false</present> + </port> + </ports-state> + </ports> + <system-state> + <system-status> + <uptime>162762</uptime> + </system-status> + </system-state> + </data> + <bulk> + <data/> + </bulk> +</rpc-reply> + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_lldp_neighbors__display-xml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_lldp_neighbors__display-xml new file mode 100644 index 00000000..de3ad4ed --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_lldp_neighbors__display-xml @@ -0,0 +1,855 @@ +<?xml version="1.0" encoding="UTF-8"?> +<rpc-reply> + <bulk> + <data> + <interface> + <name>ethernet1/1/1</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305068</if-index> + <phys-address>14:18:77:09:ae:01</phys-address> + <speed>40000000000</speed> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:01</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>17570800</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info> + <info> + <rem-lldp-time-mark>330300</rem-lldp-time-mark> + <rem-lldp-index>4</rem-lldp-index> + <dest-mac-addr-index>1</dest-mac-addr-index> + <rem-if-index>17305068</rem-if-index> + <rem-local-port-num>260</rem-local-port-num> + <rem-lldp-chassis-id>FBh3Ca4A +</rem-lldp-chassis-id> + <rem-lldp-port-id>ZXRoZXJuZXQxLzEvMw== +</rem-lldp-port-id> + <rem-lldp-chassis-id-subtype>mac-address</rem-lldp-chassis-id-subtype> + <rem-lldp-port-subtype>interface-alias</rem-lldp-port-subtype> + <rem-ttl>120</rem-ttl> + <rem-last-update-time>172395</rem-last-update-time> + <rem-info-valid-time>107</rem-info-valid-time> + <rem-system-desc>OS10</rem-system-desc> + <rem-port-desc>ethernet1/1/3</rem-port-desc> + <rem-system-name>os10</rem-system-name> + <rem-port-vlan-id>1</rem-port-vlan-id> + <rem-max-frame-size>1532</rem-max-frame-size> + <rem-agg-link-status>false</rem-agg-link-status> + <rem-sys-cap-supported>router bridge repeater</rem-sys-cap-supported> + <rem-sys-cap-enabled>router bridge repeater</rem-sys-cap-enabled> + <rem-remote-changes>true</rem-remote-changes> + <rem-too-many-neighbors>false</rem-too-many-neighbors> + <rem-dot3-auto-neg-supported>true</rem-dot3-auto-neg-supported> + <rem-dot3-auto-neg-enabled>true</rem-dot3-auto-neg-enabled> + <rem-dot3-auto-neg-adv-cap>b-1000base-t</rem-dot3-auto-neg-adv-cap> + </info> + </lldp-rem-neighbor-info> + </interface> + <interface> + <name>ethernet1/1/2</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305094</if-index> + <phys-address>14:18:77:09:ae:05</phys-address> + <speed>40000000000</speed> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:05</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info> + <info> + <rem-lldp-time-mark>330300</rem-lldp-time-mark> + <rem-lldp-index>5</rem-lldp-index> + <dest-mac-addr-index>1</dest-mac-addr-index> + <rem-if-index>17305094</rem-if-index> + <rem-local-port-num>264</rem-local-port-num> + <rem-lldp-chassis-id>FBh3Ca4A +</rem-lldp-chassis-id> + <rem-lldp-port-id>ZXRoZXJuZXQxLzEvNA== +</rem-lldp-port-id> + <rem-lldp-chassis-id-subtype>mac-address</rem-lldp-chassis-id-subtype> + <rem-lldp-port-subtype>interface-alias</rem-lldp-port-subtype> + <rem-ttl>120</rem-ttl> + <rem-last-update-time>172395</rem-last-update-time> + <rem-info-valid-time>107</rem-info-valid-time> + <rem-system-desc>OS10</rem-system-desc> + <rem-port-desc>ethernet1/1/4</rem-port-desc> + <rem-system-name>os10</rem-system-name> + <rem-port-vlan-id>1</rem-port-vlan-id> + <rem-max-frame-size>1532</rem-max-frame-size> + <rem-agg-link-status>false</rem-agg-link-status> + <rem-sys-cap-supported>router bridge repeater</rem-sys-cap-supported> + <rem-sys-cap-enabled>router bridge repeater</rem-sys-cap-enabled> + <rem-remote-changes>true</rem-remote-changes> + <rem-too-many-neighbors>false</rem-too-many-neighbors> + <rem-dot3-auto-neg-supported>true</rem-dot3-auto-neg-supported> + <rem-dot3-auto-neg-enabled>true</rem-dot3-auto-neg-enabled> + <rem-dot3-auto-neg-adv-cap>b-1000base-t</rem-dot3-auto-neg-adv-cap> + </info> + </lldp-rem-neighbor-info> + </interface> + <interface> + <name>ethernet1/1/3</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305120</if-index> + <phys-address>14:18:77:09:ae:09</phys-address> + <speed>40000000000</speed> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:09</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info> + <info> + <rem-lldp-time-mark>330300</rem-lldp-time-mark> + <rem-lldp-index>2</rem-lldp-index> + <dest-mac-addr-index>1</dest-mac-addr-index> + <rem-if-index>17305120</rem-if-index> + <rem-local-port-num>268</rem-local-port-num> + <rem-lldp-chassis-id>FBh3Ca4A +</rem-lldp-chassis-id> + <rem-lldp-port-id>ZXRoZXJuZXQxLzEvMQ== +</rem-lldp-port-id> + <rem-lldp-chassis-id-subtype>mac-address</rem-lldp-chassis-id-subtype> + <rem-lldp-port-subtype>interface-alias</rem-lldp-port-subtype> + <rem-ttl>120</rem-ttl> + <rem-last-update-time>172395</rem-last-update-time> + <rem-info-valid-time>107</rem-info-valid-time> + <rem-system-desc>OS10</rem-system-desc> + <rem-port-desc>ethernet1/1/1</rem-port-desc> + <rem-system-name>os10</rem-system-name> + <rem-port-vlan-id>1</rem-port-vlan-id> + <rem-max-frame-size>1532</rem-max-frame-size> + <rem-agg-link-status>false</rem-agg-link-status> + <rem-sys-cap-supported>router bridge repeater</rem-sys-cap-supported> + <rem-sys-cap-enabled>router bridge repeater</rem-sys-cap-enabled> + <rem-remote-changes>true</rem-remote-changes> + <rem-too-many-neighbors>false</rem-too-many-neighbors> + <rem-dot3-auto-neg-supported>true</rem-dot3-auto-neg-supported> + <rem-dot3-auto-neg-enabled>true</rem-dot3-auto-neg-enabled> + <rem-dot3-auto-neg-adv-cap>b-1000base-t</rem-dot3-auto-neg-adv-cap> + </info> + </lldp-rem-neighbor-info> + </interface> + <interface> + <name>ethernet1/1/4</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>17305146</if-index> + <phys-address>14:18:77:09:ae:0d</phys-address> + <speed>40000000000</speed> + <auto-negotiation>true</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:0d</current-phys-address> + <last-change-time>44</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info> + <info> + <rem-lldp-time-mark>330300</rem-lldp-time-mark> + <rem-lldp-index>3</rem-lldp-index> + <dest-mac-addr-index>1</dest-mac-addr-index> + <rem-if-index>17305146</rem-if-index> + <rem-local-port-num>272</rem-local-port-num> + <rem-lldp-chassis-id>FBh3Ca4A +</rem-lldp-chassis-id> + <rem-lldp-port-id>ZXRoZXJuZXQxLzEvMg== +</rem-lldp-port-id> + <rem-lldp-chassis-id-subtype>mac-address</rem-lldp-chassis-id-subtype> + <rem-lldp-port-subtype>interface-alias</rem-lldp-port-subtype> + <rem-ttl>120</rem-ttl> + <rem-last-update-time>172395</rem-last-update-time> + <rem-info-valid-time>107</rem-info-valid-time> + <rem-system-desc>OS10</rem-system-desc> + <rem-port-desc>ethernet1/1/2</rem-port-desc> + <rem-system-name>os10</rem-system-name> + <rem-port-vlan-id>1</rem-port-vlan-id> + <rem-max-frame-size>1532</rem-max-frame-size> + <rem-agg-link-status>false</rem-agg-link-status> + <rem-sys-cap-supported>router bridge repeater</rem-sys-cap-supported> + <rem-sys-cap-enabled>router bridge repeater</rem-sys-cap-enabled> + <rem-remote-changes>true</rem-remote-changes> + <rem-too-many-neighbors>false</rem-too-many-neighbors> + <rem-dot3-auto-neg-supported>true</rem-dot3-auto-neg-supported> + <rem-dot3-auto-neg-enabled>true</rem-dot3-auto-neg-enabled> + <rem-dot3-auto-neg-adv-cap>b-1000base-t</rem-dot3-auto-neg-adv-cap> + </info> + </lldp-rem-neighbor-info> + </interface> + <interface> + <name>ethernet1/1/5</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305172</if-index> + <phys-address>14:18:77:09:ae:11</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:11</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/6</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305198</if-index> + <phys-address>14:18:77:09:ae:15</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:15</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/7</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305224</if-index> + <phys-address>14:18:77:09:ae:19</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:19</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/8</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305250</if-index> + <phys-address>14:18:77:09:ae:1d</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:1d</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/9</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305276</if-index> + <phys-address>14:18:77:09:ae:21</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:21</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/10</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305302</if-index> + <phys-address>14:18:77:09:ae:25</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:25</current-phys-address> + <last-change-time>36</last-change-time> + <last-counter-clear>17570700</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/11</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305328</if-index> + <phys-address>14:18:77:09:ae:29</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:29</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/12</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305354</if-index> + <phys-address>14:18:77:09:ae:2d</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:2d</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/13</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305380</if-index> + <phys-address>14:18:77:09:ae:31</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:31</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/14</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305406</if-index> + <phys-address>14:18:77:09:ae:32</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:32</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/15</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305432</if-index> + <phys-address>14:18:77:09:ae:33</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:33</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/16</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305458</if-index> + <phys-address>14:18:77:09:ae:34</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:34</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/17</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305484</if-index> + <phys-address>14:18:77:09:ae:35</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:35</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/18</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305510</if-index> + <phys-address>14:18:77:09:ae:39</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:39</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/19</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305536</if-index> + <phys-address>14:18:77:09:ae:3d</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:3d</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/20</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305562</if-index> + <phys-address>14:18:77:09:ae:41</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:41</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/21</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305588</if-index> + <phys-address>14:18:77:09:ae:45</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:45</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/22</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305614</if-index> + <phys-address>14:18:77:09:ae:49</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:49</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570600</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/23</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305640</if-index> + <phys-address>14:18:77:09:ae:4d</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:4d</current-phys-address> + <last-change-time>37</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/24</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305666</if-index> + <phys-address>14:18:77:09:ae:51</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:51</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/25</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305692</if-index> + <phys-address>14:18:77:09:ae:55</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:55</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/26</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305718</if-index> + <phys-address>14:18:77:09:ae:59</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:59</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/27</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305744</if-index> + <phys-address>14:18:77:09:ae:5d</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:5d</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/28</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305770</if-index> + <phys-address>14:18:77:09:ae:61</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:61</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/29</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305796</if-index> + <phys-address>14:18:77:09:ae:65</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:65</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/30</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305822</if-index> + <phys-address>14:18:77:09:ae:66</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:66</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/31</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305848</if-index> + <phys-address>14:18:77:09:ae:67</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:67</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>ethernet1/1/32</name> + <type>ianaift:ethernetCsmacd</type> + <admin-status>up</admin-status> + <oper-status>down</oper-status> + <if-index>17305874</if-index> + <phys-address>14:18:77:09:ae:68</phys-address> + <speed>0</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>40GIGE</supported-speed> + <supported-autoneg>BOTH_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <npu-speed>0MBPS</npu-speed> + <current-phys-address>14:18:77:09:ae:68</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570500</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <eee-state>n/a</eee-state> + <lldp-rem-neighbor-info/> + </interface> + <interface> + <name>mgmt1/1/1</name> + <type>base-if:management</type> + <admin-status>up</admin-status> + <oper-status>up</oper-status> + <if-index>35454736</if-index> + <phys-address>00:a0:c9:00:00:00</phys-address> + <speed>1000000000</speed> + <auto-negotiation>false</auto-negotiation> + <supported-speed>10MBPS</supported-speed> + <supported-speed>100MBPS</supported-speed> + <supported-speed>1GIGE</supported-speed> + <supported-autoneg>NOT_SUPPORTED</supported-autoneg> + <fec>not-supported</fec> + <bind-ni-name>default</bind-ni-name> + <current-phys-address>00:a0:c9:00:00:00</current-phys-address> + <last-change-time>38</last-change-time> + <last-counter-clear>17570400</last-counter-clear> + <load-interval>30</load-interval> + <mtu>1532</mtu> + <lldp-rem-neighbor-info> + <info> + <rem-lldp-time-mark>3100</rem-lldp-time-mark> + <rem-lldp-index>1</rem-lldp-index> + <dest-mac-addr-index>1</dest-mac-addr-index> + <rem-if-index>35454736</rem-if-index> + <rem-local-port-num>4</rem-local-port-num> + <rem-lldp-chassis-id>kLEc9C9t +</rem-lldp-chassis-id> + <rem-lldp-port-id>VGVuR2lnYWJpdEV0aGVybmV0IDAvMA== +</rem-lldp-port-id> + <rem-lldp-chassis-id-subtype>mac-address</rem-lldp-chassis-id-subtype> + <rem-lldp-port-subtype>interface-name</rem-lldp-port-subtype> + <rem-ttl>20</rem-ttl> + <rem-last-update-time>175667</rem-last-update-time> + <rem-info-valid-time>15</rem-info-valid-time> + <rem-system-desc>Dell Real Time Operating System Software. Dell Operating System Version: 2.0. Dell Application Software Version: 9.11(2.0) Copyright (c) 1999-2017Dell Inc. All Rights Reserved.Build Time: Tue Apr 25 21:22:59 2017</rem-system-desc> + <rem-port-desc>TenGigabitEthernet 0/0</rem-port-desc> + <rem-system-name>swlab1-maa-tor-A2</rem-system-name> + <rem-port-vlan-id>148</rem-port-vlan-id> + <rem-max-frame-size>0</rem-max-frame-size> + <rem-agg-link-status>false</rem-agg-link-status> + <rem-sys-cap-supported>router bridge repeater</rem-sys-cap-supported> + <rem-sys-cap-enabled>router bridge repeater</rem-sys-cap-enabled> + <rem-remote-changes>false</rem-remote-changes> + <rem-too-many-neighbors>false</rem-too-many-neighbors> + <rem-dot3-auto-neg-supported>false</rem-dot3-auto-neg-supported> + <rem-dot3-auto-neg-enabled>false</rem-dot3-auto-neg-enabled> + <rem-dot3-auto-neg-adv-cap/> + </info> + </lldp-rem-neighbor-info> + </interface> + </data> + <last-keys> + <name>mgmt1/1/1</name> + </last-keys> + </bulk> +</rpc-reply> + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_processes_node-id_1__grep_Mem_colon_ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_processes_node-id_1__grep_Mem_colon_ new file mode 100644 index 00000000..78903b69 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_processes_node-id_1__grep_Mem_colon_ @@ -0,0 +1 @@ +KiB Mem: 8127144 total, 2297272 used, 5829872 free, 137360 buffers diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_running-config b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_running-config new file mode 100644 index 00000000..ff7ff279 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_running-config @@ -0,0 +1,252 @@ +! Version 10.4.0E(R1) +! Last configuration change at Jan 11 12:26:08 2018 +! +snmp-server contact http://www.dell.com/support +snmp-server host 192.0.2.1 traps version 1 c4 udp-port 5 +snmp-server host 192.0.2.1 traps version 2c c1 udp-port 4 +snmp-server host 192.0.2.2 traps version 1 c3 udp-port 162 +ip community-list expanded commex deny aaa +ip community-list standard commstd deny internet +ip community-list standard commstd permit no-advertise +ip as-path access-list accesslist deny abc +ip as-path access-list accesslist deny www +ip extcommunity-list expanded extcommex deny aaa +ip extcommunity-list standard extcommstd deny rt 22:33 +ip extcommunity-list standard extcommstd permit soo 22:33 +hostname os10 +interface breakout 1/1/1 map 40g-1x +interface breakout 1/1/2 map 40g-1x +interface breakout 1/1/3 map 40g-1x +interface breakout 1/1/4 map 40g-1x +interface breakout 1/1/5 map 40g-1x +interface breakout 1/1/6 map 40g-1x +interface breakout 1/1/7 map 40g-1x +interface breakout 1/1/8 map 40g-1x +interface breakout 1/1/9 map 40g-1x +interface breakout 1/1/10 map 40g-1x +interface breakout 1/1/11 map 40g-1x +interface breakout 1/1/12 map 40g-1x +interface breakout 1/1/13 map 40g-1x +interface breakout 1/1/14 map 40g-1x +interface breakout 1/1/15 map 40g-1x +interface breakout 1/1/16 map 40g-1x +interface breakout 1/1/17 map 40g-1x +interface breakout 1/1/18 map 40g-1x +interface breakout 1/1/19 map 40g-1x +interface breakout 1/1/20 map 40g-1x +interface breakout 1/1/21 map 40g-1x +interface breakout 1/1/22 map 40g-1x +interface breakout 1/1/23 map 40g-1x +interface breakout 1/1/24 map 40g-1x +interface breakout 1/1/25 map 40g-1x +interface breakout 1/1/26 map 40g-1x +interface breakout 1/1/27 map 40g-1x +interface breakout 1/1/28 map 40g-1x +interface breakout 1/1/29 map 40g-1x +interface breakout 1/1/30 map 40g-1x +interface breakout 1/1/31 map 40g-1x +interface breakout 1/1/32 map 40g-1x +username admin password $6$q9QBeYjZ$jfxzVqGhkxX3smxJSH9DDz7/3OJc6m5wjF8nnLD7/VKx8SloIhp4NoGZs0I/UNwh8WVuxwfd9q4pWIgNs5BKH. role sysadmin +aaa authentication local +iscsi target port 860 +iscsi target port 3260 +hash-algorithm ecmp xor +logging console disable +vrrp delay reload 5 +vrrp version 3 +spanning-tree mode rstp +! +interface vlan1 + no shutdown +! +interface vlan100 + no shutdown +! +interface port-channel12 + no shutdown + switchport access vlan 1 + vlt-port-channel 13 +! +interface ethernet1/1/1 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/2 + no shutdown + no switchport +! +interface ethernet1/1/3 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/4 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/5 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/6 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/7 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/8 + no shutdown + no switchport +! +interface ethernet1/1/9 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/10 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/11 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/12 + no shutdown + no switchport +! +interface ethernet1/1/13 + no shutdown + no switchport + ! + vrrp-group 4 + priority 120 + track 3 priority-cost 25 + virtual-address 4.1.1.1 + virtual-address 4.1.1.2 + advertise-interval centisecs 200 + no preempt + ! + vrrp-ipv6-group 2 + priority 120 + track 3 priority-cost 25 + virtual-address 3001:4828:5808:ffa3::9 + virtual-address fe80::10 + advertise-interval centisecs 200 + no preempt +! +interface ethernet1/1/14 + no shutdown + no switchport +! +interface ethernet1/1/15 + no shutdown + no switchport +! +interface ethernet1/1/16 + no shutdown + no switchport +! +interface ethernet1/1/17 + no shutdown + no switchport +! +interface ethernet1/1/18 + no shutdown + no switchport +! +interface ethernet1/1/19 + no shutdown + no switchport +! +interface ethernet1/1/20 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/21 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/22 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/23 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/24 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/25 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/26 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/27 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/28 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/29 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/30 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/31 + no shutdown + switchport access vlan 1 +! +interface ethernet1/1/32 + no shutdown + switchport access vlan 1 +! +interface mgmt1/1/1 + no shutdown + ip address 10.16.148.144/16 + ipv6 address autoconfig +! +route-map test permit 1 + match ip address prefix-list testprefix + match ip address testaccess + continue 20 + set comm-list commstd delete + set comm-list commex add + set community internet + set extcommunity rt 22:33 + set extcomm-list extcommstd delete + set extcomm-list extcommex add + set ip next-hop 10.1.1.1 track-id 3 + set local-preference 1200 + set metric + 30 + set metric-type internal + set origin igp + set weight 50 +! +route-map test deny 10 + match ip address prefix-list testprefix + match ip address testaccess + set ip next-hop 10.1.1.1 track-id 3 +! +support-assist +! +policy-map type application policy-iscsi +! +class-map type application class-iscsi +! +class-map type qos class-trust +! +vlt-domain 1 + discovery-interface ethernet1/1/12 + vlt-mac aa:aa:aa:aa:aa:aa + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_system__display-xml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_system__display-xml new file mode 100644 index 00000000..bb496cc9 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_system__display-xml @@ -0,0 +1,194 @@ +<?xml version="1.0" encoding="UTF-8"?> +<rpc-reply> + <data> + <system> + <node> + <node-id>1</node-id> + <node-mac>14:18:77:09:ae:00</node-mac> + <number-of-mac-addresses>384</number-of-mac-addresses> + <mfg-info> + <vendor-name>DELL</vendor-name> + <product-name>S6010-ON</product-name> + <hw-version>X01</hw-version> + <platform-name>x86_64-dell_s6010_c2538-r0</platform-name> + <ppid>0088</ppid> + <service-tag/> + <service-code/> + </mfg-info> + <unit> + <unit-id>1</unit-id> + <current-unit-model>S6010</current-unit-model> + <provisioned-unit-model>S6010</provisioned-unit-model> + <unit-state>up</unit-state> + <software-version>10.4.0E(R1)</software-version> + <port-info>32x40GbE</port-info> + <mfg-info> + <vendor-name>DELL</vendor-name> + <product-name>S6010-ON</product-name> + <hw-version>X01</hw-version> + <platform-name>x86_64-dell_s6010_c2538-r0</platform-name> + <ppid>0088</ppid> + <part-number>083R0P</part-number> + <service-tag/> + <service-code/> + </mfg-info> + <down-reason>user-triggered</down-reason> + <descr>S6010-ON 32x40GbE QSFP+ Interface Module</descr> + <beacon_led_state>false</beacon_led_state> + <system-identifier-id>1</system-identifier-id> + <firmware> + <firmware-name>BIOS</firmware-name> + <firmware-version>3.26.0.1</firmware-version> + </firmware> + <firmware> + <firmware-name>System CPLD</firmware-name> + <firmware-version>10</firmware-version> + </firmware> + <firmware> + <firmware-name>Master CPLD</firmware-name> + <firmware-version>9</firmware-version> + </firmware> + <firmware> + <firmware-name>Slave CPLD</firmware-name> + <firmware-version>4</firmware-version> + </firmware> + </unit> + <power-supply> + <psu-id>1</psu-id> + <status>fail</status> + <mfg-info/> + </power-supply> + <power-supply> + <psu-id>2</psu-id> + <status>up</status> + <power-type>UNKNOWN</power-type> + <fan-info> + <fan-id>1</fan-id> + <fan-status>fail</fan-status> + <fan-speed-rpm>1920</fan-speed-rpm> + </fan-info> + <air-flow>NORMAL</air-flow> + <mfg-info> + <vendor-name/> + <product-name/> + <hw-version/> + <platform-name/> + <ppid/> + <part-number/> + <service-tag/> + <service-code/> + </mfg-info> + </power-supply> + <fan-tray> + <fan-tray-id>1</fan-tray-id> + <status>up</status> + <fan-info> + <fan-id>1</fan-id> + <fan-status>up</fan-status> + <fan-speed-rpm>22090</fan-speed-rpm> + </fan-info> + <air-flow>NORMAL</air-flow> + <mfg-info> + <vendor-name/> + <product-name/> + <hw-version>F01</hw-version> + <platform-name/> + <ppid>CN123456FAN100589021</ppid> + <part-number>P1FAN1</part-number> + <service-tag/> + <service-code/> + </mfg-info> + </fan-tray> + <fan-tray> + <fan-tray-id>2</fan-tray-id> + <status>up</status> + <fan-info> + <fan-id>1</fan-id> + <fan-status>up</fan-status> + <fan-speed-rpm>22215</fan-speed-rpm> + </fan-info> + <air-flow>NORMAL</air-flow> + <mfg-info> + <vendor-name/> + <product-name/> + <hw-version>F02</hw-version> + <platform-name/> + <ppid>CN123456FAN200589031</ppid> + <part-number>P2FAN2</part-number> + <service-tag/> + <service-code/> + </mfg-info> + </fan-tray> + <fan-tray> + <fan-tray-id>3</fan-tray-id> + <status>up</status> + <fan-info> + <fan-id>1</fan-id> + <fan-status>up</fan-status> + <fan-speed-rpm>22215</fan-speed-rpm> + </fan-info> + <air-flow>NORMAL</air-flow> + <mfg-info> + <vendor-name/> + <product-name/> + <hw-version>F03</hw-version> + <platform-name/> + <ppid>CN123456FAN300589041</ppid> + <part-number>P3FAN3</part-number> + <service-tag/> + <service-code/> + </mfg-info> + </fan-tray> + <fan-tray> + <fan-tray-id>4</fan-tray-id> + <status>up</status> + <fan-info> + <fan-id>1</fan-id> + <fan-status>up</fan-status> + <fan-speed-rpm>22215</fan-speed-rpm> + </fan-info> + <air-flow>NORMAL</air-flow> + <mfg-info> + <vendor-name/> + <product-name/> + <hw-version>F04</hw-version> + <platform-name/> + <ppid>CN123456FAN400589051</ppid> + <part-number>P4FAN4</part-number> + <service-tag/> + <service-code/> + </mfg-info> + </fan-tray> + <fan-tray> + <fan-tray-id>5</fan-tray-id> + <status>up</status> + <fan-info> + <fan-id>1</fan-id> + <fan-status>up</fan-status> + <fan-speed-rpm>21724</fan-speed-rpm> + </fan-info> + <air-flow>NORMAL</air-flow> + <mfg-info> + <vendor-name/> + <product-name/> + <hw-version>F05</hw-version> + <platform-name/> + <ppid>CN123456FAN500589061</ppid> + <part-number>P5FAN5</part-number> + <service-tag/> + <service-code/> + </mfg-info> + </fan-tray> + </node> + </system> + <system-state> + <system-status> + <hostname>os10</hostname> + <uptime>161826</uptime> + <date-time>2018-01-12T13:42:36.20+00:00</date-time> + <boot-datetime>2018-01-10T16:45:30+00:00</boot-datetime> + </system-status> + </system-state> + </data> +</rpc-reply> + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_version b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_version new file mode 100644 index 00000000..b9aa8fea --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_version @@ -0,0 +1,9 @@ +Dell EMC Networking OS10 Enterprise +Copyright (c) 1999-2017 by Dell Inc. All Rights Reserved. +OS Version: 10.4.0E(R1) +Build Version: 10.4.0E(R1.56) +Build Time: 2017-12-19T22:11:00-0800 +System Type: S6000-VM +Architecture: x86_64 +Up Time: 6 days 00:33:35 + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_version__display-xml b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_version__display-xml new file mode 100644 index 00000000..50f84ab6 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/fixtures/show_version__display-xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<rpc-reply> + <data> + <system-state> + <system-status> + <hostname>os10</hostname> + <uptime>162698</uptime> + <date-time>2018-01-12T13:57:08.58+00:00</date-time> + <boot-datetime>2018-01-10T16:45:30+00:00</boot-datetime> + </system-status> + </system-state> + <system-sw-state> + <sw-version> + <sw-version>10.4.0E(R1)</sw-version> + <sw-name>Enterprise</sw-name> + <sw-name-long>Dell EMC Networking OS10 Enterprise</sw-name-long> + <sw-platform>S6010-ON</sw-platform> + <sw-platform-long>Dell EMC OS10 Enterprise Edition Blueprint 1.0.0</sw-platform-long> + <cpu-arch>x86_64</cpu-arch> + <sw-build-date>2017-12-14T23:39:27-0800</sw-build-date> + <sw-build-version>10.4.0E(R1.55)</sw-build-version> + <copyright>Copyright (c) 1999-2017 by Dell Inc. All Rights Reserved.</copyright> + </sw-version> + </system-sw-state> + </data> +</rpc-reply> + diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/os10_module.py b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/os10_module.py new file mode 100644 index 00000000..8f990d73 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/os10_module.py @@ -0,0 +1,90 @@ +# (c) 2020 Red Hat Inc. +# +# (c) 2020 Dell Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import os +import json + +from units.modules.utils import AnsibleExitJson, AnsibleFailJson, ModuleTestCase + + +fixture_path = os.path.join(os.path.dirname(__file__), 'fixtures') +fixture_data = {} + + +def load_fixture(name): + path = os.path.join(fixture_path, name) + + if path in fixture_data: + return fixture_data[path] + + with open(path) as f: + data = f.read() + + try: + data = json.loads(data) + except Exception: + pass + + fixture_data[path] = data + return data + + +class TestDellos10Module(ModuleTestCase): + + def execute_module(self, failed=False, changed=False, commands=None, sort=True, defaults=False): + + self.load_fixtures(commands) + + if failed: + result = self.failed() + self.assertTrue(result['failed'], result) + else: + result = self.changed(changed) + self.assertEqual(result['changed'], changed, result) + + if commands is not None: + if sort: + self.assertEqual(sorted(commands), sorted(result['updates']), result['updates']) + else: + self.assertEqual(commands, result['updates'], result['updates']) + + return result + + def failed(self): + with self.assertRaises(AnsibleFailJson) as exc: + self.module.main() + + result = exc.exception.args[0] + self.assertTrue(result['failed'], result) + return result + + def changed(self, changed=False): + with self.assertRaises(AnsibleExitJson) as exc: + self.module.main() + + result = exc.exception.args[0] + self.assertEqual(result['changed'], changed, result) + return result + + def load_fixtures(self, commands=None): + pass diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_command.py b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_command.py new file mode 100644 index 00000000..77f6f1a7 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_command.py @@ -0,0 +1,110 @@ +# (c) 2020 Red Hat Inc. +# +# (c) 2020 Dell Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import json + +from units.compat.mock import patch +from ansible_collections.dellemc.os10.plugins.modules import os10_command +from units.modules.utils import set_module_args +from .os10_module import TestDellos10Module, load_fixture + + +class TestDellos10CommandModule(TestDellos10Module): + + module = os10_command + + def setUp(self): + super(TestDellos10CommandModule, self).setUp() + + self.mock_run_commands = patch('ansible.modules.network.os10.os10_command.run_commands') + self.run_commands = self.mock_run_commands.start() + + def tearDown(self): + super(TestDellos10CommandModule, self).tearDown() + self.mock_run_commands.stop() + + def load_fixtures(self, commands=None): + + def load_from_file(*args, **kwargs): + module, commands = args + output = list() + + for item in commands: + try: + obj = json.loads(item['command']) + command = obj['command'] + except ValueError: + command = item['command'] + filename = str(command).replace(' ', '_') + output.append(load_fixture(filename)) + return output + + self.run_commands.side_effect = load_from_file + + def test_os10_command_simple(self): + set_module_args(dict(commands=['show version'])) + result = self.execute_module() + self.assertEqual(len(result['stdout']), 1) + self.assertTrue(result['stdout'][0].startswith('Dell EMC Networking')) + + def test_os10_command_multiple(self): + set_module_args(dict(commands=['show version', 'show version'])) + result = self.execute_module() + self.assertEqual(len(result['stdout']), 2) + self.assertTrue(result['stdout'][0].startswith('Dell EMC Networking')) + + def test_os10_command_wait_for(self): + wait_for = 'result[0] contains "Dell EMC"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module() + + def test_os10_command_wait_for_fails(self): + wait_for = 'result[0] contains "test string"' + set_module_args(dict(commands=['show version'], wait_for=wait_for)) + self.execute_module(failed=True) + self.assertEqual(self.run_commands.call_count, 10) + + def test_os10_command_retries(self): + wait_for = 'result[0] contains "test string"' + set_module_args(dict(commands=['show version'], wait_for=wait_for, retries=2)) + self.execute_module(failed=True) + self.assertEqual(self.run_commands.call_count, 2) + + def test_os10_command_match_any(self): + wait_for = ['result[0] contains "Dell EMC"', + 'result[0] contains "test string"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='any')) + self.execute_module() + + def test_os10_command_match_all(self): + wait_for = ['result[0] contains "Dell EMC"', + 'result[0] contains "OS10 Enterprise"'] + set_module_args(dict(commands=['show version'], wait_for=wait_for, match='all')) + self.execute_module() + + def test_os10_command_match_all_failure(self): + wait_for = ['result[0] contains "Dell EMC"', + 'result[0] contains "test string"'] + commands = ['show version', 'show version'] + set_module_args(dict(commands=commands, wait_for=wait_for, match='all')) + self.execute_module(failed=True) diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_config.py b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_config.py new file mode 100644 index 00000000..e38d124a --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_config.py @@ -0,0 +1,150 @@ +# +# (c) 2020 Red Hat Inc. +# +# (c) 2020 Dell Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +from units.compat.mock import patch +from ansible_collections.dellemc.os10.plugins.modules import os10_config +from units.modules.utils import set_module_args +from .os10_module import TestDellos10Module, load_fixture + + +class TestDellos10ConfigModule(TestDellos10Module): + + module = os10_config + + def setUp(self): + super(TestDellos10ConfigModule, self).setUp() + + self.mock_get_config = patch('ansible.modules.network.os10.os10_config.get_config') + self.get_config = self.mock_get_config.start() + + self.mock_load_config = patch('ansible.modules.network.os10.os10_config.load_config') + self.load_config = self.mock_load_config.start() + + self.mock_run_commands = patch('ansible.modules.network.os10.os10_config.run_commands') + self.run_commands = self.mock_run_commands.start() + + def tearDown(self): + super(TestDellos10ConfigModule, self).tearDown() + self.mock_get_config.stop() + self.mock_load_config.stop() + self.mock_run_commands.stop() + + def load_fixtures(self, commands=None): + config_file = 'os10_config_config.cfg' + self.get_config.return_value = load_fixture(config_file) + self.load_config.return_value = None + + def test_os10_config_unchanged(self): + src = load_fixture('os10_config_config.cfg') + set_module_args(dict(src=src)) + self.execute_module() + + def test_os10_config_src(self): + src = load_fixture('os10_config_src.cfg') + set_module_args(dict(src=src)) + commands = ['hostname foo', 'interface ethernet1/1/2', + 'no ip address'] + self.execute_module(changed=True, commands=commands) + + def test_os10_config_backup(self): + set_module_args(dict(backup=True)) + result = self.execute_module() + self.assertIn('__backup__', result) + + def test_os10_config_save(self): + set_module_args(dict(save=True)) + self.execute_module(changed=True) + self.assertEqual(self.run_commands.call_count, 1) + self.assertEqual(self.get_config.call_count, 0) + self.assertEqual(self.load_config.call_count, 0) + args = self.run_commands.call_args[0][1] + self.assertDictContainsSubset({'command': 'copy running-config startup-config'}, args[0]) +# self.assertIn('copy running-config startup-config\r', args) + + def test_os10_config_lines_wo_parents(self): + set_module_args(dict(lines=['hostname foo'])) + commands = ['hostname foo'] + self.execute_module(changed=True, commands=commands) + + def test_os10_config_lines_w_parents(self): + set_module_args(dict(lines=['shutdown'], parents=['interface ethernet1/1/2'])) + commands = ['interface ethernet1/1/2', 'shutdown'] + self.execute_module(changed=True, commands=commands) + + def test_os10_config_before(self): + set_module_args(dict(lines=['hostname foo'], before=['snmp-server contact bar'])) + commands = ['snmp-server contact bar', 'hostname foo'] + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os10_config_after(self): + set_module_args(dict(lines=['hostname foo'], after=['snmp-server contact bar'])) + commands = ['hostname foo', 'snmp-server contact bar'] + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os10_config_before_after_no_change(self): + set_module_args(dict(lines=['hostname router'], + before=['snmp-server contact bar'], + after=['snmp-server location chennai'])) + self.execute_module() + + def test_os10_config_config(self): + config = 'hostname localhost' + set_module_args(dict(lines=['hostname router'], config=config)) + commands = ['hostname router'] + self.execute_module(changed=True, commands=commands) + + def test_os10_config_replace_block(self): + lines = ['description test string', 'test string'] + parents = ['interface ethernet1/1/2'] + set_module_args(dict(lines=lines, replace='block', parents=parents)) + commands = parents + lines + self.execute_module(changed=True, commands=commands) + + def test_os10_config_match_none(self): + lines = ['hostname router'] + set_module_args(dict(lines=lines, match='none')) + self.execute_module(changed=True, commands=lines) + + def test_os10_config_match_none(self): + lines = ['ip address 1.2.3.4/24', 'description test string'] + parents = ['interface ethernet1/1/2'] + set_module_args(dict(lines=lines, parents=parents, match='none')) + commands = parents + lines + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os10_config_match_strict(self): + lines = ['ip address 1.2.3.4/24', 'description test string', + 'shutdown'] + parents = ['interface ethernet1/1/2'] + set_module_args(dict(lines=lines, parents=parents, match='strict')) + commands = parents + ['shutdown'] + self.execute_module(changed=True, commands=commands, sort=False) + + def test_os10_config_match_exact(self): + lines = ['ip address 1.2.3.4/24', 'description test string', + 'shutdown'] + parents = ['interface ethernet1/1/2'] + set_module_args(dict(lines=lines, parents=parents, match='exact')) + commands = parents + lines + self.execute_module(changed=True, commands=commands, sort=False) diff --git a/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_facts.py b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_facts.py new file mode 100644 index 00000000..7f03eab8 --- /dev/null +++ b/collections-debian-merged/ansible_collections/dellemc/os10/tests/unit/modules/network/os10/test_os10_facts.py @@ -0,0 +1,110 @@ +# (c) 2020 Red Hat Inc. +# +# (c) 2020 Dell Inc. +# +# This file is part of Ansible +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see <http://www.gnu.org/licenses/>. + +# Make coding more python3-ish +from __future__ import (absolute_import, division, print_function) +__metaclass__ = type + +import json + +from units.compat.mock import patch +from units.modules.utils import set_module_args +from .os10_module import TestDellos10Module, load_fixture +from ansible_collections.dellemc.os10.plugins.modules import os10_facts + + +class TestDellos10Facts(TestDellos10Module): + + module = os10_facts + + def setUp(self): + super(TestDellos10Facts, self).setUp() + + self.mock_run_command = patch( + 'ansible.modules.network.os10.os10_facts.run_commands') + self.run_command = self.mock_run_command.start() + + def tearDown(self): + super(TestDellos10Facts, self).tearDown() + + self.mock_run_command.stop() + + def load_fixtures(self, commands=None): + + def load_from_file(*args, **kwargs): + module, commands = args + output = list() + + for item in commands: + try: + obj = json.loads(item) + command = obj['command'] + except ValueError: + command = item + if '|' in command: + command = str(command).replace('|', '') + filename = str(command).replace(' ', '_') + filename = filename.replace('/', '7') + filename = filename.replace(':', '_colon_') + output.append(load_fixture(filename)) + return output + + self.run_command.side_effect = load_from_file + + def test_os10_facts_gather_subset_default(self): + set_module_args(dict()) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('hardware', ansible_facts['ansible_net_gather_subset']) + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset']) + self.assertEquals('os10', ansible_facts['ansible_net_hostname']) + self.assertIn('ethernet1/1/8', ansible_facts['ansible_net_interfaces'].keys()) + self.assertEquals(7936, ansible_facts['ansible_net_memtotal_mb']) + self.assertEquals(5693, ansible_facts['ansible_net_memfree_mb']) + + def test_os10_facts_gather_subset_config(self): + set_module_args({'gather_subset': 'config'}) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('config', ansible_facts['ansible_net_gather_subset']) + self.assertEquals('os10', ansible_facts['ansible_net_hostname']) + self.assertIn('ansible_net_config', ansible_facts) + + def test_os10_facts_gather_subset_hardware(self): + set_module_args({'gather_subset': 'hardware'}) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('hardware', ansible_facts['ansible_net_gather_subset']) + self.assertEquals('x86_64', ansible_facts['ansible_net_cpu_arch']) + self.assertEquals(7936, ansible_facts['ansible_net_memtotal_mb']) + self.assertEquals(5693, ansible_facts['ansible_net_memfree_mb']) + + def test_os10_facts_gather_subset_interfaces(self): + set_module_args({'gather_subset': 'interfaces'}) + result = self.execute_module() + ansible_facts = result['ansible_facts'] + self.assertIn('default', ansible_facts['ansible_net_gather_subset']) + self.assertIn('interfaces', ansible_facts['ansible_net_gather_subset']) + self.assertIn('ethernet1/1/8', ansible_facts['ansible_net_interfaces'].keys()) + self.assertEquals(sorted(['mgmt1/1/1', 'ethernet1/1/4', 'ethernet1/1/2', 'ethernet1/1/3', 'ethernet1/1/1']), + sorted(list(ansible_facts['ansible_net_neighbors'].keys()))) + self.assertIn('ansible_net_interfaces', ansible_facts) |