diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-05 16:18:34 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-05 16:18:34 +0000 |
commit | 3667197efb7b18ec842efd504785965911f8ac4b (patch) | |
tree | 0b986a4bc6879d080b100666a97cdabbc9ca1f28 /ansible_collections/cisco/ios | |
parent | Adding upstream version 9.5.1+dfsg. (diff) | |
download | ansible-3667197efb7b18ec842efd504785965911f8ac4b.tar.xz ansible-3667197efb7b18ec842efd504785965911f8ac4b.zip |
Adding upstream version 10.0.0+dfsg.upstream/10.0.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/cisco/ios')
164 files changed, 10217 insertions, 9490 deletions
diff --git a/ansible_collections/cisco/ios/.ansible-lint b/ansible_collections/cisco/ios/.ansible-lint index 8d9bb70b8..d2869106c 100644 --- a/ansible_collections/cisco/ios/.ansible-lint +++ b/ansible_collections/cisco/ios/.ansible-lint @@ -1,5 +1,7 @@ --- + profile: production -exclude_paths: - - changelogs/changelog.yaml +# exclude_paths: + +# - changelogs/changelog.yaml diff --git a/ansible_collections/cisco/ios/.flake8 b/ansible_collections/cisco/ios/.flake8 index 4795515e8..03be69242 100644 --- a/ansible_collections/cisco/ios/.flake8 +++ b/ansible_collections/cisco/ios/.flake8 @@ -39,19 +39,14 @@ extend-exclude = # IMPORTANT: avoid using ignore option, always use extend-ignore instead # Completely and unconditionally ignore the following errors: extend-ignore = - # Safeguard neutering of flake8-quotes : https://github.com/zheller/flake8-quotes/issues/105 - Q, - # annoy black by allowing white space before : https://github.com/psf/black/issues/315 - E203, - # duplicate of pylint W0611 (unused-import) - F401, - # duplicate of pylint E0602 (undefined-variable) - F821, - # duplicate of pylint W0612 (unused-variable) F841, + # line-length + E501, + # module level import not at top of file + E402 # Accessibility/large fonts and PEP8 unfriendly: -max-line-length = 100 +max-line-length = 120 # Allow certain violations in certain files: # Please keep both sections of this list sorted, as it will be easier for others to find and add entries in the future @@ -62,7 +57,7 @@ per-file-ignores = # these will need to be added to that line as well. - # S101: Allow the use of assert within the tests directory, since tests require it. + # S101: Allow the use of assert within the tests directory, since tests require it. tests/**.py: S101 # The following were present during the initial implementation. diff --git a/ansible_collections/cisco/ios/.github/workflows/ack.yml b/ansible_collections/cisco/ios/.github/workflows/check_label.yml index fda595dc5..b120bfa32 100644 --- a/ansible_collections/cisco/ios/.github/workflows/ack.yml +++ b/ansible_collections/cisco/ios/.github/workflows/check_label.yml @@ -1,15 +1,11 @@ --- -# See https://github.com/ansible-community/devtools/blob/main/.github/workflows/ack.yml -name: ack - +name: "Check label" concurrency: group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true - on: # yamllint disable-line rule:truthy pull_request_target: types: [opened, labeled, unlabeled, synchronize] - jobs: - ack: - uses: ansible/devtools/.github/workflows/ack.yml@main + check_label: + uses: ansible/ansible-content-actions/.github/workflows/check_label.yaml@main diff --git a/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml b/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml index c2a7ad60d..3e0f17919 100644 --- a/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml +++ b/ansible_collections/cisco/ios/.github/workflows/codecoverage.yml @@ -1,8 +1,9 @@ --- -name: code_coverage +name: "Code coverage" on: # yamllint disable-line rule:truthy push: + branches: [main] pull_request: branches: [ main ] diff --git a/ansible_collections/cisco/ios/.github/workflows/draft_release.yml b/ansible_collections/cisco/ios/.github/workflows/draft_release.yml new file mode 100644 index 000000000..33a890a57 --- /dev/null +++ b/ansible_collections/cisco/ios/.github/workflows/draft_release.yml @@ -0,0 +1,18 @@ +--- +name: "Draft release" +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true +on: # yamllint disable-line rule:truthy + workflow_dispatch: +env: + NAMESPACE: ${{ github.repository_owner }} + COLLECTION_NAME: ios + ANSIBLE_COLLECTIONS_PATHS: ./ +jobs: + update_release_draft: + uses: ansible/ansible-content-actions/.github/workflows/draft_release.yaml@main + with: + repo: ${{ github.event.pull_request.head.repo.full_name }} + secrets: + BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/ios/.github/workflows/lint.yml b/ansible_collections/cisco/ios/.github/workflows/lint.yml deleted file mode 100644 index fbac38cbf..000000000 --- a/ansible_collections/cisco/ios/.github/workflows/lint.yml +++ /dev/null @@ -1,13 +0,0 @@ ---- -name: ansible-lint -on: # yamllint disable-line rule:truthy - pull_request: - branches: ["main"] -jobs: - build: - name: Ansible Lint - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: Run ansible-lint - uses: ansible/ansible-lint@main diff --git a/ansible_collections/cisco/ios/.github/workflows/push.yml b/ansible_collections/cisco/ios/.github/workflows/push.yml deleted file mode 100644 index 2e144f623..000000000 --- a/ansible_collections/cisco/ios/.github/workflows/push.yml +++ /dev/null @@ -1,38 +0,0 @@ ---- -# push workflow is shared and expected to perform actions after a merge happens -# on a maintenance branch (default or release). For example updating the -# draft release-notes. -# based on great work from -# https://github.com/T-Systems-MMS/ansible-collection-icinga-director -name: push - -concurrency: - group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true - -on: # yamllint disable-line rule:truthy - # # auto generate changelog and add PR by ansibuddy - # push: - # # branches to consider in the event; optional, defaults to all - # branches: - # - main - # - 'releases/**' - # - 'stable/**' - # # Prevent a 2nd run after the changelog is updated - # paths-ignore: - # - CHANGELOG.rst - # - changelogs/changelog.yaml - workflow_dispatch: - -env: - NAMESPACE: cisco - COLLECTION_NAME: ios - ANSIBLE_COLLECTIONS_PATHS: ./ - -jobs: - update_release_draft: - uses: ansible/devtools/.github/workflows/push_network.yml@main - with: - repo: ansible-collections/cisco.ios - secrets: - BOT_PAT: ${{ secrets.BOT_PAT }} diff --git a/ansible_collections/cisco/ios/.github/workflows/release.yml b/ansible_collections/cisco/ios/.github/workflows/release.yml index eb04259d1..6dbb1aa39 100644 --- a/ansible_collections/cisco/ios/.github/workflows/release.yml +++ b/ansible_collections/cisco/ios/.github/workflows/release.yml @@ -1,12 +1,12 @@ --- -name: release +name: "Release collection" on: # yamllint disable-line rule:truthy release: types: [published] jobs: release: - uses: ansible/devtools/.github/workflows/release_collection.yml@main + uses: ansible/ansible-content-actions/.github/workflows/release.yaml@main with: environment: release secrets: diff --git a/ansible_collections/cisco/ios/.github/workflows/tests.yml b/ansible_collections/cisco/ios/.github/workflows/tests.yml index 2c1d85055..bf7ade86c 100644 --- a/ansible_collections/cisco/ios/.github/workflows/tests.yml +++ b/ansible_collections/cisco/ios/.github/workflows/tests.yml @@ -1,5 +1,5 @@ --- -name: CI +name: "CI" concurrency: group: ${{ github.head_ref || github.run_id }} @@ -12,15 +12,18 @@ on: # yamllint disable-line rule:truthy schedule: - cron: '0 0 * * *' - jobs: changelog: - uses: ansible-network/github_actions/.github/workflows/changelog.yml@main - if: github.event_name != 'schedule' + uses: ansible/ansible-content-actions/.github/workflows/changelog.yaml@main + if: github.event_name == 'pull_request' + build-import: + uses: ansible/ansible-content-actions/.github/workflows/build_import.yaml@main + ansible-lint: + uses: ansible/ansible-content-actions/.github/workflows/ansible_lint.yaml@main sanity: - uses: ansible-network/github_actions/.github/workflows/sanity.yml@main + uses: ansible/ansible-content-actions/.github/workflows/sanity.yaml@main unit-galaxy: - uses: ansible-network/github_actions/.github/workflows/unit_galaxy.yml@main + uses: ansible/ansible-content-actions/.github/workflows/unit.yaml@main unit-source: uses: ansible-network/github_actions/.github/workflows/unit_source.yml@main with: @@ -31,16 +34,19 @@ jobs: if: ${{ always() }} needs: - changelog + - build-import - sanity - unit-galaxy - - unit-source + - ansible-lint runs-on: ubuntu-latest steps: - run: >- python -c "assert 'failure' not in set([ '${{ needs.changelog.result }}', + '${{ needs.build-import.result }}', '${{ needs.sanity.result }}', - '${{ needs.unit-galaxy.result }}', + '${{ needs.unit-galaxy.result }}' + '${{ needs.ansible-lint.result }}' '${{ needs.unit-source.result }}' ])" diff --git a/ansible_collections/cisco/ios/.pre-commit-config.yaml b/ansible_collections/cisco/ios/.pre-commit-config.yaml index 275086d8d..031505895 100644 --- a/ansible_collections/cisco/ios/.pre-commit-config.yaml +++ b/ansible_collections/cisco/ios/.pre-commit-config.yaml @@ -23,7 +23,7 @@ repos: - id: add-trailing-comma - repo: https://github.com/pre-commit/mirrors-prettier - rev: "v3.1.0" + rev: "v4.0.0-alpha.8" hooks: - id: prettier entry: env CI=1 bash -c "prettier --list-different . || ec=$? && prettier --loglevel=error --write . && exit $ec" @@ -34,13 +34,18 @@ repos: - prettier-plugin-toml - repo: https://github.com/PyCQA/isort - rev: 5.12.0 + rev: 5.13.2 hooks: - id: isort name: Sort import statements using isort args: ["--filter-files"] - repo: https://github.com/psf/black - rev: 23.11.0 + rev: 24.3.0 hooks: - id: black + + - repo: https://github.com/pycqa/flake8 + rev: 7.0.0 + hooks: + - id: flake8 diff --git a/ansible_collections/cisco/ios/CHANGELOG.rst b/ansible_collections/cisco/ios/CHANGELOG.rst index 1dcb5aa02..9fdf040df 100644 --- a/ansible_collections/cisco/ios/CHANGELOG.rst +++ b/ansible_collections/cisco/ios/CHANGELOG.rst @@ -5,6 +5,123 @@ Cisco Ios Collection Release Notes .. contents:: Topics +v8.0.0 +====== + +Major Changes +------------- + +- Update the netcommon base version 6.1.0 to support cli_restore plugin. + +Minor Changes +------------- + +- Add support for cli_restore functionality. +- Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). +- cli_restore module is part of netcommon. + +v7.0.0 +====== + +Major Changes +------------- + +- ios_ntp - Remove deprecated ntp legacy module + +Removed Features (previously deprecated) +---------------------------------------- + +- Deprecated ios_ntp module in favor of ios_ntp_global. + +v6.1.4 +====== + +Bugfixes +-------- + +- ios_acls - update module to apply remarks entry with sequence numbers. +- ios_bgp_address_family - description attribute, evalutated as complex object casted to string. +- ios_bgp_global - description attribute, evalutated as complex object casted to string. +- ios_interfaces - description attribute, evalutated as complex object casted to string. +- ios_prefix_lists - description attribute, evalutated as complex object casted to string. +- ios_route_maps - description attribute, evalutated as complex object casted to string. + +v6.1.3 +====== + +Bugfixes +-------- + +- ios_acls - Adds back existing remarks for an ace entry when updated with replaced or overridden state, as all remarks for a specific sequence gets removed when ace entry is updated. +- ios_bgp_global - Shutdown attributes generates negate command on set as false. +- ios_vrf - Update and add missing argspec keys that define the attributes. + +Documentation Changes +--------------------- + +- ios_vrf - Update and add missing documentation for ios_vrf module. + +v6.1.2 +====== + +Bugfixes +-------- + +- ios_acls - Fix replaced state to consider remarks and ace entries while comparing configuration. +- ios_acls - correctly match the different line for ACL without sequence number +- ios_acls - take correctly in case where we want to push an ACL from a different type +- ios_ospfv2 - Fix improper rendering of admin_distance attribute. +- ios_snmp_server - fixed config issue with snmp user password update being idempotent on consecutive runs. +- ios_user - Fix configuration of hashed passwords and secrets. + +v6.1.1 +====== + +Bugfixes +-------- + +- Prevents module_defaults from were being incorrectly applied to the platform action, instead of the concerned module. +- ios_vlans - fixes behaviour of shutdown attribute with action states. + +v6.1.0 +====== + +Minor Changes +------------- + +- ios_bgp_global - added 'bgp.default.ipv4_unicast' and 'bgp.default.route_target.filter' key +- ios_l3_interfaces - added 'autostate', 'mac_address', 'ipv4.source_interface', and 'ipv6.enable' key +- ios_vlans - Add purged state to deal with toplevel vlan and vlan configuration config. + +Bugfixes +-------- + +- ios_bgp_global - fix template attribute to generate configuration commands. +- ios_l3_interfaces - remove validation from ipv6 address parameter. +- ios_snmp_server - fix group and user IPv6 ACL commands. +- ios_user - fix configuration of user with hashed password. +- ios_user - fixed configuration removal of ssh users using purge. +- ios_vlans - Make behaviour of the action states consistent. +- ios_vlans - Top level configuration attribute is not required, the module works with vlan and vlan configuration both. + +v6.0.0 +====== + +Release Summary +--------------- + +Starting from this release, the minimum `ansible-core` version this collection requires is `2.14.0`. The last known version compatible with ansible-core<2.14 is `v5.3.0`. + +Major Changes +------------- + +- Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions are EoL now. + +Removed Features (previously deprecated) +---------------------------------------- + +- Removed previously deprecated ios_bgp module in favor of ios_bgp_global and ios_bgp_address_family. + v5.3.0 ====== @@ -569,7 +686,7 @@ Documentation Changes New Modules ----------- -- ios_hostname - hostname resource module +- ios_hostname - Resource module to configure hostname. v2.6.0 ====== @@ -600,7 +717,7 @@ Documentation Changes New Modules ----------- -- ios_snmp_server - snmp_server resource module +- ios_snmp_server - Resource module to configure snmp server. v2.5.0 ====== @@ -633,7 +750,7 @@ Documentation Changes New Modules ----------- -- ios_ntp_global - ntp_global resource module +- ios_ntp_global - Resource module to configure NTP. v2.4.0 ====== @@ -720,8 +837,8 @@ Bugfixes New Modules ----------- -- ios_logging_global - Logging resource module. -- ios_prefix_lists - Prefix Lists resource module. +- ios_logging_global - Resource module to configure logging. +- ios_prefix_lists - Resource module to configure prefix lists. v2.1.0 ====== @@ -745,7 +862,7 @@ Bugfixes New Modules ----------- -- ios_route_maps - Route Maps resource module. +- ios_route_maps - Resource module to configure route maps. v2.0.1 ====== @@ -790,7 +907,7 @@ Bugfixes New Modules ----------- -- ios_bgp_address_family - BGP Address Family resource module. +- ios_bgp_address_family - Resource module to configure BGP Address family. v1.3.0 ====== @@ -813,7 +930,7 @@ Bugfixes New Modules ----------- -- ios_bgp_global - BGP Global resource module +- ios_bgp_global - Resource module to configure BGP. v1.2.1 ====== @@ -844,7 +961,7 @@ Bugfixes New Modules ----------- -- ios_ospf_interfaces - OSPF Interfaces resource module +- ios_ospf_interfaces - Resource module to configure OSPF interfaces. v1.1.0 ====== @@ -865,7 +982,7 @@ Bugfixes New Modules ----------- -- ios_ospfv3 - OSPFv3 resource module +- ios_ospfv3 - Resource module to configure OSPFv3. v1.0.3 ====== @@ -917,34 +1034,26 @@ Cliconf New Modules ----------- -- ios_acl_interfaces - ACL interfaces resource module -- ios_acls - ACLs resource module -- ios_banner - Manage multiline banners on Cisco IOS devices -- ios_bgp - Configure global BGP protocol settings on Cisco IOS. -- ios_command - Run commands on remote devices running Cisco IOS -- ios_config - Manage Cisco IOS configuration sections -- ios_facts - Collect facts from remote devices running Cisco IOS -- ios_interface - (deprecated, removed after 2022-06-01) Manage Interface on Cisco IOS network devices -- ios_interfaces - Interfaces resource module -- ios_l2_interface - (deprecated, removed after 2022-06-01) Manage Layer-2 interface on Cisco IOS devices. -- ios_l2_interfaces - L2 interfaces resource module -- ios_l3_interface - (deprecated, removed after 2022-06-01) Manage Layer-3 interfaces on Cisco IOS network devices. -- ios_l3_interfaces - L3 interfaces resource module -- ios_lacp - LACP resource module -- ios_lacp_interfaces - LACP interfaces resource module -- ios_lag_interfaces - LAG interfaces resource module -- ios_linkagg - Manage link aggregation groups on Cisco IOS network devices -- ios_lldp - Manage LLDP configuration on Cisco IOS network devices. -- ios_lldp_global - LLDP resource module -- ios_lldp_interfaces - LLDP interfaces resource module -- ios_logging - Manage logging on network devices -- ios_ntp - Manages core NTP configuration. -- ios_ospfv2 - OSPFv2 resource module -- ios_ping - Tests reachability using ping from Cisco IOS network devices -- ios_static_route - (deprecated, removed after 2022-06-01) Manage static IP routes on Cisco IOS network devices -- ios_static_routes - Static routes resource module -- ios_system - Manage the system attributes on Cisco IOS devices -- ios_user - Manage the aggregate of local users on Cisco IOS device -- ios_vlan - (deprecated, removed after 2022-06-01) Manage VLANs on IOS network devices -- ios_vlans - VLANs resource module -- ios_vrf - Manage the collection of VRF definitions on Cisco IOS devices +- ios_acl_interfaces - Resource module to configure ACL interfaces. +- ios_acls - Resource module to configure ACLs. +- ios_banner - Module to configure multiline banners. +- ios_command - Module to run commands on remote devices. +- ios_config - Module to manage configuration sections. +- ios_facts - Module to collect facts from remote devices. +- ios_interfaces - Resource module to configure interfaces. +- ios_l2_interfaces - Resource module to configure L2 interfaces. +- ios_l3_interfaces - Resource module to configure L3 interfaces. +- ios_lacp - Resource module to configure LACP. +- ios_lacp_interfaces - Resource module to configure LACP interfaces. +- ios_lag_interfaces - Resource module to configure LAG interfaces. +- ios_linkagg - Module to configure link aggregation groups. +- ios_lldp - (deprecated, removed after 2024-06-01) Manage LLDP configuration on Cisco IOS network devices. +- ios_lldp_global - Resource module to configure LLDP. +- ios_lldp_interfaces - Resource module to configure LLDP interfaces. +- ios_ospfv2 - Resource module to configure OSPFv2. +- ios_ping - Tests reachability using ping from IOS switch. +- ios_static_routes - Resource module to configure static routes. +- ios_system - Module to manage the system attributes. +- ios_user - Module to manage the aggregates of local users. +- ios_vlans - Resource module to configure VLANs. +- ios_vrf - Module to configure VRF definitions. diff --git a/ansible_collections/cisco/ios/FILES.json b/ansible_collections/cisco/ios/FILES.json index 93015a7cb..e53a66d62 100644 --- a/ansible_collections/cisco/ios/FILES.json +++ b/ansible_collections/cisco/ios/FILES.json @@ -8,80 +8,80 @@ "format": 1 }, { - "name": "codecov.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", + "name": ".github", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "LICENSE", + "name": ".github/dependabot.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", + "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", "format": 1 }, { - "name": ".yamllint", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", + "name": ".github/workflows", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "requirements.txt", + "name": ".github/workflows/codecoverage.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "47d9fe78273fd64c750e78a317b1a59a6f87ebb93d8d4cf9ae6d98a0f2fc9f9e", + "chksum_sha256": "57e1fa3c1edef3b462e23b36f5ea116f8675a71d7f49731193e38b708c859742", "format": 1 }, { - "name": "meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".github/workflows/draft_release.yml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fa1789eadc286843dc2ced7f596d7dc49bd098cc2d816800c66659641cda298c", "format": 1 }, { - "name": "meta/runtime.yml", + "name": ".github/workflows/check_label.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12277ae9f6f950b1b0bcbef81136879cabb0ecde5c7f464592000d7e964bd0ca", + "chksum_sha256": "9eb6abad2038b10cd6ea70310aa88d163f10c374d1728df29bb553eff2acfaba", "format": 1 }, { - "name": "meta/__init__.py", + "name": ".github/workflows/tests.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "162f3fb34963b1ec1e673de3506a5627b03a083fc97b9359758c8663dca87cc0", "format": 1 }, { - "name": "mypy.ini", + "name": ".github/workflows/release.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cc01a9c3e2a80b779ca004be5e4df814eebd494db650387b1bde98267a0b317", + "chksum_sha256": "2e3f90a3147d93b97347d8418352f23e201417e05539a466399dd258a65d699c", "format": 1 }, { - "name": ".config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": ".github/CODEOWNERS", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": ".config/dictionary.txt", + "name": ".github/release-drafter.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b504c990735c090ba655b9acdcc12a537ebf7d2e101b308ef1edc8543d9ed804", + "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", "format": 1 }, { - "name": "README.md", + "name": ".darglint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b78d164194085339590122e47cd810abad85929a0b0934ae0baecdf5234817f5", + "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2", "format": 1 }, { @@ -92,878 +92,864 @@ "format": 1 }, { - "name": "plugins/terminal", + "name": "plugins/doc_fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/terminal/ios.py", + "name": "plugins/doc_fragments/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8924640c75e1b992771d6b42d29a581ca03cdb594aa0cf3071b60aee9551f848", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/terminal/__init__.py", + "name": "plugins/doc_fragments/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf", "format": 1 }, { - "name": "plugins/inventory", + "name": "plugins/lookup", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/inventory/__init__.py", + "name": "plugins/lookup/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/cache", + "name": "plugins/action", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/cache/__init__.py", + "name": "plugins/action/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/cliconf/ios.py", + "name": "plugins/action/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c8e1266fc9979ffe143c1c97308ba48fac1a8b9a88ca2fbae116a52520dd6db", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/cliconf/__init__.py", + "name": "plugins/action/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/plugin_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/plugin_utils/__init__.py", + "name": "plugins/action/lldp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/modules", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_facts.py", + "name": "plugins/action/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "972575a88e6eaf128ecf1def334d75e696c872077ea91a5414a32dafb4866143", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_evpn_global.py", + "name": "plugins/action/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b39999ffe208c5d9c8486d1bbf1fb8403aeb12df591bb83f284cd4a36a8aef1", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_linkagg.py", + "name": "plugins/action/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "187e709f0befcb38f03ee1c255f87bb373f5d1cc6eedbb3aaa0b65d29d193da7", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_l3_interfaces.py", + "name": "plugins/action/vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4638e9583cab76097431b4f3d58906b5de755dd4251f831f85ad7b686d91f973", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_prefix_lists.py", + "name": "plugins/action/bgp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a5937aafcc9ffa0ea3bb0c118aafe6f51e599038092aac782e80470c17f2be54", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_bgp_global.py", + "name": "plugins/action/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a7ccab9fecf8b77b750367f9bb26f78d68116658d1e0df3f7a9222cc9ce2368", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_evpn_evi.py", + "name": "plugins/action/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "648b3f87f6eaa9d4c154175f4e1678ac4cce819db19e87bf3715deb1e0ae64f1", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lag_interfaces.py", + "name": "plugins/action/command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15ab6e5cb7cd7556ec0a828795d5eebc0e3a12779de558d8c95c5c519e52b47b", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lldp_global.py", + "name": "plugins/action/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6ed88f852a8fe1eee3d14965ba9700efcc11dfb4786169fa9f0ffff1888c54b", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_command.py", + "name": "plugins/action/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d472c553267cd83de3d89409d05556068511b522139903551605098c26e81b0a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/ios_ntp.py", + "name": "plugins/action/system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "60f03c439ea2646c81a9d78e4fa0b5a99fcabd51e3ec9056397d3397b9b50a13", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_vxlan_vtep.py", + "name": "plugins/action/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3817c3561c4521f0d75e464101d50b45872da612cc463ad1d6d99a1233b95d82", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_banner.py", + "name": "plugins/action/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3080e91ec01655a266e3052ce6b7d20f20a575adef570293e9b5d4c91e706010", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/__init__.py", + "name": "plugins/action/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_acls.py", + "name": "plugins/action/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d77e989734fcc228ba09fe0729353f598845030e5a450c6057106ece50a3ebb", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lacp.py", + "name": "plugins/action/linkagg.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c38d69e1f6cbf52fdd84449b019b337962afdd3685d38e8635bd80c79fc28d9", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_bgp_address_family.py", + "name": "plugins/action/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e3d38788590802b2c9007594d0b008532e9314bc44e8a8c17083c1f70c0a35e", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lldp.py", + "name": "plugins/action/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed7f699ea8b847870a2f99e9d42ecf55bb70cd2d1f38d39b65f6b35ea7bf7739", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_logging_global.py", + "name": "plugins/action/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74ba47a819e4473bdc366272680c4351f2a0cc8b95001ef437d7018011134e7c", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ping.py", + "name": "plugins/action/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "abd66507a7d8a768518d0925de79e6b81f8fea7a23f087177932df20f5702715", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ntp_global.py", + "name": "plugins/action/banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "76d59f676f660789f3ed3793b2b48672d240efe238a20f92c336515e1002b4b2", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ospfv3.py", + "name": "plugins/action/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "15b349ce09d6168c98525de1a9225f510909629e737c754412168ee5e1800e1a", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ospf_interfaces.py", + "name": "plugins/action/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59e0db107b7b050f2d6910f14301bc17d72432526d96dee97d62d99c58502e15", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_ospfv2.py", + "name": "plugins/action/user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "64ed9313605ffaaae2385dc9d4a2b41e566dc760d2e5c4a2bc5fa0aeb9357982", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_route_maps.py", + "name": "plugins/action/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8944dc9ce33fd98c154ac00a97ebf73fab242a3d42a11b0fda3a5b9a5556445", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_snmp_server.py", + "name": "plugins/action/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "816d1f4bcf90311e4402e74d4bb76aa5fd78326535b2bd4860bce1957b091c8a", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_bgp.py", + "name": "plugins/action/logging.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0db4f0011ef38cce8fe177deab111257d3012ab7e25d5cb5680a8d9b8640e2be", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_config.py", + "name": "plugins/action/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcac658cede985e299d5e1d0079309784b1886e61bf5e789e8721975eeca0a51", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_user.py", + "name": "plugins/action/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec8c31c038a8a573be22c6cc7781b18f51fc3c35a9990d81f7fc51e30db66a37", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lacp_interfaces.py", + "name": "plugins/action/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "16c553e3997af81f7fe41232b71f9548ab567a5430356e2904573441a1254ab5", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_acl_interfaces.py", + "name": "plugins/action/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba34b07e15d390595759f5bda5f78d022cf3bde78d960c3a944b29b4ac78df0b", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_lldp_interfaces.py", + "name": "plugins/action/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf57b49a9b78774f084d3bb6d1e6b3d8b69ab19c7f544e1c621dbcf75b0b740e", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_hostname.py", + "name": "plugins/action/config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bb285380781590a0c9712994169f032e2158e1a081c39ca587cf9b708835aea8", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_static_routes.py", + "name": "plugins/action/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "005f38e5c7349ba72fe3a68bc0c55f2f88a0ea8569f72265a69eeaa8a0709a66", + "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", "format": 1 }, { - "name": "plugins/modules/ios_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "dbc7c65001c2d571718846580485ff91cc1937dc7b8c621c4593e84b1dfe7e41", + "name": "plugins/cache", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/ios_l2_interfaces.py", + "name": "plugins/cache/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8aa17b7de5645ef7d089251107a7c479c0c33a6078c87e319a5e0612f448e05c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/ios_vrf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7d61b581c7b35b4c0ae9c56c2971fe32f9af84b86a84f01a91913d15fcb733c8", + "name": "plugins/inventory", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/ios_vlans.py", + "name": "plugins/inventory/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2343fe7113565914f6bc257a500e7d86a936969dfa86baee79f2eb4beebaaff3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/modules/ios_service.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e4d9a134d041cf48669cbdb6cde10dd2337a8f6a577c967d0db062fecb3eec33", + "name": "plugins/modules", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/modules/ios_system.py", + "name": "plugins/modules/ios_vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "04f36c07687618fd2cff763acdb88f9b1b4f600ca554d626abddff78d16887e0", + "chksum_sha256": "3897ab55eed7ce1de5b147dbafcc16005b8a3c0dd6139ef46f7406696153cd22", "format": 1 }, { - "name": "plugins/doc_fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_bgp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3b9b312d3fb290ad3b748f8ab433a074a9796d1f9ce95c0effe353656b16bee2", "format": 1 }, { - "name": "plugins/doc_fragments/ios.py", + "name": "plugins/modules/ios_lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "183557f42150c3888baca407c30a651bb6d0c70a06ac55f409b271323dfcbacf", + "chksum_sha256": "b6ed88f852a8fe1eee3d14965ba9700efcc11dfb4786169fa9f0ffff1888c54b", "format": 1 }, { - "name": "plugins/doc_fragments/__init__.py", + "name": "plugins/modules/ios_lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "bf57b49a9b78774f084d3bb6d1e6b3d8b69ab19c7f544e1c621dbcf75b0b740e", "format": 1 }, { - "name": "plugins/lookup", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_l2_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8aa17b7de5645ef7d089251107a7c479c0c33a6078c87e319a5e0612f448e05c", "format": 1 }, { - "name": "plugins/lookup/__init__.py", + "name": "plugins/modules/ios_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "bb285380781590a0c9712994169f032e2158e1a081c39ca587cf9b708835aea8", "format": 1 }, { - "name": "plugins/filter", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_lacp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5c38d69e1f6cbf52fdd84449b019b337962afdd3685d38e8635bd80c79fc28d9", "format": 1 }, { - "name": "plugins/filter/__init__.py", + "name": "plugins/modules/ios_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "972575a88e6eaf128ecf1def334d75e696c872077ea91a5414a32dafb4866143", "format": 1 }, { - "name": "plugins/module_utils", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_lldp.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ed7f699ea8b847870a2f99e9d42ecf55bb70cd2d1f38d39b65f6b35ea7bf7739", "format": 1 }, { - "name": "plugins/module_utils/__init__.py", + "name": "plugins/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_ospfv3.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "15b349ce09d6168c98525de1a9225f510909629e737c754412168ee5e1800e1a", "format": 1 }, { - "name": "plugins/module_utils/network/__init__.py", + "name": "plugins/modules/ios_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e4d9a134d041cf48669cbdb6cde10dd2337a8f6a577c967d0db062fecb3eec33", "format": 1 }, { - "name": "plugins/module_utils/network/ios", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8affa943f54d1729e00666e43580c3d03d936d67ea56dd001fb856108b2b65c8", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/modules/ios_config.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "bcac658cede985e299d5e1d0079309784b1886e61bf5e789e8721975eeca0a51", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/bgp_global.py", + "name": "plugins/modules/ios_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dca0cb13b6e26be815be0020643a86a88a7ce39cad897bdc7f369feb7ccbf614", + "chksum_sha256": "fd47cae1f8a8d041da43172d14cbd75bd5fb54419d8558186c823a75dc22e8b5", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/evpn_global.py", + "name": "plugins/modules/ios_snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "249fe0eba1589f0bdb2ba5510fa5e8f0b885e989121347301c41e44a108dfe2b", + "chksum_sha256": "816d1f4bcf90311e4402e74d4bb76aa5fd78326535b2bd4860bce1957b091c8a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/lag_interfaces.py", + "name": "plugins/modules/ios_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cde795fceb364b30850bb9c04ac589c84896800e1729ebe0c9a9c3478f4722b2", + "chksum_sha256": "d472c553267cd83de3d89409d05556068511b522139903551605098c26e81b0a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/interfaces.py", + "name": "plugins/modules/ios_acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01ee7704f1fbcefbe1c43dcf83c782817ccd2ae09d1fe9532d667b5bfcf962d1", + "chksum_sha256": "ba34b07e15d390595759f5bda5f78d022cf3bde78d960c3a944b29b4ac78df0b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/bgp_address_family.py", + "name": "plugins/modules/ios_linkagg.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "29e1cfe2d4c8064d04f53bdae1c971f631be6f0844a3ff5df9347aab1c6c0dff", + "chksum_sha256": "dff3a9d857515f74e56eebac1b59c9e8b45475e9cbd2d25ecbb9de73280baa68", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/static_routes.py", + "name": "plugins/modules/ios_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aee1c6a1aca4f66c407d9a805b12471d1ed27959ed486bf46b34569c7a30d79e", + "chksum_sha256": "9807470479f124d8529fe6d7b2b14f25941c7817b4bf11389f2d694288925861", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/hostname.py", + "name": "plugins/modules/ios_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dd7353433ed688982b69d5f12378ff56bb0b399f0734e27b1571a86a14384253", + "chksum_sha256": "cb8b637e1f752a56bde1835241d53a5cf12d02bed53a280cf052a46b44d314a8", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/vxlan_vtep.py", + "name": "plugins/modules/ios_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "982beb248da55ccc7ecf9fa011237ce35cdb9360467e8917d4ca599913ea2255", + "chksum_sha256": "3080e91ec01655a266e3052ce6b7d20f20a575adef570293e9b5d4c91e706010", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ntp_global.py", + "name": "plugins/modules/ios_vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b678c59980cd60b4ab5e3cc4911f1dead04603b229b1519d74ea69b94951906b", + "chksum_sha256": "f040be5c941c61ee4bb90bb467b456254b1775de48fbb99f157e61e05bf766ad", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/snmp_server.py", + "name": "plugins/modules/ios_ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4584df761d31b13f2375279763059612816a629e584c16a4572ab991df128f3b", + "chksum_sha256": "abd66507a7d8a768518d0925de79e6b81f8fea7a23f087177932df20f5702715", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/__init__.py", + "name": "plugins/modules/ios_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b77581c23e8dd35a0d9bdd448a3638ce38e9779e2a41f86f008739d85120fd92", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ospfv3.py", + "name": "plugins/modules/ios_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbd8f6a15c395b673de496acf55ac661dbf4911c6bf767b121a47240550ec2fb", + "chksum_sha256": "dbc7c65001c2d571718846580485ff91cc1937dc7b8c621c4593e84b1dfe7e41", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/service.py", + "name": "plugins/modules/ios_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a3a79e6c58e4de26c7d6e759b48befd4c79c541924c27ae6aad77f267e49aac", + "chksum_sha256": "04f36c07687618fd2cff763acdb88f9b1b4f600ca554d626abddff78d16887e0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/route_maps.py", + "name": "plugins/modules/ios_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b3ba655a290e50e5ace24b073656b5eb5aed5b1589c4e693ae5e38aca29ee941", + "chksum_sha256": "59e0db107b7b050f2d6910f14301bc17d72432526d96dee97d62d99c58502e15", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/l2_interfaces.py", + "name": "plugins/modules/ios_evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38538d11bfe3e802bebb0e784aacd68b06f83229e706087a9471713311e459fd", + "chksum_sha256": "0d7a613d4b97452d3866af5e913c5509a624d552a8e0c31029aeea9460799c6e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/acl_interfaces.py", + "name": "plugins/modules/ios_evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff8d18baa44b30871ea6d13392254549e24830173ed5d8184a221d1e6a069ba4", + "chksum_sha256": "eb607f361b27e065a8f659bbefdda3b313f1ea3d80394b328120847c2be6f2d5", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ospfv2.py", + "name": "plugins/modules/ios_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23b21c827433ed747a30839619719620c43d616420f4b39e3f9b07611b2da091", + "chksum_sha256": "a8944dc9ce33fd98c154ac00a97ebf73fab242a3d42a11b0fda3a5b9a5556445", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/acls.py", + "name": "plugins/modules/ios_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e77900337a8d62303dc9365f0974278f9111ccc1efe24a33dc491e826bdb13c2", + "chksum_sha256": "a5937aafcc9ffa0ea3bb0c118aafe6f51e599038092aac782e80470c17f2be54", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/l3_interfaces.py", + "name": "plugins/modules/ios_ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ab404b96774116937c242b64b9e72fef658603adbfb92ac51c70561e8513eca", + "chksum_sha256": "76d59f676f660789f3ed3793b2b48672d240efe238a20f92c336515e1002b4b2", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ping.py", + "name": "plugins/modules/ios_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b1f3a2280507d4b378e65de305f7c0b9512106ea50adb00615cb834366540087", + "chksum_sha256": "74ba47a819e4473bdc366272680c4351f2a0cc8b95001ef437d7018011134e7c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/ospf_interfaces.py", + "name": "plugins/modules/ios_static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6e8876d90d0af81d076a4a10aca05c03ee0502b58e6ab3dc20e89dad38dda87", + "chksum_sha256": "005f38e5c7349ba72fe3a68bc0c55f2f88a0ea8569f72265a69eeaa8a0709a66", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/logging_global.py", + "name": "plugins/modules/ios_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "841f75df76900bfdcae91e9d7e44bfaf394e0d75b2a8d3e38e8e0b8e62997a33", + "chksum_sha256": "16c553e3997af81f7fe41232b71f9548ab567a5430356e2904573441a1254ab5", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/prefix_lists.py", + "name": "plugins/modules/ios_ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c88d89b37339555efa1ad535ff0850e6624177208edc9e32078df5b79ea07ce", + "chksum_sha256": "64ed9313605ffaaae2385dc9d4a2b41e566dc760d2e5c4a2bc5fa0aeb9357982", "format": 1 }, { - "name": "plugins/module_utils/network/ios/rm_templates/evpn_evi.py", + "name": "plugins/modules/ios_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c224d0295c96f2645cd41d4fe3dff84d527e48c28a9122f0c35374045147d0c1", + "chksum_sha256": "15ab6e5cb7cd7556ec0a828795d5eebc0e3a12779de558d8c95c5c519e52b47b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers", + "name": "plugins/module_utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/module.py", + "name": "plugins/module_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41e79a9b0ff1082f7cfd7356a0638c4c84ad9df056b5298a4a68a6afd663e573", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli", + "name": "plugins/module_utils/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/__init__.py", + "name": "plugins/module_utils/network/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config", + "name": "plugins/module_utils/network/ios", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/utils", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/base.py", + "name": "plugins/module_utils/network/ios/utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ba52ed9fa57f47249591b68367d04f0d70d86df7b651be27d578408924547687", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/__init__.py", + "name": "plugins/module_utils/network/ios/utils/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "859374075d189f310c3ec91517f81e97111b6aba318644cd5769c889391e2b5f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp", + "name": "plugins/module_utils/network/ios/rm_templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py", + "name": "plugins/module_utils/network/ios/rm_templates/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05f60415ef9fc10d6349d9a21a2bd7ae64059cad21081ba3c1b619d5a67ecf62", + "chksum_sha256": "38538d11bfe3e802bebb0e784aacd68b06f83229e706087a9471713311e459fd", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "dd7353433ed688982b69d5f12378ff56bb0b399f0734e27b1571a86a14384253", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/process.py", + "name": "plugins/module_utils/network/ios/rm_templates/evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c67a39dd2dfe3459a294045e83843d6169452bb20964249c2516f0b55025ddb", + "chksum_sha256": "249fe0eba1589f0bdb2ba5510fa5e8f0b885e989121347301c41e44a108dfe2b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py", + "name": "plugins/module_utils/network/ios/rm_templates/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31ecceba4cfd7b5c5e9ac4508fb23295420cf8eec49edf7ccb194002e73245fa", + "chksum_sha256": "ff8d18baa44b30871ea6d13392254549e24830173ed5d8184a221d1e6a069ba4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/providers.py", + "name": "plugins/module_utils/network/ios/rm_templates/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "282be606081a1895bce9320c131e547a2567b1f97071a21489f244bb066f547c", + "chksum_sha256": "6f73dd148de05082a9fe6bda1ee98ed978ff3eb784fab8e2f4d39f8b4be5efdf", "format": 1 }, { - "name": "plugins/module_utils/network/ios/providers/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cde795fceb364b30850bb9c04ac589c84896800e1729ebe0c9a9c3478f4722b2", "format": 1 }, { - "name": "plugins/module_utils/network/ios/ios.py", + "name": "plugins/module_utils/network/ios/rm_templates/ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c8f19b937a299add5e06e503feb5671c9233948f7eac8f73059b4eed31d00d0", + "chksum_sha256": "b678c59980cd60b4ab5e3cc4911f1dead04603b229b1519d74ea69b94951906b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/snmp_server.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2242ad92c639b8ba94555ceaf0a8b03e6474b118dd03a745a07a1d79cd10f8f2", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_address_family", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/ospfv2.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7e020c96b0f338987d398ddb205e20b6bc9984ee2f9aa2fb1d91291714158e1a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/ios/rm_templates/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d02fd4c43363ca7df4e9e9879e4cea873334bc4ce10f86e7bd7ae0df041fa6a6", + "chksum_sha256": "dbd8f6a15c395b673de496acf55ac661dbf4911c6bf767b121a47240550ec2fb", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e63de89c1832db959e7cdddda37baf350dee719ab1a702cf9f039cf756f99061", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/logging_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "841f75df76900bfdcae91e9d7e44bfaf394e0d75b2a8d3e38e8e0b8e62997a33", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/static_routes/static_routes.py", + "name": "plugins/module_utils/network/ios/rm_templates/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4219bf270bcc7f6c374128d1c721ade8c3f1622da5a7377ca6115973ab0b183b", + "chksum_sha256": "4a3a79e6c58e4de26c7d6e759b48befd4c79c541924c27ae6aad77f267e49aac", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/static_routes/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f6e8876d90d0af81d076a4a10aca05c03ee0502b58e6ab3dc20e89dad38dda87", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/prefix_lists", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/evpn_evi.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c224d0295c96f2645cd41d4fe3dff84d527e48c28a9122f0c35374045147d0c1", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "62bcf00cf29f836f2307ef4fa5ca20fd389bec0ab825c54e98f1246be1df9e8c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/ios/rm_templates/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb75d959c5be987f0bca13bda393af91ce11f97885fa64a22a6f1e5df4bf0bf8", + "chksum_sha256": "067d135760cdcf59985c9479e468232d9699649daf3354cf328660acd36f97a0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vxlan_vtep", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/vxlan_vtep.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "982beb248da55ccc7ecf9fa011237ce35cdb9360467e8917d4ca599913ea2255", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py", + "name": "plugins/module_utils/network/ios/rm_templates/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe7e6cd2e81720a21b23cd45a7893776528e66f9a236713e8fb97239966d8c4f", + "chksum_sha256": "cb9300a8408af5162e90bf6454d16cc1a1dea83ff67585ad2f0394990ac19e81", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b1f3a2280507d4b378e65de305f7c0b9512106ea50adb00615cb834366540087", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/hostname", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/l3_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5d2cd6f3c8e8a4c1b877d949e5868f51a9909011894e949ef729428bf75e1bdb", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/hostname/hostname.py", + "name": "plugins/module_utils/network/ios/rm_templates/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b66f9bbe31ee1de7a4acefb0fe020180477a46c7ed4787955bf5f11a714e9b3e", + "chksum_sha256": "5321943611897741c7d43b18f8540a1d9cf127dd62d38622b0b3d9611423e129", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/hostname/__init__.py", + "name": "plugins/module_utils/network/ios/rm_templates/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "aee1c6a1aca4f66c407d9a805b12471d1ed27959ed486bf46b34569c7a30d79e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "plugins/module_utils/network/ios/rm_templates/vlans.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8c05a82ce71ca9ebeb5df66b257d7cdbd1b5da644c9e6c95abc77296e50a93f4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0c0f5296b417c1eba895f8c8843cc99411f4a96fa560243ef92bf166776b3df3", + "name": "plugins/module_utils/network/ios/facts", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { @@ -988,304 +974,311 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv2", + "name": "plugins/module_utils/network/ios/facts/facts.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3950613aa65fc8444a44e4f02726d8f211c5e4564f179e4dae38b9dd7d16d443", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/facts/vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv2/__init__.py", + "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/ios/facts/vxlan_vtep/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "113b67eaa8aa54c14a3044bef9bc27b185d3ef024cb4f8c17715a2b9a9837137", + "chksum_sha256": "fe7e6cd2e81720a21b23cd45a7893776528e66f9a236713e8fb97239966d8c4f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/logging_global", + "name": "plugins/module_utils/network/ios/facts/legacy", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/logging_global/__init__.py", + "name": "plugins/module_utils/network/ios/facts/legacy/base.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "10afffae4140e201461d7fa9554cc10fb1bda3c55adb88b61df1430b0369ace6", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/logging_global/logging_global.py", + "name": "plugins/module_utils/network/ios/facts/legacy/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "70ccc9337540a7335478531f5d86a6a8e7769693ca56178dc405484c4954c99a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv3", + "name": "plugins/module_utils/network/ios/facts/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv3/__init__.py", + "name": "plugins/module_utils/network/ios/facts/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/ios/facts/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ada439ee84e0d1a2ab7301e2e54e82160f60e969a79a2d004ff0e834c61c1cb8", + "chksum_sha256": "113b67eaa8aa54c14a3044bef9bc27b185d3ef024cb4f8c17715a2b9a9837137", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/legacy", + "name": "plugins/module_utils/network/ios/facts/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/legacy/base.py", + "name": "plugins/module_utils/network/ios/facts/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10afffae4140e201461d7fa9554cc10fb1bda3c55adb88b61df1430b0369ace6", + "chksum_sha256": "2c67945d2e056b94dd9d7b778d3f7dc2881ebb00192882d846db863701f612fe", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/legacy/__init__.py", + "name": "plugins/module_utils/network/ios/facts/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l2_interfaces", + "name": "plugins/module_utils/network/ios/facts/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8e711de61f5a2efc9b7c93a3f591fbcbbe96cccdfd8bfac0e62346d281b58537", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "26ecb4ba4028670a5fdf7a70fa0b551a5a068db5730b721815659e618e1ec2de", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospf_interfaces", + "name": "plugins/module_utils/network/ios/facts/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6246168ca839894fb46959c82ac239133251c370565901795cf361d9e3c46e7", + "chksum_sha256": "c7f2359e2128b9e5591db197d33fbcf002f07eb23c078dbfe9af3fc3cbc18a0f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/route_maps", + "name": "plugins/module_utils/network/ios/facts/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/route_maps/__init__.py", + "name": "plugins/module_utils/network/ios/facts/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "26ecb4ba4028670a5fdf7a70fa0b551a5a068db5730b721815659e618e1ec2de", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/route_maps/route_maps.py", + "name": "plugins/module_utils/network/ios/facts/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7f2359e2128b9e5591db197d33fbcf002f07eb23c078dbfe9af3fc3cbc18a0f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acl_interfaces", + "name": "plugins/module_utils/network/ios/facts/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "96b35fdb9298af93724292ddb020ef441a25cbb787af940f806a3bd7417bf1d7", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e711de61f5a2efc9b7c93a3f591fbcbbe96cccdfd8bfac0e62346d281b58537", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_global", + "name": "plugins/module_utils/network/ios/facts/evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_global/__init__.py", + "name": "plugins/module_utils/network/ios/facts/evpn_evi/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lldp_global/lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "392c897fb49431138840ba657137fe5b7a0bc77aec11eab9daf3ab79c7002c36", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/facts/__init__.py", + "name": "plugins/module_utils/network/ios/facts/evpn_evi/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7a7116deaeadef9990039d9e3a307d8e654e82105bfba539fa5d9d2998451272", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/snmp_server", + "name": "plugins/module_utils/network/ios/facts/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/ios/facts/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1a7f3abe73e700e987574e96c8f8d3631473cdd9254ff9dcbfa843fe99ed9742", + "chksum_sha256": "b66f9bbe31ee1de7a4acefb0fe020180477a46c7ed4787955bf5f11a714e9b3e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/snmp_server/__init__.py", + "name": "plugins/module_utils/network/ios/facts/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lacp_interfaces", + "name": "plugins/module_utils/network/ios/facts/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21e764a5334f2bf9f4f9f642677acd7c333f65fac11664bbede8e37c4bcae070", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c0f5296b417c1eba895f8c8843cc99411f4a96fa560243ef92bf166776b3df3", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/evpn_evi", + "name": "plugins/module_utils/network/ios/facts/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/evpn_evi/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/evpn_evi/evpn_evi.py", + "name": "plugins/module_utils/network/ios/facts/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7a7116deaeadef9990039d9e3a307d8e654e82105bfba539fa5d9d2998451272", + "chksum_sha256": "392c897fb49431138840ba657137fe5b7a0bc77aec11eab9daf3ab79c7002c36", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/service", + "name": "plugins/module_utils/network/ios/facts/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/service/__init__.py", + "name": "plugins/module_utils/network/ios/facts/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/service/service.py", + "name": "plugins/module_utils/network/ios/facts/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "efc3f3c00bcf17a9b56cd293e545cc6d38c096d0eebe1e72dfa00bc83bbb3846", + "chksum_sha256": "1a7f3abe73e700e987574e96c8f8d3631473cdd9254ff9dcbfa843fe99ed9742", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acls", + "name": "plugins/module_utils/network/ios/facts/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acls/__init__.py", + "name": "plugins/module_utils/network/ios/facts/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/acls/acls.py", + "name": "plugins/module_utils/network/ios/facts/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fe000519557ac7521aab1d74348c9374a90d8ddce5806e683637751d3c6b5048", + "chksum_sha256": "cb75d959c5be987f0bca13bda393af91ce11f97885fa64a22a6f1e5df4bf0bf8", "format": 1 }, { @@ -1331,374 +1324,353 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lag_interfaces", + "name": "plugins/module_utils/network/ios/facts/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96b35fdb9298af93724292ddb020ef441a25cbb787af940f806a3bd7417bf1d7", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "59320bb4d3a93f8477f0b5e6a3931304863aa5d6484cd0b2b867673b04c09037", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vlans", + "name": "plugins/module_utils/network/ios/facts/service", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vlans/vlans.py", + "name": "plugins/module_utils/network/ios/facts/service/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "547db84d096fb43a0552766c18b1fe9464037591f9ac948497d6816ec88b2b78", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/vlans/__init__.py", + "name": "plugins/module_utils/network/ios/facts/service/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "efc3f3c00bcf17a9b56cd293e545cc6d38c096d0eebe1e72dfa00bc83bbb3846", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/interfaces", + "name": "plugins/module_utils/network/ios/facts/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/interfaces/interfaces.py", + "name": "plugins/module_utils/network/ios/facts/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2c67945d2e056b94dd9d7b778d3f7dc2881ebb00192882d846db863701f612fe", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3558df7ede6d65335368161e22f5048625681c70c47ae090ea011cd7fdd4bc68", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l3_interfaces", + "name": "plugins/module_utils/network/ios/facts/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6caa00263da8ce34f349a42e997a0ddd63954a3fe92e0e2499e9ad489a77f195", + "chksum_sha256": "2c5b22c31105d761f61e72d0ce69751647260fe17604eb8acb6a05022ab06d5a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_global", + "name": "plugins/module_utils/network/ios/facts/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "97e15a6d847dec5b142a7aa1e49c23c3f8d23b2cb966475ca2f4db5b998ce245", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/facts/bgp_global/__init__.py", + "name": "plugins/module_utils/network/ios/facts/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/facts/facts.py", + "name": "plugins/module_utils/network/ios/facts/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3583f4fe6da74bc42f7c9406a5e51c4d4aa3000183ad49b826bfd802f0c0ed52", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "4219bf270bcc7f6c374128d1c721ade8c3f1622da5a7377ca6115973ab0b183b", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_address_family", + "name": "plugins/module_utils/network/ios/facts/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/ios/facts/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "897b1f1139b38bc098a6d8cf92b47ff1d3145596f6e7b2cee75d191a96ac1283", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/ios/facts/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "70ccc9337540a7335478531f5d86a6a8e7769693ca56178dc405484c4954c99a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/static_routes", + "name": "plugins/module_utils/network/ios/facts/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/static_routes/static_routes.py", + "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b93019ca688aa2b3c9ffaed228a4d8c01258b5034d588be516deef2e37603e4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/static_routes/__init__.py", + "name": "plugins/module_utils/network/ios/facts/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c6246168ca839894fb46959c82ac239133251c370565901795cf361d9e3c46e7", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/prefix_lists", + "name": "plugins/module_utils/network/ios/facts/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/ios/facts/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/ios/facts/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c45218163937496cae4e1594682a2a34b9e4933933ed5aba4c5115e34c79babb", + "chksum_sha256": "d02fd4c43363ca7df4e9e9879e4cea873334bc4ce10f86e7bd7ae0df041fa6a6", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep", + "name": "plugins/module_utils/network/ios/facts/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/vxlan_vtep.py", + "name": "plugins/module_utils/network/ios/facts/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d173f9688ac144daa92782712e98c919fdf2bf16cbc67df8901f24d49271329f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/__init__.py", + "name": "plugins/module_utils/network/ios/facts/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "db60ef97e24dd8cae240c045a31e378b0c4ef70f88437d6a5ec50db3bcdb009c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/hostname", + "name": "plugins/module_utils/network/ios/facts/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/hostname/hostname.py", + "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c54693851f2ac212f5f30d3ac4062ce8c11c8ec8cf464ac95620c12b685d081", + "chksum_sha256": "21e764a5334f2bf9f4f9f642677acd7c333f65fac11664bbede8e37c4bcae070", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/hostname/__init__.py", + "name": "plugins/module_utils/network/ios/facts/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces", + "name": "plugins/module_utils/network/ios/facts/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/facts/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/ios/facts/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c27fc5f34d7ac72f7e07e97409531470bb55a0e552bfd989a5d9b69f1dd9ac74", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lacp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ada439ee84e0d1a2ab7301e2e54e82160f60e969a79a2d004ff0e834c61c1cb8", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lacp/lacp.py", + "name": "plugins/module_utils/network/ios/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89db25fde82eb1ec3f45c141805d2f47ececbd6c2af2e2550c021935065c1ed7", + "chksum_sha256": "8c8f19b937a299add5e06e503feb5671c9233948f7eac8f73059b4eed31d00d0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lacp/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "name": "plugins/module_utils/network/ios/argspec", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv2", + "name": "plugins/module_utils/network/ios/argspec/lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv2/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "89db25fde82eb1ec3f45c141805d2f47ececbd6c2af2e2550c021935065c1ed7", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/ios/argspec/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcedd4871d07466c1151ca66b038663800525dcd467928d46020dc3341d2b9ad", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/logging_global", + "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/logging_global/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/logging_global/logging_global.py", + "name": "plugins/module_utils/network/ios/argspec/vxlan_vtep/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05483c5a5defc62aae5f5f4413d7a0eeaf5949abe12673e879368fc628ff9784", + "chksum_sha256": "d173f9688ac144daa92782712e98c919fdf2bf16cbc67df8901f24d49271329f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv3", + "name": "plugins/module_utils/network/ios/argspec/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv3/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "966dc855301946bcffa53d43f3bc2a86835131c35ad14a48422f355379bc7738", + "chksum_sha256": "dcedd4871d07466c1151ca66b038663800525dcd467928d46020dc3341d2b9ad", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l2_interfaces", + "name": "plugins/module_utils/network/ios/argspec/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "a393a0e39a619c48351e257131f34e581756ea196feaa0579e06ca2ab980e4a1", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5457f6be5b2efdc9cd5d0c33500fdcc8cd857c299441ea5cfad0325c0960c57e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces", + "name": "plugins/module_utils/network/ios/argspec/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "4bd638f26736e99f9344760db34a47fa9a0e05132a6ae6e8ee45e01f81888064", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c91be7d7581d9aae2657187c3e4e0233d0b86e7886d174a1803df99fafcc5be", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { @@ -1723,199 +1695,178 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acl_interfaces", + "name": "plugins/module_utils/network/ios/argspec/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5457f6be5b2efdc9cd5d0c33500fdcc8cd857c299441ea5cfad0325c0960c57e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bd638f26736e99f9344760db34a47fa9a0e05132a6ae6e8ee45e01f81888064", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_global", + "name": "plugins/module_utils/network/ios/argspec/lag_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lldp_global/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4053cf17588d3f40e96123a5a0adbd48b9aad14450a70a612b6c7244b137c189", + "chksum_sha256": "d74d58b5cf7ad1ddb524b74f220ae5af7314b646139fa2bda4d9126c185e43e0", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/snmp_server", + "name": "plugins/module_utils/network/ios/argspec/evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/ios/argspec/evpn_evi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6edeffac28f4315f61fc610de0ca688fcbbaa224fce0e5fecd8084bb1a7bf8eb", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/snmp_server/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/evpn_evi/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "e657aa784d67f251088a2cb86faa901fd53513c936d887aa4045c9d8026f5ace", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ping", + "name": "plugins/module_utils/network/ios/argspec/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ping/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "1c54693851f2ac212f5f30d3ac4062ce8c11c8ec8cf464ac95620c12b685d081", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/ping/ping.py", + "name": "plugins/module_utils/network/ios/argspec/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8280adf6fec29f9ded0d547a41cff6b2c822d1a53a56008e7fa890397dd569f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/facts", + "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/facts/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/facts/facts.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4d3340a5018ae4c06ca1d4fed2b7e307feaba807408f949b4d6b89ef2ff7408f", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_interfaces/lldp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "66630ccb587e57b78f8b61fbf6e499f0ffdf5a886cd6afa119dbe4552b812942", + "chksum_sha256": "c27fc5f34d7ac72f7e07e97409531470bb55a0e552bfd989a5d9b69f1dd9ac74", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/evpn_evi", + "name": "plugins/module_utils/network/ios/argspec/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/evpn_evi/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/evpn_evi/evpn_evi.py", + "name": "plugins/module_utils/network/ios/argspec/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e657aa784d67f251088a2cb86faa901fd53513c936d887aa4045c9d8026f5ace", + "chksum_sha256": "4053cf17588d3f40e96123a5a0adbd48b9aad14450a70a612b6c7244b137c189", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/service", + "name": "plugins/module_utils/network/ios/argspec/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/service/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/service/service.py", + "name": "plugins/module_utils/network/ios/argspec/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "82d5f1b9d574c4753c3e7acee9c3ec0da539fdd67257f44e2ddebe976b9990a3", + "chksum_sha256": "6edeffac28f4315f61fc610de0ca688fcbbaa224fce0e5fecd8084bb1a7bf8eb", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acls", + "name": "plugins/module_utils/network/ios/argspec/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acls/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/acls/acls.py", + "name": "plugins/module_utils/network/ios/argspec/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aee0703ab5ab05bc8845c32332b051ef94361f2256b01f9bb08efa7c1748256a", + "chksum_sha256": "c45218163937496cae4e1594682a2a34b9e4933933ed5aba4c5115e34c79babb", "format": 1 }, { @@ -1961,563 +1912,584 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lag_interfaces", + "name": "plugins/module_utils/network/ios/argspec/facts", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/facts/facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d74d58b5cf7ad1ddb524b74f220ae5af7314b646139fa2bda4d9126c185e43e0", + "chksum_sha256": "4d3340a5018ae4c06ca1d4fed2b7e307feaba807408f949b4d6b89ef2ff7408f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/facts/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vlans", + "name": "plugins/module_utils/network/ios/argspec/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vlans/vlans.py", + "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcb614781b29a9fd793ffd5eb53a4b7feb0a93db84c2ca40e53fcb828192a6e4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/vlans/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8d9df43341b3bd98923cd796466dad9677bb2a2f8a6bf2e3a772244d0532767e", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/interfaces", + "name": "plugins/module_utils/network/ios/argspec/service", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/interfaces/interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/service/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a393a0e39a619c48351e257131f34e581756ea196feaa0579e06ca2ab980e4a1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/service/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "82d5f1b9d574c4753c3e7acee9c3ec0da539fdd67257f44e2ddebe976b9990a3", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l3_interfaces", + "name": "plugins/module_utils/network/ios/argspec/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fa202b891eca20e325fd07cfe7bb8c8b62ae8c1c0f90986fc2d11ebd60ee4116", + "chksum_sha256": "aee0703ab5ab05bc8845c32332b051ef94361f2256b01f9bb08efa7c1748256a", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_global", + "name": "plugins/module_utils/network/ios/argspec/ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/ios/argspec/ping/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cfd5f037bbe2a36ecaa598d0510c195fcec9100b82ca6fa6a5cd0a5051be051", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/argspec/bgp_global/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ping/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "plugins/module_utils/network/ios/config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "f8280adf6fec29f9ded0d547a41cff6b2c822d1a53a56008e7fa890397dd569f", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_address_family", + "name": "plugins/module_utils/network/ios/argspec/bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "460ceeee40e7598109073d42741b0dffe67fe70c66a325e6c1fb0cfd7c509375", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_address_family/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "764927615985c9f0e7ef1f523a1eeade921a44f59e591cc189ce92ffd0966576", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/static_routes", + "name": "plugins/module_utils/network/ios/argspec/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/static_routes/static_routes.py", + "name": "plugins/module_utils/network/ios/argspec/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5120bfb8491af8a7eba0fe9aa34aed7584b68f52c893e1503a09c4553f09ab53", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/static_routes/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5b93019ca688aa2b3c9ffaed228a4d8c01258b5034d588be516deef2e37603e4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/prefix_lists", + "name": "plugins/module_utils/network/ios/argspec/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/prefix_lists/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py", + "name": "plugins/module_utils/network/ios/argspec/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cf110869b334a0434d5455afb0f908ab7791e2826f3cb86786cf6b61d493f3fe", + "chksum_sha256": "05483c5a5defc62aae5f5f4413d7a0eeaf5949abe12673e879368fc628ff9784", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vxlan_vtep", + "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py", + "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "207545a5f0ceff4d0b5263f455bca714143347f279555c7669d470e63745b76d", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vxlan_vtep/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "7c91be7d7581d9aae2657187c3e4e0233d0b86e7886d174a1803df99fafcc5be", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/hostname", + "name": "plugins/module_utils/network/ios/argspec/bgp_address_family", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/hostname/hostname.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2a3ee876a751592ce69707eb7d89fe013d8659752a50246b6b85b209f0afa4a4", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/hostname/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "897b1f1139b38bc098a6d8cf92b47ff1d3145596f6e7b2cee75d191a96ac1283", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_interfaces", + "name": "plugins/module_utils/network/ios/argspec/vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_interfaces/lldp_interfaces.py", + "name": "plugins/module_utils/network/ios/argspec/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3949fb9c8b9448e84fce989aaec57be482668c7920451aea2423d725bbe0987", + "chksum_sha256": "a3383e378f7dd6d8cb0016e37921ac12301eb9e6866275d17defca986bf89035", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp", + "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp/lacp.py", + "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "300ba5cb0ef7e095c22f44d5f6b97949745d772edd1da67d8bb258e9da2a3c81", + "chksum_sha256": "66630ccb587e57b78f8b61fbf6e499f0ffdf5a886cd6afa119dbe4552b812942", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv2", + "name": "plugins/module_utils/network/ios/argspec/ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv2/__init__.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv2/ospfv2.py", + "name": "plugins/module_utils/network/ios/argspec/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bddbd16a2f3a16949e7d6d68aeae72c33916badfc79cd03549d5f8d7b7063daa", + "chksum_sha256": "966dc855301946bcffa53d43f3bc2a86835131c35ad14a48422f355379bc7738", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/logging_global", + "name": "plugins/module_utils/network/ios/config", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/logging_global/__init__.py", + "name": "plugins/module_utils/network/ios/config/lacp", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/lacp/lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "300ba5cb0ef7e095c22f44d5f6b97949745d772edd1da67d8bb258e9da2a3c81", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/logging_global/logging_global.py", + "name": "plugins/module_utils/network/ios/config/lacp/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e3cc535a16266ea929afad7724c40519bc119627f8312411fedea16ab1a624f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv3", + "name": "plugins/module_utils/network/ios/config/vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv3/__init__.py", + "name": "plugins/module_utils/network/ios/config/vxlan_vtep/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospfv3/ospfv3.py", + "name": "plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "736eb6daa9c808d54ce49fe1d90dde283856c61fbe5e6f7e13553c955ca4ad76", + "chksum_sha256": "207545a5f0ceff4d0b5263f455bca714143347f279555c7669d470e63745b76d", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l2_interfaces", + "name": "plugins/module_utils/network/ios/config/ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l2_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/ospfv2/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", + "name": "plugins/module_utils/network/ios/config/ospfv2/ospfv2.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d7deaadebc8d74f00864d4d87666c974297fa01637522c6a5438193953dfdab", + "chksum_sha256": "bddbd16a2f3a16949e7d6d68aeae72c33916badfc79cd03549d5f8d7b7063daa", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospf_interfaces", + "name": "plugins/module_utils/network/ios/config/interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospf_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/interfaces/interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d76972dfae66d04dadb152c4f023e58aaef97df0c1ae88e33bdc3d7cf0be2b45", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py", + "name": "plugins/module_utils/network/ios/config/interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "383eeb77e1dfebff8ea69cad713d8e3f3468e91a07cc57de5ebbf4bdc1aa75d7", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/route_maps", + "name": "plugins/module_utils/network/ios/config/acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/route_maps/__init__.py", + "name": "plugins/module_utils/network/ios/config/acl_interfaces/acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "c703e02ad4dce33a34ba9c3400cf40c69681fd582d0e58e50abd50a416c4d638", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/route_maps/route_maps.py", + "name": "plugins/module_utils/network/ios/config/acl_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1b3a698c940c2092d72f35fc6839e5f5a91bff84f34ebbcb492f7f89e3ff9b1", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acl_interfaces", + "name": "plugins/module_utils/network/ios/config/route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acl_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/route_maps/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acl_interfaces/acl_interfaces.py", + "name": "plugins/module_utils/network/ios/config/route_maps/route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c703e02ad4dce33a34ba9c3400cf40c69681fd582d0e58e50abd50a416c4d638", + "chksum_sha256": "371c1bf37a31ec94b5cda763d46013c978403a88cbfd901baec4e05e1644a724", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_global", + "name": "plugins/module_utils/network/ios/config/l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_global/__init__.py", + "name": "plugins/module_utils/network/ios/config/l2_interfaces/l2_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3d7deaadebc8d74f00864d4d87666c974297fa01637522c6a5438193953dfdab", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/l2_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lldp_global/lldp_global.py", + "name": "plugins/module_utils/network/ios/config/lag_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/lag_interfaces/lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e138aaf2b9b9eb6f546d25f0957bec353342b61f8047f97f7e882c71e1422e9", + "chksum_sha256": "295679089484f01af9517b998fb2e0caf5d810436bcf8e40e261a309b81b5865", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/__init__.py", + "name": "plugins/module_utils/network/ios/config/lag_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/snmp_server", + "name": "plugins/module_utils/network/ios/config/evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/snmp_server/snmp_server.py", + "name": "plugins/module_utils/network/ios/config/evpn_evi/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78f688254f56593bdbf0e8a42f53f99e14a14ba3f0d010feb0d3363269691996", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/snmp_server/__init__.py", + "name": "plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "534f88e839f73905c4eba1522537b7ae4b1fa6352ff1b3ae994d98c7b9b2a544", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ping", + "name": "plugins/module_utils/network/ios/config/hostname", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ping/__init__.py", + "name": "plugins/module_utils/network/ios/config/hostname/hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2a3ee876a751592ce69707eb7d89fe013d8659752a50246b6b85b209f0afa4a4", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/ping/ping.py", + "name": "plugins/module_utils/network/ios/config/hostname/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59aaa34239c2ffb3176d64799286da43cd062d2b4fc22893990bcf03c9103961", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp_interfaces", + "name": "plugins/module_utils/network/ios/config/lldp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp_interfaces/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/config/lldp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dbc626e83c3d4ce8c8aa42ee8903738f6ac2b1e16e8cda34dba4eebfdaebc01a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lacp_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/lldp_interfaces/lldp_interfaces.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d3949fb9c8b9448e84fce989aaec57be482668c7920451aea2423d725bbe0987", + "format": 1 + }, + { + "name": "plugins/module_utils/network/ios/config/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/evpn_evi", + "name": "plugins/module_utils/network/ios/config/lldp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/evpn_evi/__init__.py", + "name": "plugins/module_utils/network/ios/config/lldp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py", + "name": "plugins/module_utils/network/ios/config/lldp_global/lldp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "534f88e839f73905c4eba1522537b7ae4b1fa6352ff1b3ae994d98c7b9b2a544", + "chksum_sha256": "5e138aaf2b9b9eb6f546d25f0957bec353342b61f8047f97f7e882c71e1422e9", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/service", + "name": "plugins/module_utils/network/ios/config/snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/service/__init__.py", + "name": "plugins/module_utils/network/ios/config/snmp_server/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/service/service.py", + "name": "plugins/module_utils/network/ios/config/snmp_server/snmp_server.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2e81e0457003ea7380ead5e8550544b20ed8d05bdb2e4ced4a21d99c7319c345", + "chksum_sha256": "addd5b7ee358b6faefebf98793f270f21c2584114f2066d08743add965dc5f6c", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acls", + "name": "plugins/module_utils/network/ios/config/prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acls/__init__.py", + "name": "plugins/module_utils/network/ios/config/prefix_lists/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/acls/acls.py", + "name": "plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41b94b7f5977a81c90a558ef1e7e80cbeccf17cff3068c19fc3af31612c25921", + "chksum_sha256": "cf110869b334a0434d5455afb0f908ab7791e2826f3cb86786cf6b61d493f3fe", "format": 1 }, { @@ -2563,87 +2535,87 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lag_interfaces", + "name": "plugins/module_utils/network/ios/config/l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lag_interfaces/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/config/l3_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "295679089484f01af9517b998fb2e0caf5d810436bcf8e40e261a309b81b5865", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/lag_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9c8b711012e2b25b8a2ecdc0d10581981ca1e99d0910cc70344091a1f2386780", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vlans", + "name": "plugins/module_utils/network/ios/config/service", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vlans/vlans.py", + "name": "plugins/module_utils/network/ios/config/service/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fa9b1e49d5701c3308565b55f231299f7a6d986f4c8698c1b2d7d7d6b807476", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/vlans/__init__.py", + "name": "plugins/module_utils/network/ios/config/service/service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "2e81e0457003ea7380ead5e8550544b20ed8d05bdb2e4ced4a21d99c7319c345", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/interfaces", + "name": "plugins/module_utils/network/ios/config/acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/interfaces/interfaces.py", + "name": "plugins/module_utils/network/ios/config/acls/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d76972dfae66d04dadb152c4f023e58aaef97df0c1ae88e33bdc3d7cf0be2b45", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/acls/acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "8c7c3550d9f5bc131536a6b86f51a50f663b00321d6e1ee4e54d7d8e43ea4601", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l3_interfaces", + "name": "plugins/module_utils/network/ios/config/ping", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l3_interfaces/__init__.py", + "name": "plugins/module_utils/network/ios/config/ping/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py", + "name": "plugins/module_utils/network/ios/config/ping/ping.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80d5e6e948da92d2ed41df019bc761282b0d9220c25c53c7fd4e6efa7c30281a", + "chksum_sha256": "59aaa34239c2ffb3176d64799286da43cd062d2b4fc22893990bcf03c9103961", "format": 1 }, { @@ -2654,3027 +2626,2740 @@ "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_global/bgp_global.py", + "name": "plugins/module_utils/network/ios/config/bgp_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab439c9625cb093beca2e87390a97baa4ecd7be4c483e6c4ad15158b19e04bfa", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/config/bgp_global/__init__.py", + "name": "plugins/module_utils/network/ios/config/bgp_global/bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ce94cfe092d61a9de61960b016d90eb10869f3621c8d835f4ad5f9b03b3afeaa", "format": 1 }, { - "name": "plugins/module_utils/network/ios/utils", + "name": "plugins/module_utils/network/ios/config/static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/module_utils/network/ios/utils/__init__.py", + "name": "plugins/module_utils/network/ios/config/static_routes/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/module_utils/network/ios/utils/utils.py", + "name": "plugins/module_utils/network/ios/config/static_routes/static_routes.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf2039ac32f07f4585257dd7ac39ea79bd3a7e4a0954b5666461f36094dc7361", + "chksum_sha256": "5120bfb8491af8a7eba0fe9aa34aed7584b68f52c893e1503a09c4553f09ab53", "format": 1 }, { - "name": "plugins/action", + "name": "plugins/module_utils/network/ios/config/logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/bgp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", - "format": 1 - }, - { - "name": "plugins/action/lacp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", - "format": 1 - }, - { - "name": "plugins/action/vlans.py", + "name": "plugins/module_utils/network/ios/config/logging_global/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lag_interfaces.py", + "name": "plugins/module_utils/network/ios/config/logging_global/logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "9e3cc535a16266ea929afad7724c40519bc119627f8312411fedea16ab1a624f", "format": 1 }, { - "name": "plugins/action/user.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/ospf_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/interfaces.py", + "name": "plugins/module_utils/network/ios/config/ospf_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/linkagg.py", + "name": "plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "383eeb77e1dfebff8ea69cad713d8e3f3468e91a07cc57de5ebbf4bdc1aa75d7", "format": 1 }, { - "name": "plugins/action/bgp_address_family.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/bgp_address_family", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/system.py", + "name": "plugins/module_utils/network/ios/config/bgp_address_family/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/static_routes.py", + "name": "plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "460ceeee40e7598109073d42741b0dffe67fe70c66a325e6c1fb0cfd7c509375", "format": 1 }, { - "name": "plugins/action/hostname.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/vlans", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/lacp_interfaces.py", + "name": "plugins/module_utils/network/ios/config/vlans/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/logging.py", + "name": "plugins/module_utils/network/ios/config/vlans/vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "936a5ee66ddac54f3bf82be305f6f0c40e29d5783a5db95f7c22e66f75f68ee5", "format": 1 }, { - "name": "plugins/action/ntp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/lacp_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ntp.py", + "name": "plugins/module_utils/network/ios/config/lacp_interfaces/lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "dbc626e83c3d4ce8c8aa42ee8903738f6ac2b1e16e8cda34dba4eebfdaebc01a", "format": 1 }, { - "name": "plugins/action/ios.py", + "name": "plugins/module_utils/network/ios/config/lacp_interfaces/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/config/ospfv3", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/__init__.py", + "name": "plugins/module_utils/network/ios/config/ospfv3/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ospfv3.py", + "name": "plugins/module_utils/network/ios/config/ospfv3/ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "736eb6daa9c808d54ce49fe1d90dde283856c61fbe5e6f7e13553c955ca4ad76", "format": 1 }, { - "name": "plugins/action/service.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/module_utils/network/ios/providers", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/route_maps.py", + "name": "plugins/module_utils/network/ios/providers/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/bgp.py", + "name": "plugins/module_utils/network/ios/providers/providers.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "282be606081a1895bce9320c131e547a2567b1f97071a21489f244bb066f547c", "format": 1 }, { - "name": "plugins/action/l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/terminal", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/command.py", + "name": "plugins/terminal/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/acl_interfaces.py", + "name": "plugins/terminal/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "2a6048a34e92899b3ae64a00d92dd6fff82bdb17f3065bfd2acce4cb94c1d7d6", "format": 1 }, { - "name": "plugins/action/ospfv2.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/cliconf", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/config.py", + "name": "plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/acls.py", + "name": "plugins/cliconf/ios.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "d7aba72972fc76fe4ff311096e72347c1be5a3d8cd2fbcdf44447a02e76ffb85", "format": 1 }, { - "name": "plugins/action/lldp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/plugin_utils", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/l3_interfaces.py", + "name": "plugins/plugin_utils/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/ping.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "plugins/filter", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/ospf_interfaces.py", + "name": "plugins/filter/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/lldp_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": "meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/logging_global.py", + "name": "meta/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "plugins/action/prefix_lists.py", + "name": "meta/runtime.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "ffdb23b4e35b69fbd30d065a11f01c54f7ff093c0cbdb1601fcd9449fd4e88e7", "format": 1 }, { - "name": "plugins/action/banner.py", + "name": ".ansible-lint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "856f0e6918f45626935cfc1f99dc19e9bb367c10482e490ad3595c3f92b7ee84", "format": 1 }, { - "name": "plugins/action/vrf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "name": ".config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "plugins/action/facts.py", + "name": ".config/dictionary.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "b504c990735c090ba655b9acdcc12a537ebf7d2e101b308ef1edc8543d9ed804", "format": 1 }, { - "name": "plugins/action/lldp_global.py", + "name": ".pre-commit-config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "43d06ad4def4673c1c239fe5c7d625c9e7a233437a7780c0d97c67ea4052acc9", + "chksum_sha256": "9702099b03b60d629847b7a305a1e9557d5229f5d406e0346dc6dbcb0722fefe", "format": 1 }, { - "name": ".ansible-lint", + "name": "pyproject.toml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b47f72e159f93a5ff07ea2534752e0fa977b214e9ac05c667fa83ac13be4e50c", + "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", "format": 1 }, { - "name": "test-requirements.txt", + "name": "README.md", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef11b7e31c53ed88a2352faacda33806dda00f45d4e9cce540a40e6a47ccbe73", + "chksum_sha256": "68ff7eb1cebf6fcee44618f9a029ed45ccde0a8dcd97e8faebf3a8ebc113a7de", "format": 1 }, { - "name": "tests", + "name": "changelogs", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity", + "name": "changelogs/fragments", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.9.txt", + "name": "changelogs/fragments/.keep", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd021dfbe2578d6984075377ccfa70ef38c5643a3c9828b3b639c4751c964967", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/sanity/ignore-2.13.txt", + "name": "changelogs/config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "337a1b5254e78eb8982998815aec7e88f9d63d46e1a70c46268683a5513191f1", "format": 1 }, { - "name": "tests/sanity/ignore-2.11.txt", + "name": "changelogs/changelog.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81071aa2e12650110cdf71d787e2703af0ed3028873f7a51d71f6684dd0afc84", + "chksum_sha256": "636aee6b5f5dd00c3e3a25a13e451f7ed19fa31698b9de95c9f8b6f28519257e", "format": 1 }, { - "name": "tests/sanity/ignore-2.10.txt", + "name": ".isort.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4abd57a7ab2a407892bb5873028919109aaa28d5fed12c2a0e4b9691076d713e", + "chksum_sha256": "f287de31c528e7d37475770952855fb25ec053d0bcaedd577091d13807b4c5dc", "format": 1 }, { - "name": "tests/sanity/ignore-2.14.txt", + "name": ".yamllint", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "827ef9e031ecdcaf137be239d33ef93fcbbc3611cbb6b30b0e507d0e03373d0e", "format": 1 }, { - "name": "tests/sanity/ignore-2.17.txt", + "name": "test-requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "0c5ac3417352160300a61814db3a245f2ff474f0a3f49e32de12ade27c4156be", "format": 1 }, { - "name": "tests/sanity/ignore-2.16.txt", + "name": ".prettierignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "chksum_sha256": "87f689e56b912f78012677dba2e0237a65f7b3c1f903006cddefab21bf0689f2", "format": 1 }, { - "name": "tests/sanity/ignore-2.12.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "name": "tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/sanity/ignore-2.15.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", + "name": "tests/integration", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/__init__.py", + "name": "tests/integration/target-prefixes.network", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "39053a91dac30879cf24512c4234e519681a1e88be8af8b18415df87fa4b9006", "format": 1 }, { - "name": "tests/config.yml", + "name": "tests/integration/network-integration.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "de5087316490411841c67aa3307cfdd3acaea09875c9b4dee6852bca7c120764", + "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", "format": 1 }, { - "name": "tests/unit", + "name": "tests/integration/targets", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/requirements.txt", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", + "name": "tests/integration/targets/ios_hostname", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins", + "name": "tests/integration/targets/ios_hostname/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/__init__.py", + "name": "tests/integration/targets/ios_hostname/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/unit/plugins/cliconf", + "name": "tests/integration/targets/ios_hostname/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/plugins/cliconf/test_ios.py", + "name": "tests/integration/targets/ios_hostname/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f46dc137e8680947b460f18c891b28964607d14143c57a7fb7fc85d8e8b956aa", + "chksum_sha256": "febb64d561f5a456e89d59fb77210502df86daa4eca07014b96993b76d0bc5ba", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures", + "name": "tests/integration/targets/ios_hostname/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/__init__.py", + "name": "tests/integration/targets/ios_hostname/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos", + "name": "tests/integration/targets/ios_hostname/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_version", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e18e1a4f1640ca226a2f0d067a422af58218fa7f191a8b71394432a56177c7fd", + "name": "tests/integration/targets/ios_hostname/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_startup-config", + "name": "tests/integration/targets/ios_hostname/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", + "chksum_sha256": "e42472783ff99e3351a0a581b2ddcdaca689eb9cb8044af829d580473e17ac35", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/__init__.py", + "name": "tests/integration/targets/ios_hostname/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "909ad0ac69441e0c20405814bade15872ccc23e5b736632efcfd2880d863c6d7", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_running-config", + "name": "tests/integration/targets/ios_hostname/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", + "chksum_sha256": "6cd846336af90bbf055ebce81f350f2187733b3580f5c227b07ad766e6c4bf9f", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_chassis", + "name": "tests/integration/targets/ios_hostname/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ab5008e1e19a8b1995b8c284856ae37ae5d242975b81057a3f0127fafa0f7a2", + "chksum_sha256": "0a18425a89f8e85573729e8c29b8c45e491dd6814b221f9d42a0acf0960689e8", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_hostname/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9313132bb4ea08fdfebbd76b6376eda299d1e61fef0b62973309894399193613", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/show_version", + "name": "tests/integration/targets/ios_hostname/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a21600440d1fbd2208fd81eeeaa632cfdf6b69c060bcff46e5a3f4a5f5c26f68", + "chksum_sha256": "334a751e168137370f8d5baaae2c017e63cd9870191a2476633bdb33f5aec915", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/__init__.py", + "name": "tests/integration/targets/ios_hostname/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5b7529ae69029b3e22b4dec95b722595deebe267cb2f2735a85fd53a4c82bac8", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/show_running-config", + "name": "tests/integration/targets/ios_hostname/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42f2e50d84821d1ce5c9ddfa082e7a6086254ef9908166a0d4523a3dc5b6b2df", + "chksum_sha256": "070883e8b78940daa953461fd32520d1bef4bdf4cf98664b3e82c7d0fae842b6", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/nos/show_chassis", + "name": "tests/integration/targets/ios_hostname/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a2890b7a8db9c1e8954a186fa311c8a2b44477b1d04bff9c32bf75b7797b4533", + "chksum_sha256": "8f0c8602b6863de3c09c0f29fb3fbe83fc0afa94d1358db7cb974628c616ebc4", "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/ios", + "name": "tests/integration/targets/ios_hostname/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/plugins/cliconf/fixtures/ios/show_version", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "28896cfd7a101f137f8433db1efdb33343aa43425aaedc2d4f7eebec7e71204d", - "format": 1 - }, - { - "name": "tests/unit/plugins/cliconf/fixtures/ios/__init__.py", + "name": "tests/integration/targets/ios_hostname/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9e463dfec9973774a7a87d75f8e492a829e08a207f7330616a23032087174429", "format": 1 }, { - "name": "tests/unit/__init__.py", + "name": "tests/integration/targets/ios_hostname/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/unit/mock", + "name": "tests/integration/targets/ios_lldp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/mock/vault_helper.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", - "format": 1 - }, - { - "name": "tests/unit/mock/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/mock/procenv.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e869c848191bb9586fa25214c452cd18497a737e30ff2747977f8b8d4da620c7", - "format": 1 - }, - { - "name": "tests/unit/mock/loader.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", - "format": 1 - }, - { - "name": "tests/unit/mock/yaml_helper.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fa89194ba60856f51500efdd1f802c5ca3b2e4ded9461d7b88847c427a43a958", - "format": 1 - }, - { - "name": "tests/unit/mock/path.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "920ca3acb70a819bba26034101cf1e8497e8a5445f220a4df0cbacca03b21bd7", - "format": 1 - }, - { - "name": "tests/unit/modules", + "name": "tests/integration/targets/ios_lldp/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/__init__.py", + "name": "tests/integration/targets/ios_lldp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/unit/modules/conftest.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488", + "name": "tests/integration/targets/ios_lldp/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/utils.py", + "name": "tests/integration/targets/ios_lldp/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fec06b445abd9398a3dbed94e82c9e76f7daa125c13f09e7842a24aefbb216ee", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network", + "name": "tests/integration/targets/ios_lldp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/__init__.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "format": 1 - }, - { - "name": "tests/unit/modules/network/ios", + "name": "tests/integration/targets/ios_lldp/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_service.py", + "name": "tests/integration/targets/ios_lldp/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c00bb9aff720be808ece114a8c4e3f18e4dff823186aa69f2502638a0f8658c2", + "chksum_sha256": "9f61afc65151115e5a86c79276acf3c3ced37cd6df01cf54550ef54252792ec7", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_acl_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "226ee34e9d64f4c1b63bee3030d846dffcf85bcb4f04a71e893bf0bb07b44ee1", + "name": "tests/integration/targets/ios_lldp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lacp_interfaces.py", + "name": "tests/integration/targets/ios_lldp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4ff68a41cb3751290da98519066dec8a071eb335b3edfb59511e5ae34567c9e", + "chksum_sha256": "b0906e69a469f54c61369370c1de70ece7ed9341c9647ae69f471544fad206e4", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_logging_global.py", + "name": "tests/integration/targets/ios_lldp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c06d947da67fb9595e789d26315d77f41cec2f9aa346d9fce452be9f15abc1d2", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ntp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d2987bd3aa0842cc1aa97484424f9098814f539bccba1d94c12bf33d51200365", + "name": "tests/integration/targets/ios_system", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lldp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cdfcb9c7988f951aeb3e45819d62db13c4974b0772c96937a15388cb3c2f2084", + "name": "tests/integration/targets/ios_system/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ospfv3.py", + "name": "tests/integration/targets/ios_system/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8171f1e8dab0e2da0cafc913dbc92d80f144acfaea650dbe1b029eebe28ccaa0", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_hostname.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e8fd5109de3a0c00ef3bfc89d6673ef6ecd0b9ecc52742ec3215768172a2bb30", + "name": "tests/integration/targets/ios_system/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lag_interfaces.py", + "name": "tests/integration/targets/ios_system/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5c5afac7db102eec9b01bb5f185afb06fb118cb01c7ec2393af4a37c9829fc89", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_vxlan_vtep.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "df24e333fa123be819420f2086e938d257e35283352cfff3ba34df001f9c2262", + "name": "tests/integration/targets/ios_system/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_vrf.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "29d5dd5eb47eda13e50282508895716ec7d64cc528aae244ed02744f0891d5b3", + "name": "tests/integration/targets/ios_system/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ping.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_domain_name.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4b15f4a2ee334263a07bc2083dc599423f3cf5c34175d4b30e888fa99c932eb", + "chksum_sha256": "4bc85f65fcaa284e9503fe5643f16111f14daf7ba677abd84daa04302f8b007d", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ospf_interfaces.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_hostname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3be97fd55cc742ad99ba812a26f13a25dbf18857f037854b563873f3522dc21", + "chksum_sha256": "810d48f3ce471254c763859c7d33ad70b06aaa28b45712179b4794f3b5a667c5", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_evpn_global.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_lookup_source.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cb1f69e919e200020e995d8794f0f030bd284b68b39013c31326394693b60afe", + "chksum_sha256": "10e512f2cf5dc0fe7c9d3cb0188fc3dc96dffa68beb61895d88c8dc422c886e7", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lacp.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_domain_list.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec2e679151350238a5994704b6b6536b0b1592e7d1dbbfcdc96b20a52820122b", + "chksum_sha256": "592210cc1bf19177523967179ec83b786b9c60d9341acdb087e739911876007b", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_acls.py", + "name": "tests/integration/targets/ios_system/tests/cli/set_name_servers.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fec5deeba545dbd9a3f0a08d8013929ec7f163487a8dbb476c269d39488bc1cc", + "chksum_sha256": "b59e7228e155bfcbaa1863f12fbbdc641e01c2fdef2d6bd4f4aeb2f3fa96bddf", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_snmp_server.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d3d27b8a357a47365f026dbcdf7a1b3e2317e30a21df3f7070a99b65a7bd6adb", + "name": "tests/integration/targets/ios_system/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/__init__.py", + "name": "tests/integration/targets/ios_system/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "68e898ba92f5164ddc8cc51967c5e2876e9002699d528634a67f2183dd558d39", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_bgp_global.py", + "name": "tests/integration/targets/ios_system/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "689d3fd1c81b87dac82c7758c3c1721d93b83a5affb05d02a5afe43b89a33439", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_vlans.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f888b8198120a922adf3fd3a8788186da0958fa1ceb4c383f67f4e92189a42aa", + "name": "tests/integration/targets/ios_banner", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_bgp.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "16e9b1cc88b73924484d635ee5a75a1906cb759e11316cc3ca2bc6884e03d216", + "name": "tests/integration/targets/ios_banner/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_l3_interfaces.py", + "name": "tests/integration/targets/ios_banner/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8fb3d1e70ac009d24328fe3680aaf7a62cd5382b8b985c5f41be8ab7aba03a9b", + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/unit/modules/network/ios/ios_module.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8a08cf8bab33ef88408880ffc6f8034be5e532945ca4f79d82b213426104876c", + "name": "tests/integration/targets/ios_banner/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_command.py", + "name": "tests/integration/targets/ios_banner/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b4f793aecb789530a6f3f0001fafbe618ffcdc464ca69ed105bed3bf070e8de", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_facts.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "205430daf9d063ed7424fee04dd5fc937fc12771b13281a096ed259e394d166a", + "name": "tests/integration/targets/ios_banner/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_l2_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f8c15e6ef5a1e936ff5be4975802e5653150bb926dd50ad90baa27747332733", + "name": "tests/integration/targets/ios_banner/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_user.py", + "name": "tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af31457a05a3722eb39dbae567dcb89310cc242300e97b4f58cdfa7d8385fb84", + "chksum_sha256": "2f9346d2348dd942748aa47f61b6aff3cf6e6ad48f94121546f09266930d371b", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_evpn_evi.py", + "name": "tests/integration/targets/ios_banner/tests/cli/basic-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e029ae1db0cc2e55e9a3b1ce9ff340f6f6a6cec55d49645adfd57f269ce7a1e9", + "chksum_sha256": "455be068cdb2741b681458831a33abbe656d86186a21d5dec3425add135dc14a", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_lldp_inteface.py", + "name": "tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aaefaf4ab2bfd58d99396bb634db067b881eecd359dab67de6fc872b46869853", + "chksum_sha256": "4c2ad7f508adfa637bf8f80e8afb4c68eeb24061eb0e54b670cb020133a38f63", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_bgp_address_family.py", + "name": "tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e262dda143867de45a2cf8344627aa9fd2cbe3c209c07a58c6b34d0cbbcbf58a", + "chksum_sha256": "3deefaccfe8f72086372732ab08319268107114dc4cf238dfef54e2974b29b26", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_banner.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e3f093e6f88c6c61cc9bf8f3d2f3e8bdc31d7462f5312506255e645fb55efd70", + "name": "tests/integration/targets/ios_banner/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_route_maps.py", + "name": "tests/integration/targets/ios_banner/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cc1fd7c6b70d2f623e2f348da1b65652e6fbee1b10911531d43bc2ce034b9d5d", + "chksum_sha256": "eebaf78d8d30ccd861ee6d250aec3bc87871e249b6875f8b0f44a4a3fc828680", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_prefix_lists.py", + "name": "tests/integration/targets/ios_banner/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "017a9454d003407820fda4a0b61662bc7a4cccc82afeb867bf015fc210c11f1f", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures", + "name": "tests/integration/targets/ios_vxlan_vtep", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_user_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "92081628d201c43cc40e2022f0ebac80f1ee5c1e78e19479d0b94780945a9657", + "name": "tests/integration/targets/ios_vxlan_vtep/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/show_version", + "name": "tests/integration/targets/ios_vxlan_vtep/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc71e5e1dc8e16c64ad26477c7b0dc0d0278a20be9dc4a6d53224328f239f79b", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_route_maps.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a2764456add35e41e5109cefb0694cd6a708bcf77239259b47ed60d86fa06856", + "name": "tests/integration/targets/ios_vxlan_vtep/vars", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ntp_config.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2dc4f5c356e2ba9f40ec1ad94b5bc4e597c39657662156764465f156ab6cd7cd", + "chksum_sha256": "7bbcfaab60d1b44f73192415eef696368496e56fecd0d5f6384a36f6ed0bf500", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_vlan_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "73a0c5b62bea4279d25deae4c2e04bf12c53fc3784297675a92eb98c911696fc", + "name": "tests/integration/targets/ios_vxlan_vtep/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ip_interface", + "name": "tests/integration/targets/ios_vxlan_vtep/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ad64c29374175a8d737d01ae856c16364c442fca9ea7b9447ab8f22d9ed78dad", + "name": "tests/integration/targets/ios_vxlan_vtep/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config_ios12.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2923b7e2af16ca384a4c44c7fc1c9944367fffc1769b9ee6c41d73a9e0a2c1fb", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_banner.txt", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fcbd9e21fbc41c072eed699ebf08ba9fc0e86b9084e4e54eb701cc12d4c764d0", + "chksum_sha256": "67f3d6703dbc41fb80ddc9360a8fd99addc2dbd17258b2e3d4bfc859c604d867", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_switch_virtual", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db1b7ead274089538a05952a47f1e7800560ca1a552adc345c34dc2ab4c4f9de", + "chksum_sha256": "0b9a801456bd9db90925de5fb3ddf02130ebf6e4de5abbc8dd0a3d8785ade822", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_memory_statistics", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "38375b22d4c94dad4289ad32a3360980e0e8f30d69c4a0c2ab1d8181d4fb811b", + "chksum_sha256": "23ba22f2eacb69c8cda7d4bc0b8ffb9b9b4e3c8c2499e8512fdd09ed136e051f", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_config_config.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd", + "chksum_sha256": "149f7e871cffbb37baa730d0dc0a4964723f90d64d0f0a409ebd923b743e682a", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/__init__.py", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "9c7f20dee20d06af4441f5369836e86db1aba0bda93cb50caa49e6041ae98dba", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_prefix_lists.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", + "chksum_sha256": "c56eb808c76e38656a84bb5e725dc14af02482efdb85d2246613aff63e9b52cb", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ipv6_interface", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "5665b8e91a6bb98092632ca9952389b634005325762d970aa987bf0523ccc882", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_config_defaults.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "114e89387a2b3cb37c475ed22f287f83dd93bd16a51845286b27f8355d1ae0e5", + "chksum_sha256": "6e7e8c2edb74ee0476b0c4d83a52c84e4230c16e3c3d051c63c6fc63018c4211", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_config_src.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033", + "chksum_sha256": "2dbca0fd8e9d00593a5785ab68cb246e21a2ac99fff6970ff150710c246f1927", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cfa8bf44c06737f51019c8a3d7a6987fb91cb55c72a3a4a883f0eb75f13c27f", + "chksum_sha256": "61c3a851e2d056cec1479981c331fd2a4c1126bb8bbacd5c38ed0b4e4ff026c0", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_logging_global.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89a3006dad756d356d14bf9704c493b1ebac4267dca6344c6af536d53dd1bbf4", + "chksum_sha256": "7d54c5dd89c14a5b02575b8e80f647bc66ba075563571e876e5d471beca81c10", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_10.255.255.250_repeat_2", + "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_vlan_vrf_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f6102ec8eb37947bb6892dbb4c1252c794ef52376540c9d8ce2b9753aa613685", + "chksum_sha256": "455e27f59263b50ef9ec28db7556b9746070f5672cabe83cb0c03f6103ca3918", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5abf76b46295216c079870fba8c70f8f6064ccd667e80d91e31b47ab84f6fd70", + "name": "tests/integration/targets/ios_vxlan_vtep/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_vlans_config.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e3b415848259747054d6586d9a85787a48f2a5d3fd5866c41f8b050eadfae90", + "chksum_sha256": "7607c1041a822e911d328c572b5986636a52054bad2895b89c4beb7861755017", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_l2_interfaces.cfg", + "name": "tests/integration/targets/ios_vxlan_vtep/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "743adf2fb8dcad62933e91c19b47b2b0437868c7e50db9a4e556431ed696f2f5", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "825819c8953b25588aadeb8264ebc23a52d06537049b7e3f4f0b9edfda1b7e45", + "name": "tests/integration/targets/ios_command", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_bgp_config.cfg", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8e1448b74254646dea1644addbebf552013bc999c32b8a90f3141fadfd2e045c", + "name": "tests/integration/targets/ios_command/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv2.cfg", + "name": "tests/integration/targets/ios_command/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f557ec41733d7040f5585b79e18b88623ace43d899ac80edc055e01c469240c1", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp_neighbors_detail", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e29939eafbbdcd5d64d8558cf6f5fe9d7fa1b806e62b5f19b65b0401c9c9c44", + "name": "tests/integration/targets/ios_command/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_virtual_switch", + "name": "tests/integration/targets/ios_command/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a3c3bbfb2fdcb11e3f9721d7596800690969e51e7fc66ee2e5adae3b524f7177", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_repeat_2", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "4962134fb2b2230a111b5b94f904ba094c12d0e0775e22c50b3db6599dbfcb36", + "name": "tests/integration/targets/ios_command/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_inventory", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "695c97917cde02fca97d816d92429a12142d6400180388630847a6938513829f", + "name": "tests/integration/targets/ios_command/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_running_config_ios12.txt", + "name": "tests/integration/targets/ios_command/tests/cli/invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed9d617788c3a95226fda5a0dfa4271afe77626709937b27a3af70ffde7af53a", + "chksum_sha256": "9a5de37d3a4e9c0a0deb381515d7aad38814e2573570881499c2f37d01c33148", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_vrf_config.cfg", + "name": "tests/integration/targets/ios_command/tests/cli/error_regex.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ee43d746654712aed9c1163d6130a7b6de350a3efef3e6e228355378b20be50", + "chksum_sha256": "9d8673ef0e332533bc520e1fc69282244014b33fe4fd67c9df97fb0c45389b35", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config.cfg", + "name": "tests/integration/targets/ios_command/tests/cli/timeout.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "547917e90b62a4ef7eb05c6a2527019acf8e3790d7d5a0c9f6b24af6a82a2fb3", + "chksum_sha256": "99999a86b0c912cd067669a525d1e0032db4e19aac5fedec7593bfc8868ae37b", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_l3_interfaces.cfg", + "name": "tests/integration/targets/ios_command/tests/cli/cli_command.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2836ef546936bc7b3ff57cd557f54d5c5024ecbf64451cbb4f0d9c937cdb71c6", + "chksum_sha256": "765a06846e98c1bc59b769855ba3c28f6ed2b7f8301b1aef0b8f0a9a4aef4863", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/configure_terminal", + "name": "tests/integration/targets/ios_command/tests/cli/bad_operator.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "114c1244968981a22617d661fe4e9de4734037af8970bce9b0c5b79102f8ae6e", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv3.cfg", + "name": "tests/integration/targets/ios_command/tests/cli/output.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b45b7eafd03c14cb0a9737561ddd60b86b708aabe1223697376c56066fabb29c", + "chksum_sha256": "90067084bae011b7afc19fc1569700cf0007d29ae86d423be0111fbdb7d9bf8d", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp_neighbors_detail", + "name": "tests/integration/targets/ios_command/tests/cli/contains.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11544c73f3e88ab5384140abf1bedd0c2501f4ed13132ab56bd22a53909183b0", + "chksum_sha256": "ac41c0332715a477675065b303c059029f452524c9613bfa6837221b3c8a4748", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400_df-bit", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c8452a768d797ca829ff18314236a7275cf03a14f751c6f53c8b6711bc8a1d7f", + "name": "tests/integration/targets/ios_command/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_system_config.cfg", + "name": "tests/integration/targets/ios_command/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecb0f88d690961592ffec4c1dbeebb4b6883ed2fee08fd60117a3b7937b37949", + "chksum_sha256": "cbea343b9422e831a52eac293e12796cebaba8432a2a7c3ea24f3d7cfde98a01", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_dir", + "name": "tests/integration/targets/ios_command/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf4241a7402fd70614b668b90da04f80c7430f8f4535a1eb0a40e989a1d9d48b", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_version", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a6290b0be0cd8622c90617eace7c4c8bb1508a77d33c2b0e7bb9d6f7f8967282", + "name": "tests/integration/targets/ios_ping", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_processes_cpu", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e8edd6276089ec830cb2978305dcff0f77cbe3a39f393eb0969c671a981d8d89", + "name": "tests/integration/targets/ios_ping/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_config.py", + "name": "tests/integration/targets/ios_ping/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ee85caaab9dcd66f7884d65ec2258b31e6e293815063df652bf5e855c4eb9e62", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ntp_global.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40f53692102deb7518dcd712d547f7c69eb91ef39368f2580fae05c19007a8f1", + "name": "tests/integration/targets/ios_ping/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_static_routes.py", + "name": "tests/integration/targets/ios_ping/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21fb9e42e6cd9ad1100664fd9547d6e42780dd49021fb75c61695fbb75171063", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_system.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "f8bcc32990f03f7c3fcd480ba2166364190e718787fac98303dc45fe829dd545", + "name": "tests/integration/targets/ios_ping/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_interfaces.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "e4cde58f50818e45a86e4a41b795090fb15f98dbba58287705de31c480d0e28e", + "name": "tests/integration/targets/ios_ping/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/modules/network/ios/test_ios_ospfv2.py", + "name": "tests/integration/targets/ios_ping/tests/cli/ping.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ea2f5f1e4b14adda3c4a1e59b0ee3ee8ddf6cc65bb102efcf0a5def60f41a3b", + "chksum_sha256": "beb45b19b88ea64c61e0d67d7769275c18e3c12a0c572bea86d171bada913956", "format": 1 }, { - "name": "tests/unit/compat", + "name": "tests/integration/targets/ios_ping/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/unit/compat/unittest.py", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "727203a3846be41893b78a4b77852a1658925e936fb19539551958a5d8e8fb81", - "format": 1 - }, - { - "name": "tests/unit/compat/__init__.py", + "name": "tests/integration/targets/ios_ping/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "d4fb9eae8dce0d7933579bdf2d3f8795995a4058621bb90be902cecbb7fda0da", "format": 1 }, { - "name": "tests/unit/compat/mock.py", + "name": "tests/integration/targets/ios_ping/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ef8138e4a1226b85dfb3567d9be04aaef39270af32ae62765b745f8f46cb0ec", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/integration", + "name": "tests/integration/targets/ios_static_routes", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets", + "name": "tests/integration/targets/ios_static_routes/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_static_routes/defaults/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tasks", + "name": "tests/integration/targets/ios_static_routes/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "16f3cc0b8e2e2d5d9776298fab6f9d5648e4c35498db7605af69c8e97e122464", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_logging_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_static_routes/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9cbfbd72a07c59fa3718d4dd77eda9cfc144ecbd081561172b9cf09c5eeadf53", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/meta", + "name": "tests/integration/targets/ios_static_routes/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/meta/main.yaml", + "name": "tests/integration/targets/ios_static_routes/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/defaults", + "name": "tests/integration/targets/ios_static_routes/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_logging_global/tests", + "name": "tests/integration/targets/ios_static_routes/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_extra_ipv6_data.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a6ceabecece292ded2c58a0da2f9f147af26de4c6428584afa2f0c456afc5061", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d3b22fb7585f08098afcf881010b4d9348529e0f722c139b763f6b0c158965d9", + "chksum_sha256": "854a251b2b1da970c8de705b4a7d5605c18e2107d157feee9496805b811943a7", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_initial_setup_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f014b1c94475c54528d1f3680735baaf6f2e8f4712df5a77665b969c98a16228", + "chksum_sha256": "59e9f957b72ad03c69b153719c63dfa82fc76462044bf190464dd27e23b38ce8", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_add_extra_ipv6_data.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f808045f76ecfd2f709fb9a4af7907660e8dfb4efa55fefc3744c32da9c20bf9", + "chksum_sha256": "27fca9065f41504020492968e54b2e06402c06e0125a486302d1917a63ac1f43", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4573b578a199c5195348871a4f8d0b0daee309e9ee60368db6968c6e64ee15f7", + "chksum_sha256": "e971b8839367066f0b190610a58229ed0599df3e17c4f97244b641a620b0e781", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f25d81fb7693d57c2abd74e8739be232a9cbedbba1e9f8699050d04ea18d2b38", + "chksum_sha256": "d94e463bdb85337d3eec7c13b3a6f08547817fcb70bacc4b842ffe40fe11c13f", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "09a264fcae252de2ac6ee85b8af26b74cc369cb29dc450cb21eb209818796182", + "chksum_sha256": "ab4fe0e6c364f83917063a0918a0cb632f8f9d26f6d4bca6c667e1e2e1181cd9", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_static_routes/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ecf2a5261b5c148d8c8142586318132ac92fd1663b20e91a2504ca2c2f9596c", + "chksum_sha256": "a789e3b6c7198a508bf40cd4e3cb57e546cda7632199c859f9099f6fb88f0f95", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "94cb8dc2e04d8643d4feeedaaf3eb159c60bb1a997c8186a0ad7f33912a8b945", + "chksum_sha256": "0283a6e9bffb601b04610bc3005eecafab4424e7adffc0cd92d5f2ec80854451", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7961543ce55fd097ff5b420ecabd3926f29b8631d0ef0e0a802ca601a177e2d0", + "chksum_sha256": "45bc3228d1228672490f41f89975c552acc03459b8d0879185ec00e9ae72e411", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6752b5ded2fc4b5361215ef8163a1ac17f48da2d1a26796414a2f7d7d4aab1f3", + "chksum_sha256": "923d1055671a7fc041e16e4b245f7b31451ccee290adc60cc145da9e23101c29", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_static_routes/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8b45e3678e544bb5e707a93e1155402218b01bb88ba710417db77102a7bb634", + "chksum_sha256": "c356f5c2db3137413b1235ce6ae54d6b2a5dc02f41074c65f2a0ba23370e3c38", "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/vars", + "name": "tests/integration/targets/ios_static_routes/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dcdb366f9c765b9c097f4c406703abd2c9a03a524a6eb1d19b352d93fa2deef2", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_static_routes/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_logging_global/vars/main.yaml", + "name": "tests/integration/targets/ios_static_routes/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54432abdc418154d2bc2d0a75a1a26d387c2ef5cc217cdcd6ddeb6cc19bc9ad5", + "chksum_sha256": "38d132ea3d937d0294148c6f3a04d55737b22d89d81da2b9a62d2f143db5c577", "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests", + "name": "tests/integration/targets/ios_static_routes/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_route_maps", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/tasks", + "name": "tests/integration/targets/ios_route_maps/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/tasks/main.yml", + "name": "tests/integration/targets/ios_route_maps/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "044df3cbbc253645266ad8c2a377e8758a8fd53c7a7398818eeb2fe0220e0a1f", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/meta", + "name": "tests/integration/targets/ios_route_maps/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/meta/main.yaml", + "name": "tests/integration/targets/ios_route_maps/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", + "chksum_sha256": "707242064a446604688cfa42b04d777ff801846293ade1154dcb3e82a9badfb8", "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/templates", + "name": "tests/integration/targets/ios_route_maps/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/prepare_ios_tests/templates/config.j2", + "name": "tests/integration/targets/ios_route_maps/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke", + "name": "tests/integration/targets/ios_route_maps/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tasks", + "name": "tests/integration/targets/ios_route_maps/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tasks/main.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f9fa924aaef2895a7bc9899ba35028617be0e242888fd3558903a9a5c621bf2", + "chksum_sha256": "3c56d9e9cfa1c23282710af3f23af288e856f3ff9134cc411a498b186c2df4c4", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tasks/cli.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cdc2604047d999342d2e29f3a546b9f8ceab22e37c2d4eaed5fb596bd4cd2f0", + "chksum_sha256": "49d07d449a90342c4a3b2605f7d2e5a99c3c04952701ea4a1d8b29b02577fa49", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_route_maps/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "85fea8de40eb500f7b93f6842ded059cc8f3e346d902a06028a4869db7e19b01", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/meta/main.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "df41c3a26d7834ab66fdfe1b2faade9c312e8225c7bc99d736308371f3600ea2", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_route_maps/tests/cli/empty_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7f164fe2b72297a0ed83c0dfde78abb1673ebf7715469c55d263904c54e75e8d", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/defaults/main.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "d0f8053909d848db5a593451794962888efd2e041f710294929ca1bdde0caff8", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_route_maps/tests/cli/deleted.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b4046f281274bc9935c8cde1acc6b9be307f1b7ef9fb583957e1322b0c082d60", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_route_maps/tests/cli/_remove_config.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ac7be197d9f1c5d050d19763c77777eb76e358ee919bb8f9cbb9f9844dc88223", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli/misc_tests.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7eb9e4e697c8432c1a40e9408f7638d887c347aec871bfa157bbd7c3f0586b95", + "chksum_sha256": "9107ec621b5c648121c0917cd969eb12895ff1bbd5164798902d8fade0887608", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli/common_config.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3cadb8dae7de5b5be84fcab95fd6e5f65816069841a996010af41c32b8438897", + "chksum_sha256": "9991663c3944fd60eb5c0dd904a88348ce7ebdb04550a3e596b92b67c312a8fc", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/tests/cli/caching.yaml", + "name": "tests/integration/targets/ios_route_maps/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "618ffe0e7bbd5a6d4e6172cdcca046317acbb06f8dc8b4de4e214fec6e642640", + "chksum_sha256": "ff7c6c2838c19016776a01f6d6704aada960e930a0829c0e47e847c70144b9f7", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/templates", + "name": "tests/integration/targets/ios_route_maps/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/templates/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_route_maps/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e9a834620253664b73e74d67506006c5a301715f7b7a867c5bca4334f82ece7", "format": 1 }, { - "name": "tests/integration/targets/ios_smoke/templates/defaults/config.j2", + "name": "tests/integration/targets/ios_route_maps/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2", + "name": "tests/integration/targets/ios_snmp_server", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tasks", + "name": "tests/integration/targets/ios_snmp_server/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "bf9e0e41402b83f7506fedba9515bd73a0fef00d77e63f09f9b2eda0ee5c3754", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospfv2/tasks/cli.yaml", + "name": "tests/integration/targets/ios_snmp_server/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/meta", + "name": "tests/integration/targets/ios_snmp_server/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/meta/main.yaml", + "name": "tests/integration/targets/ios_snmp_server/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "5e91e745876e69219bc6bfbd0cbdd32a8c148c856b1646dbbef806719634d3af", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/defaults", + "name": "tests/integration/targets/ios_snmp_server/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/defaults/main.yaml", + "name": "tests/integration/targets/ios_snmp_server/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests", + "name": "tests/integration/targets/ios_snmp_server/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli", + "name": "tests/integration/targets/ios_snmp_server/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "be91779003c353db09835a7ade40aa7e16311e93c3a111335d4caea13b27c3a4", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "fcfa39efe63ec56350bd75b0b4ded134aa99c4f1a810039fcf0744eed952a0fd", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8554a710fa447dcbe0f7f0097a0f81b7129deecd19b5f4f6caafaf80bef690f8", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b2013ced0c8268e36db6925558607e68fddb5887092aa3d520a2b6e1318fc7fb", + "chksum_sha256": "b950ea2795a909e67285cae4843c7dfadd52bc1521fd8d2138da9c7e6675aee6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_initial_vrf_setup.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c35a0a936bc8f7a82cefc3c831cfed82f738026c5b5cf5832c06ed42f7098309", + "chksum_sha256": "7b544236b53c9b2e7df27b49d1c854d4fa0000d4508dbb639d366407fe35617c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e11b9f26e0eb1e022969d8091b88bd0c02cb8e4e12649c63d2f526009bd6ec7", + "chksum_sha256": "cba89a05752a9e1102b676dab55609ea2cf326cd88b3900015a5e0b178032fab", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "71aad36583afacee1f2d50726b8a99cffc3e17566f1297f8c06cda6cdb9483c5", + "chksum_sha256": "2288230f503cb44cb1872ec2fa86e0108853bcb9f0e9c4c65c26abbf60cddd64", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be6663b98bbde670ccf5f4c019cc50bcf3461c7f1df79d59206e0dec1f9c87de", + "chksum_sha256": "ea45879cb4d6feb66cd45135335501892f30377f0ae7195e9caef0a6cf186f01", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "030a148d0e9b7d4e89581f3b82aeb06ce828a2a494fcebecac6a99a5fd9be893", + "chksum_sha256": "e229df97b6ba4cfa166b966f97b69f69c348cf1d3b61e42d82869a3c8b4cef45", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1995543982bd7f2a4aee73e5a9fce445b21af1d6ffb5f410d34b372dcd904ae", + "chksum_sha256": "5d324239706acbc0938a35cebdce4f126c4ac1619c44d71e8f1f7b6df123df26", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2c2d35e0efc547f71effa33a8e7de17a8c8447b28d79a00d0ad56fe4a29d130", + "chksum_sha256": "314132891ee35f3cd44df768368899b2b9fa9ee51d3f9510796e9f147660526d", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e36682d7d591a6ebd1311a1b34bfbeb402c35f98f14f9d9521a9839f1a5fc081", + "chksum_sha256": "07644781622568558c597427f05f80ebb7da335eac6a6ab67dd37a7b6f86a60d", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_snmp_server/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c2988c367bd38b6fc431b3184c661086ae4bab311882e80c941cae6db04344c", + "chksum_sha256": "32f48d0476fccf4880ae5670b4c12afeb89951421b643296d3540a42970a2c3c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/vars", + "name": "tests/integration/targets/ios_snmp_server/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv2/vars/main.yaml", + "name": "tests/integration/targets/ios_snmp_server/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8649ac5af985e516bc0be12ea860f9ada7a4454ab14ecf2d056dc16565a95e55", + "chksum_sha256": "e41e847b30cdc92d4ba8d8ad59e109a2acf5fdb2207b9b345199ae1692d5c386", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_snmp_server/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tasks", + "name": "tests/integration/targets/prepare_ios_tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b0906e69a469f54c61369370c1de70ece7ed9341c9647ae69f471544fad206e4", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp/meta", + "name": "tests/integration/targets/prepare_ios_tests/templates", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/meta/main.yaml", + "name": "tests/integration/targets/prepare_ios_tests/templates/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "a21d7b66f513ecb424fd6e23df9f0737c855281f3a5d0be6c856a0d2ce7af23b", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/defaults", + "name": "tests/integration/targets/prepare_ios_tests/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/defaults/main.yaml", + "name": "tests/integration/targets/prepare_ios_tests/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "851860fe2ed1258710d7fcf89ac5b7d8c3c87755e89ca56fdd79bea022eb2b92", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tests/cli", + "name": "tests/integration/targets/prepare_ios_tests/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp/tests/cli/basic.yaml", + "name": "tests/integration/targets/prepare_ios_tests/tasks/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9f61afc65151115e5a86c79276acf3c3ced37cd6df01cf54550ef54252792ec7", + "chksum_sha256": "044df3cbbc253645266ad8c2a377e8758a8fd53c7a7398818eeb2fe0220e0a1f", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global", + "name": "tests/integration/targets/ios_bgp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tasks", + "name": "tests/integration/targets/ios_bgp_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "40cba4a01ca4d7671041cd1c34aad247ab33b8027f3143233bab09d039780e3d", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_evpn_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_bgp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/meta", + "name": "tests/integration/targets/ios_bgp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/meta/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "294fb05c40c2dc3d7c4784a8cc61089bd1a705a9461e09fb33b05dbff99f9e33", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/defaults", + "name": "tests/integration/targets/ios_bgp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests", + "name": "tests/integration/targets/ios_bgp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli", + "name": "tests/integration/targets/ios_bgp_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bf27aff9be6f72a1bac5da95577b426f851356b9afa907bc35a5100f51b3500c", + "chksum_sha256": "b28f32004005582bc80fbc2a9c8db6728687c25d87f74a365e61e7a20ec853d5", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df48d4875d6c309498c93bf1654170b5de8dd36f00cad9b7dda06fa0ec6135d8", + "chksum_sha256": "ac9b0f35b9607c4dcd6ee6fe8c4c5a3a890eb3ffef2606e5d9935648df7d5b7e", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8c950ea407d98e84ee9ef11ae5f11cdd1402a460f48159591eed290af69aa730", + "chksum_sha256": "75c019721cd809896e681cc3826abf70eb2a7d0616bc09817577e99c02ef7070", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e6e04317befb43f382b3b5e4e37757fd905ea5f8099327bb255ce3031da38285", + "chksum_sha256": "22e70effcb2a1b4e95a65356aeb5851b46cc61d518aa81ce133b7934eb8c6d83", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b7ddb734d42978b5ebb82d436a354e8fae2fce18e60a1546f2d519cead08390", + "chksum_sha256": "b6479de2654937093427d57930e46c699ad3265ee6f67624b7414d03cd9888eb", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54905a1be066debe036046408f5d40d3ceeccee3074090e3d1c459aeb4355e67", + "chksum_sha256": "87c9833d471a6b80a6c2cd0a14d29ef5b983fe7d8e9e61e6f43a8c0e1e8a89f6", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6068d536690bed4bb86b5901cc97b78325b5ff9a6104805278172427c9af3", + "chksum_sha256": "6fb296f62f074510365c9916869e8db44765c6cd34459320babfaee14deb6253", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1c1eda73556b1082527e3387499aa6a6d5d6734bcdd7070409964563ef73734b", + "chksum_sha256": "3c6b76253c2d8e53a0df8c1f620ad1b90d537912cb81877fff08d39689a1537f", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e0e4acad796d01a6db7a44d08d8ae4a7eefa3da818382224189c30eb5c6bbd92", + "chksum_sha256": "124e599b3086fa609f480a4a1904670d4501b436c5a927758b5399fae15e8124", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ee5e0cd3f90d1d5461cc3de8eec434fbb245688d2c99d12a477d0ee565f19c9", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_evpn_global/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "cfa79d338f05e3971ce8a30e951a60e8a3898786fecbf125898bfc20275377a4", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_global/vars/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a930c7415288124acd312b6bc09b1120f8f8085b31c7267a1e183467377b70e0", + "chksum_sha256": "cca6983e388a8e06b3b72325026c23d5794b130d45a74adb6d2156525ff8335d", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_bgp_global/tests/cli/purged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "440e31a2f87615c703a8a25d436bebf5e076b729ab0316294b1aea01585fb9ae", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tasks", + "name": "tests/integration/targets/ios_bgp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tasks/main.yaml", + "name": "tests/integration/targets/ios_bgp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e41e847b30cdc92d4ba8d8ad59e109a2acf5fdb2207b9b345199ae1692d5c386", + "chksum_sha256": "3c1978dc1393f0ddade54f4568fbe2a213f323e71e9aa334266bad4fd016ea95", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tasks/cli.yaml", + "name": "tests/integration/targets/ios_bgp_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/meta", + "name": "tests/integration/targets/ios_user", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/meta/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_snmp_server/defaults", + "name": "tests/integration/targets/ios_user/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/defaults/main.yaml", + "name": "tests/integration/targets/ios_user/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_snmp_server/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli", + "name": "tests/integration/targets/ios_user/files", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_user/files/test_rsa", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "314132891ee35f3cd44df768368899b2b9fa9ee51d3f9510796e9f147660526d", + "chksum_sha256": "660b96e5ac6d6bd17900490c4749ff3a63898bb155db0a661fefbd6ac6f0fc44", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_user/files/test_rsa.pub", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d324239706acbc0938a35cebdce4f126c4ac1619c44d71e8f1f7b6df123df26", + "chksum_sha256": "4552b1d9416ac1be7c90b10b182a6ff4a4c56efcba53bb31851808c5d1fd787c", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/gathered.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2288230f503cb44cb1872ec2fa86e0108853bcb9f0e9c4c65c26abbf60cddd64", + "name": "tests/integration/targets/ios_user/meta", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_user/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea45879cb4d6feb66cd45135335501892f30377f0ae7195e9caef0a6cf186f01", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "32f48d0476fccf4880ae5670b4c12afeb89951421b643296d3540a42970a2c3c", + "name": "tests/integration/targets/ios_user/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "07644781622568558c597427f05f80ebb7da335eac6a6ab67dd37a7b6f86a60d", + "name": "tests/integration/targets/ios_user/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_user/tests/cli/auth.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e229df97b6ba4cfa166b966f97b69f69c348cf1d3b61e42d82869a3c8b4cef45", + "chksum_sha256": "1f1317bad114d20ffe0ec55fcda33969a2575dc965be99b58cefda6742beaebe", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_user/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7b544236b53c9b2e7df27b49d1c854d4fa0000d4508dbb639d366407fe35617c", + "chksum_sha256": "6e0a3882e754b70b183dac98c191e5db07f0c629ecc69b466b63cb3e3b0ea0d0", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "b950ea2795a909e67285cae4843c7dfadd52bc1521fd8d2138da9c7e6675aee6", + "name": "tests/integration/targets/ios_user/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_user/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cba89a05752a9e1102b676dab55609ea2cf326cd88b3900015a5e0b178032fab", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_snmp_server/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a8da0d0bc00401711103caf4be61022ba74b53c8296bfcd784db7ea4853111c5", "format": 1 }, { - "name": "tests/integration/targets/ios_snmp_server/vars/main.yaml", + "name": "tests/integration/targets/ios_user/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e91e745876e69219bc6bfbd0cbdd32a8c148c856b1646dbbef806719634d3af", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/integration/targets/ios_acls", + "name": "tests/integration/targets/ios_l3_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tasks", + "name": "tests/integration/targets/ios_l3_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "a35279615971415b54c2877e35c58f430c4b5ecf79ab75cf8b1145408aa2f1c8", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_acls/tasks/cli.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/meta", + "name": "tests/integration/targets/ios_l3_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/meta/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "380802a37176afaba3d88556db35153b263ac7133e59292b1c2bc3633070ccd5", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/defaults", + "name": "tests/integration/targets/ios_l3_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/defaults/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests", + "name": "tests/integration/targets/ios_l3_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42615f514256b1a7d451a57c904dafc5c7887df9bd1c968f5332b28b65ee999a", + "chksum_sha256": "bfc3c984e0da8a8065696a6a4801d945bfaed1f84146f7c3c9745ba4468d0e1d", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2110fa4eadb1937613e4b408e6d87ec92dd2e55ea8d01b22a3f058fe670aed83", + "chksum_sha256": "5a8e64e20ebea7d3a898216c6e256a3c0dccfcfb68a0671e3bf160e1f6c1b935", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46fbc34461ca07fa76173803e47b59638be46b109cf3033e12ab8e741e66d203", + "chksum_sha256": "ade890c5c428f4f2ada261b01e89f9149d27d8add293430df56161249cf0f6b2", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c3c4569c578ec8336fa353111482916a96d9b9f7ab0f3262e9fe3fb92ce0f1e", + "chksum_sha256": "030195c5574fcaa46ade5d2d9f640d1b1668c41025f0c78032cdebd9ebc4ef86", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4aa123dc7a38645f48ca983339b0a43702f527b615514715a05689ddda18f592", + "chksum_sha256": "9c065775b6484b284e03beb65d1e250361c09fa4fc20e5006058f69e7c4eebc5", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aaf7849f1fc016f09813c37599fa2f567313c681920a349d3976117ca61033bf", + "chksum_sha256": "74906256718324f2c376a9dcb3be7bbadb2487067b1617e6d90c16f0a109cfcd", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ecf088fce17e2e3b5612311c4c10d551e1c0fc20716a2cba7f0424611b989fff", + "chksum_sha256": "77cc14435d04e3f72f0ab9457713fca28de7a508c865c08df619ce999d7ace03", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "40cfb30ce1b837e512a4e0a8e5d8aaa90026019732f6b712c49fa8f86c742f46", + "chksum_sha256": "4ed4649e2c9b10b71a7ae63117d06ec134eae6b2182f26bb8b04eb911e609707", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c7af067764f9e7823717d5b09d690789309bdb098c621a8886151cb7c5126f9", + "chksum_sha256": "d2a2840acaf208fa439d00dd3be862789bb3e249ca568c9e3a0f958ce4c92987", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22dff6930e31491a66e9b9f96b3adbb57e5619f9bb1cc04e699ad09651dfb23d", + "chksum_sha256": "f5380c447d728d61be3bdfc3dd1ba1d805186c04b0f400eeb39c91b93bbf332a", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6cc930a39872ad57c5b74919747421b13b0a0c985100d70763b27d0f646d0f4", + "chksum_sha256": "9ecda90386ebc75e0cb6e8a820a5c4bf172d4ca7bd4dbe399a4733aa6c08d07e", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "855485788ef3b774a156a6a7780597f2c73639a9da4f7093bfe3289ca1e67853", + "chksum_sha256": "e3ccde47cab8fd1f7d6eb91c8a1744831097c27bebbf655e15d71fd2456db7f2", "format": 1 }, { - "name": "tests/integration/targets/ios_acls/vars", + "name": "tests/integration/targets/ios_l3_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acls/vars/main.yaml", + "name": "tests/integration/targets/ios_l3_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3706a44db972213dcbf36515e04647a1cc508296cc5faea5afd0666dcf499dc9", + "chksum_sha256": "daa688f229d7e8db61d23cc61ebc79ccff40a6e9af6de742f4cf5fde2fab74be", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_l3_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tasks", + "name": "tests/integration/targets/ios_vlans", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", + "name": "tests/integration/targets/ios_vlans/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tasks/cli.yaml", + "name": "tests/integration/targets/ios_vlans/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/meta", + "name": "tests/integration/targets/ios_vlans/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/meta/main.yaml", + "name": "tests/integration/targets/ios_vlans/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "1cade52f40e5745ea62114c4c0c970e7f03db0578670180c7ddbd4d968a0ebf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/defaults", + "name": "tests/integration/targets/ios_vlans/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/defaults/main.yaml", + "name": "tests/integration/targets/ios_vlans/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests", + "name": "tests/integration/targets/ios_vlans/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli", + "name": "tests/integration/targets/ios_vlans/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "be1b9226490c3801116b3325385dedad65ee514e21d853298e2aa94ca9f16766", + "chksum_sha256": "9dcb409a302fb60386633c000240bd99c7e1a925e59d940604e6b1319d138eb8", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83fb72d50e9f4e9ff7e3b906e1b4dba8ba4a08b0c8ff81c130a6b5c95c2c86cd", + "chksum_sha256": "1b9940730019c5607914c500f4e39e23b55fe858a6d0b276c96a28e72f222049", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed_vlan_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfe347a63f6fa9d686ee7151ca4344f94c3fdc8c7e1ce73a637ec9e4924f38fd", + "chksum_sha256": "5921afbe0954f8ced2a95ceba0ffe19b6d3e0b31e50dae387704727e4602aa50", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ae637240277ae729d901550cd50ce19b6b29b1eca663eaed8ce011bec832615", + "chksum_sha256": "7c3dead8718d5c971c74c59bf6c3eee8be63eb99fea05c03b0aba14e2994c4c4", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce393c8b6381d3030b5d2d12e7338fa4423cf1891c816db296f544467860992a", + "chksum_sha256": "19bfcf9b214bd48339bd025b2c044eb3a640bd46b88442f4dc5337faadc0e18c", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_vlans/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "744f90515ff83553dfeff83df0ccf4aa826c3249574c42686fd9d6c41394d19c", + "chksum_sha256": "4ffdb8c877c749e808b435c833c92f3b7d7343d05c4ba8d8f1b39e519b1b63a2", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc650f89a8a2ebce685210ae5fa3d65d1d31652a993164005d3327f4861881b6", + "chksum_sha256": "eb23b5c2bf1f0f35f49b160da45e45decfd895bb8d789a023f4ef8b975dc2dbc", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68518c550a5a993fc26f2508bbf71ef506bcb2eb7101ac3005ec4b7163515459", + "chksum_sha256": "018078882c63dfba371d5ada153412afd132eacc280cf5fda138c0c663fb500d", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45475bede19466ee41f4b1d966a80c10988ece6e1ea77232c4c9883ef2f22123", + "chksum_sha256": "31dcdedd876672aa1f15ac36c7b35b156cea9795b15f686e40b2eecaa0ea5392", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "364387abef4d57a5903ef74f788703e41ed604a98ef24bcebcc837c85fad934a", + "chksum_sha256": "e7bc4328acfacc36056f4f9fd2ed9cebef987ba490730967a191721c62993aa5", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/aliases", + "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lacp/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "2cee0574690e1a22ae1502659dbf76f95aa0f3adcc742e32a25241043c9eaa20", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp/vars/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "34537c31909d55ab6461991eb2ddfae9e4dd32b1b7e01133aa040dfe08ae02b9", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "2d7773b3edea41259b34dbfefcc4c7a543c6ab3c1a1a2d85a334d0cefad37b91", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tasks/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e03ae6e52f8d7161565991a66935845e9141dd6b6bf67f939b1651c229cea114", + "chksum_sha256": "5fee35bae6ec5d9945f2f9f4b7c5bea83745b2316b00de19871379315d1db91e", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tasks/cli.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9739e364f374e25ab4075944df0f36a45c1937d5bcaee64b9120d651349f7297", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "96631f083020ab2d55c8ad66ef70bf26942bf12da2864a3b45b8afb934e5c7d7", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/meta/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "552b6d2b0820aa662bcfdd52f55b169b4cee43dd29677494db263ba3a9e7a548", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp/defaults/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "ea1418e61499a54da8b0fc871d438e4955dfc1ae371120f4abed0fa6dafd1836", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp/tests/cli/basic.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93546203b3b3da6687b1f61844ce847c75681b3b2ca9d9456bb1ad296603de72", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d90eba79cf10b15a5318824e1fbc6e877db3951526be828180d47a3d1f8aeb03", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tasks/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "eebaf78d8d30ccd861ee6d250aec3bc87871e249b6875f8b0f44a4a3fc828680", + "chksum_sha256": "5f85654bf5f219c1d3e2569e0bcefad7c12232329ce58ad42219373b88ea2c15", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tasks/cli.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "c257655cbf982e357facbb58b224b180677889e1dd9803351435d85b834a7b9f", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/meta/main.yml", + "name": "tests/integration/targets/ios_vlans/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "85a1aebb72960e9ca957302e141f03debf96a1ab54926905a182b6f12fc2bb55", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/defaults/main.yaml", + "name": "tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "a48ff2cab2dc7f5b92ac31b25fa52af940fc463ceb244c8fd28ee7b107ef08fa", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/tests/cli", + "name": "tests/integration/targets/ios_vlans/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli/basic-login.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "455be068cdb2741b681458831a33abbe656d86186a21d5dec3425add135dc14a", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/tests/cli/basic-no-login.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3deefaccfe8f72086372732ab08319268107114dc4cf238dfef54e2974b29b26", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_banner/tests/cli/basic-motd.yaml", + "name": "tests/integration/targets/ios_vlans/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f9346d2348dd942748aa47f61b6aff3cf6e6ad48f94121546f09266930d371b", + "chksum_sha256": "8fa2acc83e477a128ac38edeec64fee41b19c60ee0c81a9c4fc633958a687a73", "format": 1 }, { - "name": "tests/integration/targets/ios_banner/tests/cli/multiple-login-exec.yaml", + "name": "tests/integration/targets/ios_vlans/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c2ad7f508adfa637bf8f80e8afb4c68eeb24061eb0e54b670cb020133a38f63", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global", + "name": "tests/integration/targets/ios_logging_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tasks", + "name": "tests/integration/targets/ios_logging_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7fc06936d093493791466cc5b227ef05b6a0175615a5ce00453f6effb74f9532", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_logging_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/meta", + "name": "tests/integration/targets/ios_logging_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/meta/main.yaml", + "name": "tests/integration/targets/ios_logging_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "54432abdc418154d2bc2d0a75a1a26d387c2ef5cc217cdcd6ddeb6cc19bc9ad5", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/defaults", + "name": "tests/integration/targets/ios_logging_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_logging_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests", + "name": "tests/integration/targets/ios_logging_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli", + "name": "tests/integration/targets/ios_logging_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bcff8a20978c31e6c69a155803657b695a5f65a32c494c6d83d65d008e8020d6", + "chksum_sha256": "6752b5ded2fc4b5361215ef8163a1ac17f48da2d1a26796414a2f7d7d4aab1f3", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2b3bef8e48a4ebef6e417c5e919751cd9bd526308fdacd16395203eb4feb9f82", + "chksum_sha256": "94cb8dc2e04d8643d4feeedaaf3eb159c60bb1a997c8186a0ad7f33912a8b945", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6b0345d271e15e951a9a150a43aa0906c3c91a5290b27ae942ab9ece89cbeb4", + "chksum_sha256": "d8b45e3678e544bb5e707a93e1155402218b01bb88ba710417db77102a7bb634", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d80307c7fbf6fc328ebf0395601768f230c08d052cba3e459e4b1755635a2a21", + "chksum_sha256": "f808045f76ecfd2f709fb9a4af7907660e8dfb4efa55fefc3744c32da9c20bf9", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f41a107502fd7e4be2baf717aafa72bbafc34125fa229ec2e123f7dd7225176e", + "chksum_sha256": "4573b578a199c5195348871a4f8d0b0daee309e9ee60368db6968c6e64ee15f7", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d9b1ee000ffc164233351430bc0f5f3c9d3a336fd09ef670bfa40a7e2eebafc3", + "chksum_sha256": "2ecf2a5261b5c148d8c8142586318132ac92fd1663b20e91a2504ca2c2f9596c", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "306dedea01d094347dc69f10f2e68ed7787372ed087fa1c5ee2d5953a8767016", + "chksum_sha256": "f014b1c94475c54528d1f3680735baaf6f2e8f4712df5a77665b969c98a16228", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_logging_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e350806f21caa0181d510feb9cb4e70185286e62aa3b52719b59d55172f2126a", + "chksum_sha256": "d3b22fb7585f08098afcf881010b4d9348529e0f722c139b763f6b0c158965d9", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8cc9ea8d4a47459ec32d942855702c789ba3347e0693f57313003f45020d8a7a", + "chksum_sha256": "09a264fcae252de2ac6ee85b8af26b74cc369cb29dc450cb21eb209818796182", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b633b4d6ccef76001f6764713b498278bf30e1dd964673e556fab42166480786", + "chksum_sha256": "f25d81fb7693d57c2abd74e8739be232a9cbedbba1e9f8699050d04ea18d2b38", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_logging_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9080f77ada9c677a1f4f275d42ed6bb0123286aa0ce5462bd2c580f47dda0d07", + "chksum_sha256": "7961543ce55fd097ff5b420ecabd3926f29b8631d0ef0e0a802ca601a177e2d0", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/vars", + "name": "tests/integration/targets/ios_logging_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ntp_global/vars/main.yaml", + "name": "tests/integration/targets/ios_logging_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99f97d7709529ad5a370ef88ca759dd566abc45940443dbe28762778ab40c544", + "chksum_sha256": "16f3cc0b8e2e2d5d9776298fab6f9d5648e4c35498db7605af69c8e97e122464", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_logging_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tasks", + "name": "tests/integration/targets/ios_lacp_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "38d132ea3d937d0294148c6f3a04d55737b22d89d81da2b9a62d2f143db5c577", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_static_routes/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_static_routes/meta", + "name": "tests/integration/targets/ios_lacp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/meta/main.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/defaults", + "name": "tests/integration/targets/ios_lacp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/defaults/main.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "866d49b9fb83bafefee3c2ed7ba79d894e2b28af83b4fed56ad48982c364a894", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests", + "name": "tests/integration/targets/ios_lacp_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_initial_setup_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59e9f957b72ad03c69b153719c63dfa82fc76462044bf190464dd27e23b38ce8", + "chksum_sha256": "fc43ad13fcf0465249c1941a418f61f36fba08a55afaef2aa8a7949ed028a7fe", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_add_extra_ipv6_data.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "27fca9065f41504020492968e54b2e06402c06e0125a486302d1917a63ac1f43", + "chksum_sha256": "ac8361b624da0372fb79c80bd147c5b9bfed4d4140d0be7fe9957b75e414c61b", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0283a6e9bffb601b04610bc3005eecafab4424e7adffc0cd92d5f2ec80854451", + "chksum_sha256": "e87a35985502b9c92eb9c60ed83fdefcc11a17e26b421e067dcf7be3624c8503", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a789e3b6c7198a508bf40cd4e3cb57e546cda7632199c859f9099f6fb88f0f95", + "chksum_sha256": "5bb10615fc266a5079e9adaf3307602bdefac54f4e8c9fda96954eb59ddc1485", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d94e463bdb85337d3eec7c13b3a6f08547817fcb70bacc4b842ffe40fe11c13f", + "chksum_sha256": "200cc72937b5aab4388efc5e85b4f590dfae9bbbfd9668c2c8390d42c73cb1a3", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ab4fe0e6c364f83917063a0918a0cb632f8f9d26f6d4bca6c667e1e2e1181cd9", + "chksum_sha256": "05d13aca3673ed53547e84c3a96b852f6c6b21e31b250ccae1a3c9dc8a455415", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_remove_extra_ipv6_data.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a6ceabecece292ded2c58a0da2f9f147af26de4c6428584afa2f0c456afc5061", + "chksum_sha256": "6b15190694a3230175825f662ffc5be36c207a5508f8dd03e34d0f16dba801c3", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dcdb366f9c765b9c097f4c406703abd2c9a03a524a6eb1d19b352d93fa2deef2", + "chksum_sha256": "337f2c06ea2b0c31adfc06bd0684edb480b1a333dc4d82fd36e74e6efad7d6ba", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_add_port_channels.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "923d1055671a7fc041e16e4b245f7b31451ccee290adc60cc145da9e23101c29", + "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45bc3228d1228672490f41f89975c552acc03459b8d0879185ec00e9ae72e411", + "chksum_sha256": "83acc10766bff99eaf1085cfc2fab4b54e4101edfc70d06c19f65eb5f90f0478", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "854a251b2b1da970c8de705b4a7d5605c18e2107d157feee9496805b811943a7", + "chksum_sha256": "8a4d9930854480ec68685dfce6a5ca53170d519fa93b8b10ff89d84c2fef906d", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c356f5c2db3137413b1235ce6ae54d6b2a5dc02f41074c65f2a0ba23370e3c38", + "chksum_sha256": "6fd2582bf431113cefd8a863baf6d1b6908f5cd142dccde32ef536feb29d0702", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e971b8839367066f0b190610a58229ed0599df3e17c4f97244b641a620b0e781", + "chksum_sha256": "3de8041d6d7c288d7f421fc629c2bbcfd5b1faf29d3785fb1f8c39b6b5f36775", "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/vars", + "name": "tests/integration/targets/ios_lacp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_static_routes/vars/main.yaml", + "name": "tests/integration/targets/ios_lacp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9cbfbd72a07c59fa3718d4dd77eda9cfc144ecbd081561172b9cf09c5eeadf53", + "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lacp_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { @@ -5685,38 +5370,31 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tasks", + "name": "tests/integration/targets/ios_lldp_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5e606724f5e050623ada8c3ebac4a083abdd02767b5957a2a8904f043d62e05d", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/defaults", + "name": "tests/integration/targets/ios_lldp_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "887240ad30c1751c17e47be11a0cc78b5c323d442967b30457bba74054d6ada3", "format": 1 }, { @@ -5734,17 +5412,24 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e44e3d1b77f9197ef4361d6dbf20eded541d03f581394845c3696a83e441f2ad", + "chksum_sha256": "007a1de94220246c924b2d51649d632c2caee32e05fdb91f25df2e14e0e602e8", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9cdedfb409a6a585b41bbb846c76b74db84cecab5bdbfeef8886855f6cd1a51", + "chksum_sha256": "5beb898fd85dd55c16543656a24d0f3cf81103d0b4a3b9ac5c0986a4f630e703", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rendered.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "def5a49dd2014e2079ca9312f36b626f9bfe5606d255f306eec9dc700ae9f7a0", "format": 1 }, { @@ -5762,38 +5447,38 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c677840c5b24b7fbc56a54cbe609c24c198bf12cb1b9db9218316a45f9481211", + "chksum_sha256": "fccbbf49369445f70a482c85b55c078f9cadd67786a0a013fc6698b25100108c", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ebe78d90845598db5bbb9706a02725bbd5b4c78bc04e50afb888329367641945", + "chksum_sha256": "b9cdedfb409a6a585b41bbb846c76b74db84cecab5bdbfeef8886855f6cd1a51", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca080f4e61b3ed9435f09d4ce2341f2851ab47817e80383ce5c329cb89216b8f", + "chksum_sha256": "e44e3d1b77f9197ef4361d6dbf20eded541d03f581394845c3696a83e441f2ad", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fccbbf49369445f70a482c85b55c078f9cadd67786a0a013fc6698b25100108c", + "chksum_sha256": "ca080f4e61b3ed9435f09d4ce2341f2851ab47817e80383ce5c329cb89216b8f", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5beb898fd85dd55c16543656a24d0f3cf81103d0b4a3b9ac5c0986a4f630e703", + "chksum_sha256": "ebe78d90845598db5bbb9706a02725bbd5b4c78bc04e50afb888329367641945", "format": 1 }, { @@ -5811,31 +5496,31 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "007a1de94220246c924b2d51649d632c2caee32e05fdb91f25df2e14e0e602e8", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "def5a49dd2014e2079ca9312f36b626f9bfe5606d255f306eec9dc700ae9f7a0", + "chksum_sha256": "c677840c5b24b7fbc56a54cbe609c24c198bf12cb1b9db9218316a45f9481211", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/vars", + "name": "tests/integration/targets/ios_lldp_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_lldp_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "887240ad30c1751c17e47be11a0cc78b5c323d442967b30457bba74054d6ada3", + "chksum_sha256": "5e606724f5e050623ada8c3ebac4a083abdd02767b5957a2a8904f043d62e05d", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lldp_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { @@ -5846,24 +5531,17 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tasks", + "name": "tests/integration/targets/ios_facts/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "093a68ecff9678aad9ed8e47c822c8dd795b7f5b6a14493bbbfe1d67a378c324", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_facts/tasks/cli.yaml", + "name": "tests/integration/targets/ios_facts/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { @@ -5881,20 +5559,6 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_facts/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_facts/defaults/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", - "format": 1 - }, - { "name": "tests/integration/targets/ios_facts/tests", "ftype": "dir", "chksum_type": null, @@ -5916,6 +5580,13 @@ "format": 1 }, { + "name": "tests/integration/targets/ios_facts/tests/cli/all_facts.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e8dc5bf84ef359c8b9110d3263998c4104a821dce2f3d80475e69e3ca4d781b3", + "format": 1 + }, + { "name": "tests/integration/targets/ios_facts/tests/cli/default_facts.yaml", "ftype": "file", "chksum_type": "sha256", @@ -5930,1627 +5601,1732 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_facts/tests/cli/all_facts.yaml", + "name": "tests/integration/targets/ios_facts/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_facts/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c5dd6cf0f7fe495fd14458aafe778ec70adcec1013d6bfd57baed70599f98c90", + "chksum_sha256": "093a68ecff9678aad9ed8e47c822c8dd795b7f5b6a14493bbbfe1d67a378c324", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_facts/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tasks", + "name": "tests/integration/targets/ios_lacp", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "79c7a4587c7a00a2c7a91a5eab3b092671c730ab0c82458102614e087ae32030", + "name": "tests/integration/targets/ios_lacp/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lacp/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/meta", + "name": "tests/integration/targets/ios_lacp/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_lacp/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "34537c31909d55ab6461991eb2ddfae9e4dd32b1b7e01133aa040dfe08ae02b9", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/defaults", + "name": "tests/integration/targets/ios_lacp/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_lacp/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests", + "name": "tests/integration/targets/ios_lacp/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli", + "name": "tests/integration/targets/ios_lacp/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d11cd0691705a44a06275d2438229562d70cb6eeafdfd7823c306fae55ab7974", + "chksum_sha256": "45475bede19466ee41f4b1d966a80c10988ece6e1ea77232c4c9883ef2f22123", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ae384d2d361bfec3e5ec8d4521923a328fd0a6b06ee0fad2dc813650f4867af", + "chksum_sha256": "fc650f89a8a2ebce685210ae5fa3d65d1d31652a993164005d3327f4861881b6", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4a3bf0d0d675271115fbfcb01d220b647d351ba511dff0d16d9f8d7468ce8ac6", + "chksum_sha256": "364387abef4d57a5903ef74f788703e41ed604a98ef24bcebcc837c85fad934a", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "41fc0f1077783f0157b1bdae02da05009bd55cf31cfffdce93f25490569c7eaa", + "chksum_sha256": "bfe347a63f6fa9d686ee7151ca4344f94c3fdc8c7e1ce73a637ec9e4924f38fd", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_add_port_channels.yml", + "name": "tests/integration/targets/ios_lacp/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", + "chksum_sha256": "2ae637240277ae729d901550cd50ce19b6b29b1eca663eaed8ce011bec832615", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "45de9b52c7ab6864f1abd09fe743ffafdc10eb084285f98755c9ec21137e9bb0", + "chksum_sha256": "744f90515ff83553dfeff83df0ccf4aa826c3249574c42686fd9d6c41394d19c", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9ef52fd6e4d52c3bdf173bf2d2c13f4ad7515dfd508f93e70d00f951cebc8d5", + "chksum_sha256": "83fb72d50e9f4e9ff7e3b906e1b4dba8ba4a08b0c8ff81c130a6b5c95c2c86cd", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dae7f6e33417854fdb686dc22ab25acf7ccd05b1cd088087f4b6777012ecd7c4", + "chksum_sha256": "be1b9226490c3801116b3325385dedad65ee514e21d853298e2aa94ca9f16766", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_lacp/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c30f577272b1c7bdc04fc0cf9a016b5c004a93f0e7d09cdb4bca3fa5aafeea8e", + "chksum_sha256": "ce393c8b6381d3030b5d2d12e7338fa4423cf1891c816db296f544467860992a", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_lacp/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af7be4e062acefec5cf61c6cc7ad3cb369db2b641ae00f229621ee62a47fe90e", + "chksum_sha256": "68518c550a5a993fc26f2508bbf71ef506bcb2eb7101ac3005ec4b7163515459", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_port_channel.yaml", + "name": "tests/integration/targets/ios_lacp/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lacp/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18e91e2791fb6dd738d3042718436ae3244dbd0a90b5f1886ed5a5daf1d46ceb", + "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_lacp/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "59d406ceef4165fcae86490c8251a719575a113ebe80cce578c1e4b67c974225", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_lacp/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "523ce08d67e26a55d5ae1004bdf73f5f785348437c918d98179f5bb01e403839", + "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_linkagg", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_linkagg/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_linkagg/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0ce0f4b8f4ff19ca8202594612bfff8bbe94ce65867e3db6e3e9bde4354c4c16", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/vars", + "name": "tests/integration/targets/ios_linkagg/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lag_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_linkagg/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7548cef68905ad34af6e5c02e932c61e8eadc317b15831fca6346a128b89f7bb", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces", + "name": "tests/integration/targets/ios_linkagg/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tasks", + "name": "tests/integration/targets/ios_linkagg/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/ios_linkagg/tests/cli/basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a46304602c050830a04642d790e2c32e7ca38138a3115617a321b0aaa966ac9", + "chksum_sha256": "01543795b9d0559974aa6eb2e501541a442c6d8a61361ab6ce30eb7d7a0610e3", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_linkagg/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_linkagg/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "8171ce9eb1bd2474dcb5e0f86eeb142567bac349514708f53c24829283fd382e", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/defaults", + "name": "tests/integration/targets/ios_linkagg/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_ospfv3/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests", + "name": "tests/integration/targets/ios_ospfv3/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli", + "name": "tests/integration/targets/ios_ospfv3/vars/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "5d9a640abfe561027b4afaadcf0306d9f52437a9ca11c8c6bd33aa39668cfc2b", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_ospfv3/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3989e7f762cbbf518de2b3778ab60754ec12e403c145956777cbab0962368206", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/deleted.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "26b38d39df6a806126bb1981ac16b20707118f8d4b4bf77036dd328705ed3b76", + "name": "tests/integration/targets/ios_ospfv3/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv3/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b052384eec330f45bc81d36118752d8997371068252fc29e436bdb59391de045", + "chksum_sha256": "616e7d9e3cc11d85aa6f6948a80ba8ad080df33b6fa2574e58ea96dda1b8b4d7", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5e5d0eebcdf9df91bd9427cda551ac2faa5b3c91559e742a18ce0eb59d0b5755", + "chksum_sha256": "d825c44ce8c9cec4e8b41ce23a867b76e766c6e6a3491d6621585bce8bdd57c3", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "02c8c24f18a12ddb0ed2b7d21e39eac17a3c36787f8ff145223ca43af0c02e42", + "chksum_sha256": "21aabfd4dd00cabd0670087c3f46d8f3cf0dac51e013d14790546ec52612579c", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3077db7d9d462cc53d8a755d6ff91972855473a4303ea49862dd1c26b1345816", + "chksum_sha256": "72297b557d1b34d29b999d26e00a0b28d813fd1e458338acd1cd3b24b0a35aab", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5f0b6df959031fc5ab1736f470d21d0d029f71711b916b666e8172e5af4be64b", + "chksum_sha256": "2bfc27b217fab25508ee8dedb4819c40bdb98b3352c464065f8ef169622f4384", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_initial_vrf_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25ed4323da59a62b27fbd759263f146585f660557ae20c810f4a00602a4584d1", + "chksum_sha256": "7fb8dc743143aa6677f024b7333e02bb1f52f1a9c434cd86e1617b442dcc8a0b", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "135c4a4d72895e789f33ef5d20039e4dd8a1ddb92402b8fd25cbed9d3cf993b6", + "chksum_sha256": "75178f12ee6688bc6635aafb6d83adddbed9b5a0d12fb9d39c819afa14adba64", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3860df920e3f445383200f9261984c3a4bf72d7c93ad252ee8bb237fe2acc163", + "chksum_sha256": "844b1f73132324bcee3f3390fce22388df69b69e4266ffebbdd4c5d6a8a4c2e8", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5e5626f01eb1f6cd90237efc8972743f594500e8f3fcb34f8f0e6752069ab2c", + "chksum_sha256": "238918c44b8752332fe7ee6df2e293a51da17252fdf2362b337e6a897cc224cc", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "168cef1691a6a4585ce66751fe0e9520573ac71ffbe016a9a3f239b195b9a8e3", + "chksum_sha256": "c8f73d52be036135d76b6157719db5f9bd4f7761ebeae5618e48a339ed14ae4e", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_ospfv3/tests/cli/merged.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "c70156e646606c78e8221d3f09140d0be29bfc307756e6f0993b02b78b8fe9e9", "format": 1 }, { - "name": "tests/integration/targets/ios_acl_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_ospfv3/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f860d0bfa1a178cc8f9426b3e865a1e8db7123ea9dbeed64494fb52dca4875c4", + "chksum_sha256": "23df18165ce662f9a6837926a752e92d9c0500334a68492ae8607c2385b4cb29", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_ospfv3/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8a735801dc4fc0769f2773722caa333ada8c5c41daad731c271c185ff1d6a040", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tasks", + "name": "tests/integration/targets/ios_ospfv3/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tasks/main.yaml", + "name": "tests/integration/targets/ios_ospfv3/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8e9a834620253664b73e74d67506006c5a301715f7b7a867c5bca4334f82ece7", + "chksum_sha256": "2ee4493aa601f74dca37f18dfebff80578f8ad47283d1921825a9036bae468ad", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ospfv3/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/meta", + "name": "tests/integration/targets/ios_acl_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/meta/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acl_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/defaults", + "name": "tests/integration/targets/ios_acl_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/defaults/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "f860d0bfa1a178cc8f9426b3e865a1e8db7123ea9dbeed64494fb52dca4875c4", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests", + "name": "tests/integration/targets/ios_acl_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac7be197d9f1c5d050d19763c77777eb76e358ee919bb8f9cbb9f9844dc88223", + "chksum_sha256": "e5e5626f01eb1f6cd90237efc8972743f594500e8f3fcb34f8f0e6752069ab2c", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b4046f281274bc9935c8cde1acc6b9be307f1b7ef9fb583957e1322b0c082d60", + "chksum_sha256": "135c4a4d72895e789f33ef5d20039e4dd8a1ddb92402b8fd25cbed9d3cf993b6", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "df41c3a26d7834ab66fdfe1b2faade9c312e8225c7bc99d736308371f3600ea2", + "chksum_sha256": "168cef1691a6a4585ce66751fe0e9520573ac71ffbe016a9a3f239b195b9a8e3", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7f164fe2b72297a0ed83c0dfde78abb1673ebf7715469c55d263904c54e75e8d", + "chksum_sha256": "b052384eec330f45bc81d36118752d8997371068252fc29e436bdb59391de045", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9991663c3944fd60eb5c0dd904a88348ce7ebdb04550a3e596b92b67c312a8fc", + "chksum_sha256": "5e5d0eebcdf9df91bd9427cda551ac2faa5b3c91559e742a18ce0eb59d0b5755", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9107ec621b5c648121c0917cd969eb12895ff1bbd5164798902d8fade0887608", + "chksum_sha256": "25ed4323da59a62b27fbd759263f146585f660557ae20c810f4a00602a4584d1", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d0f8053909d848db5a593451794962888efd2e041f710294929ca1bdde0caff8", + "chksum_sha256": "26b38d39df6a806126bb1981ac16b20707118f8d4b4bf77036dd328705ed3b76", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49d07d449a90342c4a3b2605f7d2e5a99c3c04952701ea4a1d8b29b02577fa49", + "chksum_sha256": "3989e7f762cbbf518de2b3778ab60754ec12e403c145956777cbab0962368206", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff7c6c2838c19016776a01f6d6704aada960e930a0829c0e47e847c70144b9f7", + "chksum_sha256": "5f0b6df959031fc5ab1736f470d21d0d029f71711b916b666e8172e5af4be64b", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3c56d9e9cfa1c23282710af3f23af288e856f3ff9134cc411a498b186c2df4c4", + "chksum_sha256": "3077db7d9d462cc53d8a755d6ff91972855473a4303ea49862dd1c26b1345816", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "85fea8de40eb500f7b93f6842ded059cc8f3e346d902a06028a4869db7e19b01", + "chksum_sha256": "3860df920e3f445383200f9261984c3a4bf72d7c93ad252ee8bb237fe2acc163", "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/vars", + "name": "tests/integration/targets/ios_acl_interfaces/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "02c8c24f18a12ddb0ed2b7d21e39eac17a3c36787f8ff145223ca43af0c02e42", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acl_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_route_maps/vars/main.yaml", + "name": "tests/integration/targets/ios_acl_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "707242064a446604688cfa42b04d777ff801846293ade1154dcb3e82a9badfb8", + "chksum_sha256": "9a46304602c050830a04642d790e2c32e7ca38138a3115617a321b0aaa966ac9", "format": 1 }, { - "name": "tests/integration/targets/ios_system", + "name": "tests/integration/targets/ios_acl_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_smoke", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tasks", + "name": "tests/integration/targets/ios_smoke/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tasks/main.yaml", + "name": "tests/integration/targets/ios_smoke/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "68e898ba92f5164ddc8cc51967c5e2876e9002699d528634a67f2183dd558d39", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "name": "tests/integration/targets/ios_smoke/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/meta", + "name": "tests/integration/targets/ios_smoke/templates/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/meta/main.yml", + "name": "tests/integration/targets/ios_smoke/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", "format": 1 }, { - "name": "tests/integration/targets/ios_system/defaults", + "name": "tests/integration/targets/ios_smoke/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/defaults/main.yaml", + "name": "tests/integration/targets/ios_smoke/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests", + "name": "tests/integration/targets/ios_smoke/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli", + "name": "tests/integration/targets/ios_smoke/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_lookup_source.yaml", + "name": "tests/integration/targets/ios_smoke/tests/cli/misc_tests.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10e512f2cf5dc0fe7c9d3cb0188fc3dc96dffa68beb61895d88c8dc422c886e7", + "chksum_sha256": "7eb9e4e697c8432c1a40e9408f7638d887c347aec871bfa157bbd7c3f0586b95", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_domain_name.yaml", + "name": "tests/integration/targets/ios_smoke/tests/cli/common_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4bc85f65fcaa284e9503fe5643f16111f14daf7ba677abd84daa04302f8b007d", + "chksum_sha256": "3cadb8dae7de5b5be84fcab95fd6e5f65816069841a996010af41c32b8438897", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_name_servers.yaml", + "name": "tests/integration/targets/ios_smoke/tests/cli/caching.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b59e7228e155bfcbaa1863f12fbbdc641e01c2fdef2d6bd4f4aeb2f3fa96bddf", + "chksum_sha256": "618ffe0e7bbd5a6d4e6172cdcca046317acbb06f8dc8b4de4e214fec6e642640", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_domain_list.yaml", + "name": "tests/integration/targets/ios_smoke/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_smoke/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "592210cc1bf19177523967179ec83b786b9c60d9341acdb087e739911876007b", + "chksum_sha256": "7f9fa924aaef2895a7bc9899ba35028617be0e242888fd3558903a9a5c621bf2", "format": 1 }, { - "name": "tests/integration/targets/ios_system/tests/cli/set_hostname.yaml", + "name": "tests/integration/targets/ios_smoke/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "810d48f3ce471254c763859c7d33ad70b06aaa28b45712179b4794f3b5a667c5", + "chksum_sha256": "6cdc2604047d999342d2e29f3a546b9f8ceab22e37c2d4eaed5fb596bd4cd2f0", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep", + "name": "tests/integration/targets/ios_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tasks", + "name": "tests/integration/targets/ios_interfaces/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7607c1041a822e911d328c572b5986636a52054bad2895b89c4beb7861755017", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_vxlan_vtep/tasks/cli.yaml", + "name": "tests/integration/targets/ios_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/meta", + "name": "tests/integration/targets/ios_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/meta/main.yaml", + "name": "tests/integration/targets/ios_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "e8f3979e005bccc2337f70eee9f2a8cae18b80600e2336e64eca1c1b0552b4be", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/defaults", + "name": "tests/integration/targets/ios_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/defaults/main.yaml", + "name": "tests/integration/targets/ios_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests", + "name": "tests/integration/targets/ios_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli", + "name": "tests/integration/targets/ios_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6e7e8c2edb74ee0476b0c4d83a52c84e4230c16e3c3d051c63c6fc63018c4211", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5665b8e91a6bb98092632ca9952389b634005325762d970aa987bf0523ccc882", + "chksum_sha256": "c3aa08c205d7535bccd127dd4f2561e51a2ec026d151af29a27161cce05fc3fb", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "149f7e871cffbb37baa730d0dc0a4964723f90d64d0f0a409ebd923b743e682a", + "chksum_sha256": "ef6bdcebaf77721c230b529ea6d8930afd19840ad644b09d7a9d9e8b08042a64", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c7f20dee20d06af4441f5369836e86db1aba0bda93cb50caa49e6041ae98dba", + "chksum_sha256": "c9f8c4f20831746975e125b2813af5a924c6ec65692e3b373b62cca70e07bac7", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "61c3a851e2d056cec1479981c331fd2a4c1126bb8bbacd5c38ed0b4e4ff026c0", + "chksum_sha256": "37d322a0d70e5051c2f54be098c6cb7261c5cba19d030d69c87c9a25d05b3a2e", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2dbca0fd8e9d00593a5785ab68cb246e21a2ac99fff6970ff150710c246f1927", + "chksum_sha256": "191fc3bbaf3d78756bb2ce23765cebb199b569f0f7b88689063d00ee049db9ec", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c56eb808c76e38656a84bb5e725dc14af02482efdb85d2246613aff63e9b52cb", + "chksum_sha256": "3830de884a4d8a13874f4bb664a6dfe92240148a26f2414fd430051e40752b1f", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b9a801456bd9db90925de5fb3ddf02130ebf6e4de5abbc8dd0a3d8785ade822", + "chksum_sha256": "8de2097894aadebd181dd7ae7d0f5dec4cb017ff95010899b37d3bcad6bd0860", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/_populate_vlan_vrf_config.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "455e27f59263b50ef9ec28db7556b9746070f5672cabe83cb0c03f6103ca3918", + "chksum_sha256": "7d6150da669c91be1f6470c7441e2bbac682c7b78c59eb2bccd837230b68e2d8", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d54c5dd89c14a5b02575b8e80f647bc66ba075563571e876e5d471beca81c10", + "chksum_sha256": "b5f19e8e25cc5e2704ded61eb61d7ee0095acc136e1380809cdf47f12d8bbf17", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67f3d6703dbc41fb80ddc9360a8fd99addc2dbd17258b2e3d4bfc859c604d867", + "chksum_sha256": "96501d4ff6cafdb68d01c77d5cfeaf6b9c92470d76db8d43b694671c2459e741", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23ba22f2eacb69c8cda7d4bc0b8ffb9b9b4e3c8c2499e8512fdd09ed136e051f", + "chksum_sha256": "49b157678ba5cc812ab3a5344bc492003e8cb6b1f849ae168b81f48ebba8ff83", "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/vars", + "name": "tests/integration/targets/ios_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vxlan_vtep/vars/main.yaml", + "name": "tests/integration/targets/ios_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bbcfaab60d1b44f73192415eef696368496e56fecd0d5f6384a36f6ed0bf500", + "chksum_sha256": "c8f9dc60a371baf0f3c770c2818e2feae840331bbf85a9c23ba3d2cfdfe13547", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tasks", + "name": "tests/integration/targets/ios_evpn_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0c72f070fd187ae7c13c368647de220f6b254ab856db38328f952f012461f480", + "name": "tests/integration/targets/ios_evpn_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_evpn_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/meta", + "name": "tests/integration/targets/ios_evpn_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_evpn_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "a930c7415288124acd312b6bc09b1120f8f8085b31c7267a1e183467377b70e0", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/defaults", + "name": "tests/integration/targets/ios_evpn_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_evpn_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests", + "name": "tests/integration/targets/ios_evpn_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli", + "name": "tests/integration/targets/ios_evpn_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_vlan_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "89eb56e9a96ba32ab65009fc09ebf8bbbeb74843839557a70f1c76c3ba2f2c58", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e5c3d3a3d316de8d72b101a3200a8e81785710ef1f1386c0ea3dbf5da45eacda", + "chksum_sha256": "e0e4acad796d01a6db7a44d08d8ae4a7eefa3da818382224189c30eb5c6bbd92", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b04564f5e0e3b1f5527f25e60a42766131d47c8f14e5704c558156a2d901654c", + "chksum_sha256": "1cb6068d536690bed4bb86b5901cc97b78325b5ff9a6104805278172427c9af3", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ae60010ce6b859e677cd2fe0443293d0cbbfb6059f00416c2827998f8dba96c1", + "chksum_sha256": "1ee5e0cd3f90d1d5461cc3de8eec434fbb245688d2c99d12a477d0ee565f19c9", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2df68349950dac68eddcf5f1560371ca7d58868b3d5c978bb2047ec1d37a908e", + "chksum_sha256": "8c950ea407d98e84ee9ef11ae5f11cdd1402a460f48159591eed290af69aa730", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "094afbbdd9097ab670c41df21b081705791bd7efa1ff26a741ccd2f9a21ed2a5", + "chksum_sha256": "e6e04317befb43f382b3b5e4e37757fd905ea5f8099327bb255ce3031da38285", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "205a1557e675e86da5aa68c11e65648bc868852e81d2d483ffdacbd72e058181", + "chksum_sha256": "54905a1be066debe036046408f5d40d3ceeccee3074090e3d1c459aeb4355e67", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b4e94db711765525756701212c456abfea84fb4c38cb4cd45c9010dbad93927", + "chksum_sha256": "df48d4875d6c309498c93bf1654170b5de8dd36f00cad9b7dda06fa0ec6135d8", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "18a86eba9dd5b79bedad92815399beb362a10c96e402b18fc70884852a2c502e", + "chksum_sha256": "bf27aff9be6f72a1bac5da95577b426f851356b9afa907bc35a5100f51b3500c", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "557b6eac4dd1d40678d52e9f59e84d8f9cddaf70a6be82787d43785fae35539a", + "chksum_sha256": "0b7ddb734d42978b5ebb82d436a354e8fae2fce18e60a1546f2d519cead08390", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_evpn_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91412f73bc4b57376bf22ae459899b858383999655c2365958695393758ff1ae", + "chksum_sha256": "1c1eda73556b1082527e3387499aa6a6d5d6734bcdd7070409964563ef73734b", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/parsed.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "aa8e71b9953a2d70da7fac058ba031f21cfb5bfb71df81285552b5aedb16328b", + "name": "tests/integration/targets/ios_evpn_global/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_evpn_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05a8a3246332f26b13525220bfb3ae2df1369eafe66f255ee76dc5d7d801fbd8", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_l2_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "40cba4a01ca4d7671041cd1c34aad247ab33b8027f3143233bab09d039780e3d", "format": 1 }, { - "name": "tests/integration/targets/ios_l2_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_evpn_global/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c39e3586ef18b985c228717ae7eac1e306f5e77a15d450a24628cf72e2d7e0ab", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans", + "name": "tests/integration/targets/ios_evpn_evi", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tasks", + "name": "tests/integration/targets/ios_evpn_evi/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8fa2acc83e477a128ac38edeec64fee41b19c60ee0c81a9c4fc633958a687a73", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_vlans/tasks/cli.yaml", + "name": "tests/integration/targets/ios_evpn_evi/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/meta", + "name": "tests/integration/targets/ios_evpn_evi/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/meta/main.yaml", + "name": "tests/integration/targets/ios_evpn_evi/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "d8d4519b069cabc7f791adda0fc239b41ce354dd4eccb8f1929e2503910fa16d", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/defaults", + "name": "tests/integration/targets/ios_evpn_evi/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/defaults/main.yaml", + "name": "tests/integration/targets/ios_evpn_evi/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests", + "name": "tests/integration/targets/ios_evpn_evi/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c2f157243c1f0874051f031c51813641fc2d08529e7d97971f10e15553acf3fe", + "chksum_sha256": "f152c59eea19452042fd7fd86a18ec51a8ba501b488f2a104e81e7a4099fa617", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cee0574690e1a22ae1502659dbf76f95aa0f3adcc742e32a25241043c9eaa20", + "chksum_sha256": "78274255f88531ce6799143d0f15f9dcc4d350c92ad3d792cc49a8b8ed5e45e7", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "babf6f1d0227a6f5013632fbe2c7ab70a01b1991bf1683a11bf9d60d23cff0cf", + "chksum_sha256": "d2729d3bd7841494cddd0732bd7a9c75663bb18eeba552161426cd88ede87611", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1855d64d7d7700e8da4e69c4df727cdd37926f720867dcc87c05fc443b14ff99", + "chksum_sha256": "d6115bc64148a4cb99bde23fb20e1b7d90cb8e08a826d1ce988b56d1aa56f959", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bc3030e1201026ce580492c74f1762660e20ae6a9c6945972ecc0f65cf3a0dc", + "chksum_sha256": "0b5dffe39805b32781c56cf69f5dd7cb5102da1dd53eaa29f011001e009ecb83", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7bc4328acfacc36056f4f9fd2ed9cebef987ba490730967a191721c62993aa5", + "chksum_sha256": "7fc6dd9b2d30b6cb5e0785ee409ed4afc0ba34e469fe18e024bd003985a38b65", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "19bfcf9b214bd48339bd025b2c044eb3a640bd46b88442f4dc5337faadc0e18c", + "chksum_sha256": "0a5f817b301780f98b42b3ff17ee875ec1da8cec84cc5196cf2e87eab9ecb05b", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ffdb8c877c749e808b435c833c92f3b7d7343d05c4ba8d8f1b39e519b1b63a2", + "chksum_sha256": "c8a64e95f6b485fa79daf39dd1f5c2e160ced25717df889d6c63f6054a227673", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed_vlan_config.cfg", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5921afbe0954f8ced2a95ceba0ffe19b6d3e0b31e50dae387704727e4602aa50", + "chksum_sha256": "58d8e5d48d73a1c2b302830fc55a50f3c53e60f612a2e20f0debee651a912062", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d96a7d3e3bfe8da463bf2dd734b70aa86db1e98fa4307435ef430e0574a732dd", + "chksum_sha256": "4244b8eb838cb04aa475d98824e7a4f314f6ad599111c8523185cf346b2074e3", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f50d841acb552a2397492892efa62ca868a227651d2cdb2179a4bd3da66c9817", + "chksum_sha256": "39b3e0b71234dc27e4baf2b26606120f452be06e624dfd6242133ad5d49a13cf", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/rtt.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "85a1aebb72960e9ca957302e141f03debf96a1ab54926905a182b6f12fc2bb55", + "name": "tests/integration/targets/ios_evpn_evi/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "96631f083020ab2d55c8ad66ef70bf26942bf12da2864a3b45b8afb934e5c7d7", + "chksum_sha256": "ef3434585fe8063da82d4d92c7cb20198bb9cb86fe82d49b0e8eba3fc398f561", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml", + "name": "tests/integration/targets/ios_evpn_evi/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c50c17d5cc8d365e9df2d11698f67bd0a6f8650dcb2b3c7cdbc2bbd0ce82e58", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/overridden.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2d7773b3edea41259b34dbfefcc4c7a543c6ab3c1a1a2d85a334d0cefad37b91", + "name": "tests/integration/targets/ios_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_config/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "31dcdedd876672aa1f15ac36c7b35b156cea9795b15f686e40b2eecaa0ea5392", + "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml", + "name": "tests/integration/targets/ios_config/templates", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/templates/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/templates/defaults/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "56e174577879e139ac99b46f2588b9c101e1667faf4fd9ae1b59cab9466979d9", + "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_config/templates/basic", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/templates/basic/configexact1.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1b9940730019c5607914c500f4e39e23b55fe858a6d0b276c96a28e72f222049", + "chksum_sha256": "a112244df64f4360549463724af9ae4c598c3f39c22310a4d0a98c44cf034408", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/setupblock.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d90eba79cf10b15a5318824e1fbc6e877db3951526be828180d47a3d1f8aeb03", + "chksum_sha256": "c7e470728246324f9d35d7d1f36e53f10a1d424cb9b14aea8ebd22ae03384985", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/acl_config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9dcb409a302fb60386633c000240bd99c7e1a925e59d940604e6b1319d138eb8", + "chksum_sha256": "819000cad7a1b4e27b8b206fe04b2d18c0bbba7876801d9f2786c94f76482050", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/macro.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7c3dead8718d5c971c74c59bf6c3eee8be63eb99fea05c03b0aba14e2994c4c4", + "chksum_sha256": "240ea6bffb5f8140b8fb61c0e4505e89f76ea5c0ade1103b63b25c6024e57892", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/templates/basic/intended_running_config", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c8e4ffd5cb273c2c92fe0690fce9249386fbd72ac0e77872e8fa2cb1c256138", "format": 1 }, { - "name": "tests/integration/targets/ios_vlans/vars/main.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/config.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cade52f40e5745ea62114c4c0c970e7f03db0578670180c7ddbd4d968a0ebf1", + "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/templates/basic/base_running_config", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "7385f5112a2ea15a4ca3f480bf6830bf91439a67073d846367170819b02692c6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/templates/basic/configstrict1.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tasks/main.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/configblock.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3ca85e538cabf8bda1ebd32dee2b5803e8e171ce955d7affe2f1417283cd92d6", + "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/setupexact.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/templates/basic/setupstrict.j2", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_config/templates/basic/configexact2.j2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/defaults", + "name": "tests/integration/targets/ios_config/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_config/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests", + "name": "tests/integration/targets/ios_config/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli", + "name": "tests/integration/targets/ios_config/tests/redirection", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_config/tests/redirection/shortname.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6645517abeb9ff0bea3331bc844b12c1382b0eea4178be0dfa523a3a38c5a97", + "chksum_sha256": "a9d8f38448bbc15b4db9520e986758afbb1e4332917cfa4e676c4726ecb1324c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_block_replace.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "338693405501e01ca57d2ddeb40f482891c029a986864fc98946fc266265bf13", + "chksum_sha256": "b9b16a4833c6d7626d43f1c1e90a106af469adc1f3a032875e78e13c6b563e5f", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4395e95e40e7a0dfcf80e05ade1c443c37cfe70fe80fc4fdcfc0ee48ca7bca7b", + "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_strict_match.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd72a9b920445f668d61b31646621e0f9587851e61eaaa071f8034468e3fab43", + "chksum_sha256": "faee234111770cb64085b9a25509c53fbd3fcc6d783bebff7592a0cf5ee4e317", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_basic.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c0c23c50849c89a60cce7588ee594c9f12fc89ae710516e3371d9cdf23bbdfbc", + "chksum_sha256": "28f51d7f60e5fcd45a211c50797cc4142a3e4784cf8619ed41eadf1a630e4629", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_config/tests/cli_config/cli_exact_match.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7ef2eb2c6dd20e38ac7f6058ced2a4902a838cfb902e8a32e33fc83bc8ffca5a", + "chksum_sha256": "3445b7155b0702ea632d8e846e514af4e58679edf35a1b00034c1f33611c7bcb", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_config/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_config/tests/cli/toplevel_after.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3d05e7ad3cd69bd4b423def7c76b0200ec3daff4ce28f945cf1b53a001c52d95", + "chksum_sha256": "c80fc079cc0294cc808809f7524cd26dce8746cb3cbceccae5947c26a53bba77", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_exact.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "adda4ccbcef419623366dff6fd814799b732583587c8b71b9a49638079cf4c7d", + "chksum_sha256": "8ff88256789e8892cc5604826818b4a694faa8dd37d8de6f37a06535724dedd2", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/save.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e822477d57a3e430f8e379be1528039e6e4ee5eff278141cdc2c3f5c4ea4ad1b", + "chksum_sha256": "2fbcbac7be1a2444b9866a0312ebd7f30691de74f434b693b301e1b667efbc34", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_initial_ipv6_setup.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/src_invalid.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a2472a61a85371edf42157eb38de6446a90882922de4471337054194b698dff", + "chksum_sha256": "e37382eede72ae657893c3933a8e6731db78596f46d5fede249d4d050e8f12b6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/macro.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "843a2bd9f2693a11e665a5f552e9de54fcc379ca3e06ee80ba2530f9077acede", + "chksum_sha256": "c50af815c1122d68ec8aa76f0738a923e3100ffbdce96ec9f6eeda091001ff12", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict_mul_parents.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ff7d15cb956c6a22c1687aee06920653392f08ff0e53223afbab89ad7c7c98a9", + "chksum_sha256": "ca18a9f33f955ba25c6df6be5108b58cb0b159406b531931d7886b65ec1a0316", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/src_match_none.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f097e25e0459371162a4d0d2b645ae9ca361ad5d7fce778cab8793d7bcd2f433", + "chksum_sha256": "3b6ae94a3a40d6baa6400753b0273af9e1f0c693c0b9d02a216b4d16c9afad67", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/sublevel.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "81e93d0c4240f0c189dcc3db9d2887404f6f79ccc22a7ae9d8c2c616a823ae23", "format": 1 }, { - "name": "tests/integration/targets/ios_ospf_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/backup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d904ba1b1ee67876b5c1db5e8a2c063c500c99af83e05fd36d7584745f906957", + "chksum_sha256": "e567e119083aae3e8dd3739d64db3927cb554387079640fbff99b1d6b79f267e", "format": 1 }, { - "name": "tests/integration/targets/ios_user", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/defaults.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f299c02b02d7c454dd2eaa7eca83f4306f99b64430892077955f5159b3009031", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/toplevel_nonidempotent.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "25ef9f513a03aa86771b90bd0d22940459f94fa3b2257ae7498b9217a405bb9a", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tasks/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/toplevel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a8da0d0bc00401711103caf4be61022ba74b53c8296bfcd784db7ea4853111c5", + "chksum_sha256": "f45a6bb9f23763b221df958302548d88734cedb25ee2edc0fe1ec86be00b4e8b", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tasks/cli.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/diff.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "c4223635f760bffc17141049ab0cb3e09c3e9b2a53398754c740569c1244a548", "format": 1 }, { - "name": "tests/integration/targets/ios_user/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "ce6faa181c1fb7ab5ba44db51d418b0120a7d110a3f4373e91ce02987a76fefa", "format": 1 }, { - "name": "tests/integration/targets/ios_user/meta/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/toplevel_before.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "289b05fea7a7180ab37fb5e04220fa7c387634fbfe67e997d39ea44e53b6b03d", "format": 1 }, { - "name": "tests/integration/targets/ios_user/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/src_basic.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2544e95d1ed36fd4c73cad6dd719051035205bfd414ef4d6bbb73fe7e592b981", "format": 1 }, { - "name": "tests/integration/targets/ios_user/defaults/main.yaml", + "name": "tests/integration/targets/ios_config/tests/cli/replace_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", + "chksum_sha256": "7cbde273238be56ec3dc2174913de0c2933067aa634987a04dd7fb72fefeac3f", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_config/tests/cli/sublevel_block.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "91c95c35263639fde90b44f93f0612c0a7b3c510f325285afe281d9fc121e58b", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests/cli", + "name": "tests/integration/targets/ios_config/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests/cli/auth.yaml", + "name": "tests/integration/targets/ios_config/tasks/redirection.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1f1317bad114d20ffe0ec55fcda33969a2575dc965be99b58cefda6742beaebe", + "chksum_sha256": "4c45a3649d432bb34bfcde5f3557848f294212fdd78da9b1c0f9b98176f462ce", "format": 1 }, { - "name": "tests/integration/targets/ios_user/tests/cli/basic.yaml", + "name": "tests/integration/targets/ios_config/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "acbe615c9d6ee6c43971ed6986a31ed4e769c623d8f91f2258bbfb2255f76361", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_user/files", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "7011b000e1a4b28787b459b2a05c625052f68b10a1f108068ec805bb7a0875f4", "format": 1 }, { - "name": "tests/integration/targets/ios_user/files/test_rsa.pub", + "name": "tests/integration/targets/ios_config/tasks/cli_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4552b1d9416ac1be7c90b10b182a6ff4a4c56efcba53bb31851808c5d1fd787c", + "chksum_sha256": "5f583eec9d6129fbfe6d2b800c2013f2dff80308e21b59c9da1fa7382b6a401d", "format": 1 }, { - "name": "tests/integration/targets/ios_user/files/test_rsa", + "name": "tests/integration/targets/ios_config/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "660b96e5ac6d6bd17900490c4749ff3a63898bb155db0a661fefbd6ac6f0fc44", + "chksum_sha256": "100c25aa8e342471c45f4ced56d10739c8a7f50ffaf83531800819f0911615ac", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi", + "name": "tests/integration/targets/ios_acls", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tasks", + "name": "tests/integration/targets/ios_acls/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "ef3434585fe8063da82d4d92c7cb20198bb9cb86fe82d49b0e8eba3fc398f561", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_evpn_evi/tasks/cli.yaml", + "name": "tests/integration/targets/ios_acls/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/meta", + "name": "tests/integration/targets/ios_acls/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/meta/main.yaml", + "name": "tests/integration/targets/ios_acls/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "426d56b0add7f2c6df6469c2f33efe3a33443a413009f85d3a2a38e317b47ba9", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/defaults", + "name": "tests/integration/targets/ios_acls/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/defaults/main.yaml", + "name": "tests/integration/targets/ios_acls/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests", + "name": "tests/integration/targets/ios_acls/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli", + "name": "tests/integration/targets/ios_acls/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8a64e95f6b485fa79daf39dd1f5c2e160ced25717df889d6c63f6054a227673", + "chksum_sha256": "a6cc930a39872ad57c5b74919747421b13b0a0c985100d70763b27d0f646d0f4", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a5f817b301780f98b42b3ff17ee875ec1da8cec84cc5196cf2e87eab9ecb05b", + "chksum_sha256": "f94f4b6ca8fba96b34c1fde4b3bb9ddf97b049ace4232ea5c0549ac3be547ae0", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6115bc64148a4cb99bde23fb20e1b7d90cb8e08a826d1ce988b56d1aa56f959", + "chksum_sha256": "855485788ef3b774a156a6a7780597f2c73639a9da4f7093bfe3289ca1e67853", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0b5dffe39805b32781c56cf69f5dd7cb5102da1dd53eaa29f011001e009ecb83", + "chksum_sha256": "46fbc34461ca07fa76173803e47b59638be46b109cf3033e12ab8e741e66d203", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4244b8eb838cb04aa475d98824e7a4f314f6ad599111c8523185cf346b2074e3", + "chksum_sha256": "9c3c4569c578ec8336fa353111482916a96d9b9f7ab0f3262e9fe3fb92ce0f1e", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "58d8e5d48d73a1c2b302830fc55a50f3c53e60f612a2e20f0debee651a912062", + "chksum_sha256": "e540d6f58dd558e2d1f05fc134c8c4694f405ce8decd5fbc174ab20d83c19256", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_acls/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fc6dd9b2d30b6cb5e0785ee409ed4afc0ba34e469fe18e024bd003985a38b65", + "chksum_sha256": "40cfb30ce1b837e512a4e0a8e5d8aaa90026019732f6b712c49fa8f86c742f46", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78274255f88531ce6799143d0f15f9dcc4d350c92ad3d792cc49a8b8ed5e45e7", + "chksum_sha256": "2110fa4eadb1937613e4b408e6d87ec92dd2e55ea8d01b22a3f058fe670aed83", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39b3e0b71234dc27e4baf2b26606120f452be06e624dfd6242133ad5d49a13cf", + "chksum_sha256": "42615f514256b1a7d451a57c904dafc5c7887df9bd1c968f5332b28b65ee999a", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f152c59eea19452042fd7fd86a18ec51a8ba501b488f2a104e81e7a4099fa617", + "chksum_sha256": "ecf088fce17e2e3b5612311c4c10d551e1c0fc20716a2cba7f0424611b989fff", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_acls/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2729d3bd7841494cddd0732bd7a9c75663bb18eeba552161426cd88ede87611", + "chksum_sha256": "aaf7849f1fc016f09813c37599fa2f567313c681920a349d3976117ca61033bf", "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/vars", + "name": "tests/integration/targets/ios_acls/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "9c1d667ff016afc0e8e5dcfdf781ca4c5b871ce011ed3ae461133caee4fef0d9", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acls/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4aa123dc7a38645f48ca983339b0a43702f527b615514715a05689ddda18f592", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acls/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_evpn_evi/vars/main.yaml", + "name": "tests/integration/targets/ios_acls/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d8d4519b069cabc7f791adda0fc239b41ce354dd4eccb8f1929e2503910fa16d", + "chksum_sha256": "a35279615971415b54c2877e35c58f430c4b5ecf79ab75cf8b1145408aa2f1c8", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_acls/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { @@ -7561,52 +7337,45 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tasks", + "name": "tests/integration/targets/ios_bgp_address_family/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "af949d2e120137280e403535d60cb3485ba4baa88a48d465d066d2151defacff", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp_address_family/tasks/cli.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/meta", + "name": "tests/integration/targets/ios_bgp_address_family/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/meta/main.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "98104bf0b72b20bb2d54f132858264e8c8aa8ee26d19ec82834d92367f5e0654", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/defaults", + "name": "tests/integration/targets/ios_bgp_address_family/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/defaults/main.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { @@ -7624,24 +7393,24 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "46c2410786bf0f78b7645d8a6bf4dda5825d8949e13851505d83e30277257877", + "chksum_sha256": "4d452abe349d6f966fb7db5133c3039ff9ce202d6b98a16a157f405d7a6f1ce3", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_ospf_proc_setup.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4b82d41f2e4894c7d11e847a8e436b9e29fee5159acc72269f651697a7f62da", + "chksum_sha256": "6a2278af99b3d7b657b496333d700467810c0298ddaa567040b56c173f473182", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8dc8ef4a203fd9de24d4afe860f25acd653f1f3512c445be6aec069b6bf4b22a", + "chksum_sha256": "e7aa25fcb776c99a3453c4929c00250575ca72bce253914a95fd21d769fb1f21", "format": 1 }, { @@ -7666,556 +7435,584 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_ospf_proc_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "109f26ef884c25ffda307c25bf4180ebbb0c6a18b73e2509ade840be68f641c6", + "chksum_sha256": "a4b82d41f2e4894c7d11e847a8e436b9e29fee5159acc72269f651697a7f62da", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6447bcd80411c1d8f04d26582c2ab5dfef6ced7cd2be9a0681e609601bfe27e1", + "chksum_sha256": "d6cba5ef4746373c30e85d18fdf83be09ad50d9ee4c312a64422d34cb325e4a8", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d6cba5ef4746373c30e85d18fdf83be09ad50d9ee4c312a64422d34cb325e4a8", + "chksum_sha256": "8dc8ef4a203fd9de24d4afe860f25acd653f1f3512c445be6aec069b6bf4b22a", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6a2278af99b3d7b657b496333d700467810c0298ddaa567040b56c173f473182", + "chksum_sha256": "46c2410786bf0f78b7645d8a6bf4dda5825d8949e13851505d83e30277257877", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ed4186a91d1cb41e8d7d24196821f6a055801eba77fc72c59af07eabb43f25b4", + "chksum_sha256": "6447bcd80411c1d8f04d26582c2ab5dfef6ced7cd2be9a0681e609601bfe27e1", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4d452abe349d6f966fb7db5133c3039ff9ce202d6b98a16a157f405d7a6f1ce3", + "chksum_sha256": "109f26ef884c25ffda307c25bf4180ebbb0c6a18b73e2509ade840be68f641c6", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e7aa25fcb776c99a3453c4929c00250575ca72bce253914a95fd21d769fb1f21", + "chksum_sha256": "ed4186a91d1cb41e8d7d24196821f6a055801eba77fc72c59af07eabb43f25b4", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/vars", + "name": "tests/integration/targets/ios_bgp_address_family/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_address_family/vars/main.yaml", + "name": "tests/integration/targets/ios_bgp_address_family/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "98104bf0b72b20bb2d54f132858264e8c8aa8ee26d19ec82834d92367f5e0654", + "chksum_sha256": "af949d2e120137280e403535d60cb3485ba4baa88a48d465d066d2151defacff", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_bgp_address_family/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tasks", + "name": "tests/integration/targets/ios_l2_interfaces", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c8f9dc60a371baf0f3c770c2818e2feae840331bbf85a9c23ba3d2cfdfe13547", + "name": "tests/integration/targets/ios_l2_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/meta", + "name": "tests/integration/targets/ios_l2_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "c39e3586ef18b985c228717ae7eac1e306f5e77a15d450a24628cf72e2d7e0ab", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/defaults", + "name": "tests/integration/targets/ios_l2_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests", + "name": "tests/integration/targets/ios_l2_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7d6150da669c91be1f6470c7441e2bbac682c7b78c59eb2bccd837230b68e2d8", + "chksum_sha256": "aa8e71b9953a2d70da7fac058ba031f21cfb5bfb71df81285552b5aedb16328b", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8de2097894aadebd181dd7ae7d0f5dec4cb017ff95010899b37d3bcad6bd0860", + "chksum_sha256": "557b6eac4dd1d40678d52e9f59e84d8f9cddaf70a6be82787d43785fae35539a", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37d322a0d70e5051c2f54be098c6cb7261c5cba19d030d69c87c9a25d05b3a2e", + "chksum_sha256": "05a8a3246332f26b13525220bfb3ae2df1369eafe66f255ee76dc5d7d801fbd8", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "191fc3bbaf3d78756bb2ce23765cebb199b569f0f7b88689063d00ee049db9ec", + "chksum_sha256": "ae60010ce6b859e677cd2fe0443293d0cbbfb6059f00416c2827998f8dba96c1", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "53f65521e577ff3599a2a4d6e42bf504cf799976492d828573ca6239e9d41238", + "chksum_sha256": "2df68349950dac68eddcf5f1560371ca7d58868b3d5c978bb2047ec1d37a908e", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_vlan_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5f19e8e25cc5e2704ded61eb61d7ee0095acc136e1380809cdf47f12d8bbf17", + "chksum_sha256": "89eb56e9a96ba32ab65009fc09ebf8bbbeb74843839557a70f1c76c3ba2f2c58", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3830de884a4d8a13874f4bb664a6dfe92240148a26f2414fd430051e40752b1f", + "chksum_sha256": "18a86eba9dd5b79bedad92815399beb362a10c96e402b18fc70884852a2c502e", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef6bdcebaf77721c230b529ea6d8930afd19840ad644b09d7a9d9e8b08042a64", + "chksum_sha256": "b04564f5e0e3b1f5527f25e60a42766131d47c8f14e5704c558156a2d901654c", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "49b157678ba5cc812ab3a5344bc492003e8cb6b1f849ae168b81f48ebba8ff83", + "chksum_sha256": "e5c3d3a3d316de8d72b101a3200a8e81785710ef1f1386c0ea3dbf5da45eacda", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3aa08c205d7535bccd127dd4f2561e51a2ec026d151af29a27161cce05fc3fb", + "chksum_sha256": "8b4e94db711765525756701212c456abfea84fb4c38cb4cd45c9010dbad93927", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9f8c4f20831746975e125b2813af5a924c6ec65692e3b373b62cca70e07bac7", + "chksum_sha256": "205a1557e675e86da5aa68c11e65648bc868852e81d2d483ffdacbd72e058181", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/replaced.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "91412f73bc4b57376bf22ae459899b858383999655c2365958695393758ff1ae", "format": 1 }, { - "name": "tests/integration/targets/ios_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_l2_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f8580c8328ba4d89ff30e52f044cc1c5c813a55e9234c9f722f655cc3f06fe56", + "chksum_sha256": "094afbbdd9097ab670c41df21b081705791bd7efa1ff26a741ccd2f9a21ed2a5", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists", + "name": "tests/integration/targets/ios_l2_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tasks", + "name": "tests/integration/targets/ios_l2_interfaces/tasks/main.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "0c72f070fd187ae7c13c368647de220f6b254ab856db38328f952f012461f480", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_l2_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ntp_global", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8fe724448a906aa2a584f11792118430e87edaab920e85f9f8042786edd08daa", + "name": "tests/integration/targets/ios_ntp_global/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ntp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/meta", + "name": "tests/integration/targets/ios_ntp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/meta/main.yaml", + "name": "tests/integration/targets/ios_ntp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "99f97d7709529ad5a370ef88ca759dd566abc45940443dbe28762778ab40c544", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/defaults", + "name": "tests/integration/targets/ios_ntp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/defaults/main.yaml", + "name": "tests/integration/targets/ios_ntp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests", + "name": "tests/integration/targets/ios_ntp_global/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli", + "name": "tests/integration/targets/ios_ntp_global/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "db20920f776718e96e3c251c29423c0a28ac5000c6454f49943f65ac20fae7d8", + "chksum_sha256": "b633b4d6ccef76001f6764713b498278bf30e1dd964673e556fab42166480786", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c4dfbbfd610bc72cc634465a0668fa3daabd76ab0771a293c38e366a32a6842", + "chksum_sha256": "8cc9ea8d4a47459ec32d942855702c789ba3347e0693f57313003f45020d8a7a", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "93cc5c3bd91b11ab509b884e143d023a851d0046e2118d1fc2eb22ae074d2d58", + "chksum_sha256": "9080f77ada9c677a1f4f275d42ed6bb0123286aa0ce5462bd2c580f47dda0d07", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1baa1acb44f8c05b1081b7d2d49d7d679a694b1eef20d63cf8b7eb33df4a441d", + "chksum_sha256": "a6b0345d271e15e951a9a150a43aa0906c3c91a5290b27ae942ab9ece89cbeb4", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1842105d82cd689ea4cea57e9f151bca2e845204e00c78142b60cdac10b401f", + "chksum_sha256": "d80307c7fbf6fc328ebf0395601768f230c08d052cba3e459e4b1755635a2a21", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3718ece1e147c8f7a40932aeea280095591c481deeb46038cd3b070377d5f66f", + "chksum_sha256": "e350806f21caa0181d510feb9cb4e70185286e62aa3b52719b59d55172f2126a", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", + "chksum_sha256": "2b3bef8e48a4ebef6e417c5e919751cd9bd526308fdacd16395203eb4feb9f82", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f1b300e29142c3cb1fa9e84e476577e0909a1f5e13c9f6bae1036eb2f021402f", + "chksum_sha256": "bcff8a20978c31e6c69a155803657b695a5f65a32c494c6d83d65d008e8020d6", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97081ebf559f11a3701d87bc521f3d05be7a8a62a454d7f37194f651ccb053ab", + "chksum_sha256": "306dedea01d094347dc69f10f2e68ed7787372ed087fa1c5ee2d5953a8767016", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10d8202df57a09927329626e4b89a45038167e54d9e9fbc4c6c6ade64129fff5", + "chksum_sha256": "d9b1ee000ffc164233351430bc0f5f3c9d3a336fd09ef670bfa40a7e2eebafc3", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_ntp_global/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "92341a0e0de58ed85e0e12651de37e00217256797d83723f5bf31f5a62ed8b10", + "chksum_sha256": "f41a107502fd7e4be2baf717aafa72bbafc34125fa229ec2e123f7dd7225176e", "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/vars", + "name": "tests/integration/targets/ios_ntp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_prefix_lists/vars/main.yaml", + "name": "tests/integration/targets/ios_ntp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "54b02bf40251a3fd868d5c54f4cfa4eab85e5990b956a037f336c6814eeb19ea", + "chksum_sha256": "7fc06936d093493791466cc5b227ef05b6a0175615a5ce00453f6effb74f9532", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_ntp_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tasks", + "name": "tests/integration/targets/ios_ospfv2", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "daa688f229d7e8db61d23cc61ebc79ccff40a6e9af6de742f4cf5fde2fab74be", + "name": "tests/integration/targets/ios_ospfv2/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tasks/cli.yaml", + "name": "tests/integration/targets/ios_ospfv2/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/meta", + "name": "tests/integration/targets/ios_ospfv2/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/meta/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "8649ac5af985e516bc0be12ea860f9ada7a4454ab14ecf2d056dc16565a95e55", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/defaults", + "name": "tests/integration/targets/ios_ospfv2/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/defaults/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests", + "name": "tests/integration/targets/ios_ospfv2/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli", + "name": "tests/integration/targets/ios_ospfv2/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ed4649e2c9b10b71a7ae63117d06ec134eae6b2182f26bb8b04eb911e609707", + "chksum_sha256": "e36682d7d591a6ebd1311a1b34bfbeb402c35f98f14f9d9521a9839f1a5fc081", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "77cc14435d04e3f72f0ab9457713fca28de7a508c865c08df619ce999d7ace03", + "chksum_sha256": "e1995543982bd7f2a4aee73e5a9fce445b21af1d6ffb5f410d34b372dcd904ae", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "030195c5574fcaa46ade5d2d9f640d1b1668c41025f0c78032cdebd9ebc4ef86", + "chksum_sha256": "3c2988c367bd38b6fc431b3184c661086ae4bab311882e80c941cae6db04344c", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c065775b6484b284e03beb65d1e250361c09fa4fc20e5006058f69e7c4eebc5", + "chksum_sha256": "8554a710fa447dcbe0f7f0097a0f81b7129deecd19b5f4f6caafaf80bef690f8", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3ccde47cab8fd1f7d6eb91c8a1744831097c27bebbf655e15d71fd2456db7f2", + "chksum_sha256": "b2013ced0c8268e36db6925558607e68fddb5887092aa3d520a2b6e1318fc7fb", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_initial_vrf_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4ce15cb1c54d6ba216f276f2622dca7eddceeda339ae1b775c4e82ed0eca5ae6", + "chksum_sha256": "c35a0a936bc8f7a82cefc3c831cfed82f738026c5b5cf5832c06ed42f7098309", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/overridden.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d2a2840acaf208fa439d00dd3be862789bb3e249ca568c9e3a0f958ce4c92987", + "chksum_sha256": "030a148d0e9b7d4e89581f3b82aeb06ce828a2a494fcebecac6a99a5fd9be893", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "74906256718324f2c376a9dcb3be7bbadb2487067b1617e6d90c16f0a109cfcd", + "chksum_sha256": "fcfa39efe63ec56350bd75b0b4ded134aa99c4f1a810039fcf0744eed952a0fd", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5a8e64e20ebea7d3a898216c6e256a3c0dccfcfb68a0671e3bf160e1f6c1b935", + "chksum_sha256": "be91779003c353db09835a7ade40aa7e16311e93c3a111335d4caea13b27c3a4", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9ecda90386ebc75e0cb6e8a820a5c4bf172d4ca7bd4dbe399a4733aa6c08d07e", + "chksum_sha256": "be6663b98bbde670ccf5f4c019cc50bcf3461c7f1df79d59206e0dec1f9c87de", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "bfc3c984e0da8a8065696a6a4801d945bfaed1f84146f7c3c9745ba4468d0e1d", + "chksum_sha256": "71aad36583afacee1f2d50726b8a99cffc3e17566f1297f8c06cda6cdb9483c5", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ade890c5c428f4f2ada261b01e89f9149d27d8add293430df56161249cf0f6b2", + "chksum_sha256": "c2c2d35e0efc547f71effa33a8e7de17a8c8447b28d79a00d0ad56fe4a29d130", "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/vars", + "name": "tests/integration/targets/ios_ospfv2/tests/cli/rtt.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "3e11b9f26e0eb1e022969d8091b88bd0c02cb8e4e12649c63d2f526009bd6ec7", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv2/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_l3_interfaces/vars/main.yaml", + "name": "tests/integration/targets/ios_ospfv2/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4e225d3253a22e2f0eba465f6fff8324396a02ace3d628e848b7a909af026064", + "chksum_sha256": "bf9e0e41402b83f7506fedba9515bd73a0fef00d77e63f09f9b2eda0ee5c3754", + "format": 1 + }, + { + "name": "tests/integration/targets/ios_ospfv2/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { @@ -8226,52 +8023,45 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tasks", + "name": "tests/integration/targets/ios_lldp_global/defaults", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "d8347b048452c2aaf4b7f2315982f603d6955161adbd96ae61527b9fc9b4fcd2", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_lldp_global/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/meta", + "name": "tests/integration/targets/ios_lldp_global/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/meta/main.yaml", + "name": "tests/integration/targets/ios_lldp_global/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "1ec7b6b36ce360d258939c3b6b1e6679713dd2ffacd4bf6565d5c1b5391179dd", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/defaults", + "name": "tests/integration/targets/ios_lldp_global/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_lldp_global/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { @@ -8289,38 +8079,38 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/_remove_config.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f87546f50552f4a1138c7e95bdabd94215875db8393b6b709fac6727aaf5ad34", + "chksum_sha256": "a4ad1680c84aa5f112a608b29bdf2d1191092b3ad2648bb23ed9e30abe4cac8e", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8216a30d2b32742967f308a76000f8399ecd0578dd3117815dbb787313fec7bb", + "chksum_sha256": "7d38b25ae4e94caa126b9d4f02ffabb4adc05c8c73a3b58b0ae9ae4622ac28b4", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "67a19cc6b13772b6ef2c936eb3557dd877975467984a5d0532d83c6bd0c1a3c8", + "chksum_sha256": "511dd52c567ab5523749431d68ff8477640d6163210157e3a369ecb806e22ee9", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5495fe14050f0ab0b992284137587d261bb57260ba22d2570f2e180b52fa644a", + "chksum_sha256": "67a19cc6b13772b6ef2c936eb3557dd877975467984a5d0532d83c6bd0c1a3c8", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "676cecaa97263ace6d06824911abc2333a5ed828c5309a4333652f820ad1b28e", + "chksum_sha256": "5495fe14050f0ab0b992284137587d261bb57260ba22d2570f2e180b52fa644a", "format": 1 }, { @@ -8331,1774 +8121,1676 @@ "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/_populate_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "7d38b25ae4e94caa126b9d4f02ffabb4adc05c8c73a3b58b0ae9ae4622ac28b4", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "823669670f811bb65eb885121e0081a4072bcb061616296e3898a2f6ade10672", + "chksum_sha256": "8216a30d2b32742967f308a76000f8399ecd0578dd3117815dbb787313fec7bb", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a4ad1680c84aa5f112a608b29bdf2d1191092b3ad2648bb23ed9e30abe4cac8e", + "chksum_sha256": "f87546f50552f4a1138c7e95bdabd94215875db8393b6b709fac6727aaf5ad34", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "511dd52c567ab5523749431d68ff8477640d6163210157e3a369ecb806e22ee9", + "chksum_sha256": "676cecaa97263ace6d06824911abc2333a5ed828c5309a4333652f820ad1b28e", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/aliases", + "name": "tests/integration/targets/ios_lldp_global/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", + "chksum_sha256": "823669670f811bb65eb885121e0081a4072bcb061616296e3898a2f6ade10672", "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/vars", + "name": "tests/integration/targets/ios_lldp_global/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lldp_global/vars/main.yaml", + "name": "tests/integration/targets/ios_lldp_global/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1ec7b6b36ce360d258939c3b6b1e6679713dd2ffacd4bf6565d5c1b5391179dd", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_config", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "d8347b048452c2aaf4b7f2315982f603d6955161adbd96ae61527b9fc9b4fcd2", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lldp_global/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/main.yaml", + "name": "tests/integration/targets/ios_lldp_global/aliases", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7011b000e1a4b28787b459b2a05c625052f68b10a1f108068ec805bb7a0875f4", + "chksum_sha256": "9b121bba6a0892e8ff599846aa1ea5c388ae3c8a9e6a85192f43b89cf992719f", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/cli.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "100c25aa8e342471c45f4ced56d10739c8a7f50ffaf83531800819f0911615ac", + "name": "tests/integration/targets/ios_ospf_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/cli_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "5f583eec9d6129fbfe6d2b800c2013f2dff80308e21b59c9da1fa7382b6a401d", + "name": "tests/integration/targets/ios_ospf_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tasks/redirection.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4c45a3649d432bb34bfcde5f3557848f294212fdd78da9b1c0f9b98176f462ce", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_config/meta", + "name": "tests/integration/targets/ios_ospf_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/meta/main.yml", + "name": "tests/integration/targets/ios_ospf_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "d904ba1b1ee67876b5c1db5e8a2c063c500c99af83e05fd36d7584745f906957", "format": 1 }, { - "name": "tests/integration/targets/ios_config/defaults", + "name": "tests/integration/targets/ios_ospf_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/defaults/main.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests", + "name": "tests/integration/targets/ios_ospf_interfaces/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel_before.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "289b05fea7a7180ab37fb5e04220fa7c387634fbfe67e997d39ea44e53b6b03d", + "chksum_sha256": "ff7d15cb956c6a22c1687aee06920653392f08ff0e53223afbab89ad7c7c98a9", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel_after.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c80fc079cc0294cc808809f7524cd26dce8746cb3cbceccae5947c26a53bba77", + "chksum_sha256": "e822477d57a3e430f8e379be1528039e6e4ee5eff278141cdc2c3f5c4ea4ad1b", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/replace_config.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbde273238be56ec3dc2174913de0c2933067aa634987a04dd7fb72fefeac3f", + "chksum_sha256": "f097e25e0459371162a4d0d2b645ae9ca361ad5d7fce778cab8793d7bcd2f433", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/diff.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c4223635f760bffc17141049ab0cb3e09c3e9b2a53398754c740569c1244a548", + "chksum_sha256": "4395e95e40e7a0dfcf80e05ade1c443c37cfe70fe80fc4fdcfc0ee48ca7bca7b", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ce6faa181c1fb7ab5ba44db51d418b0120a7d110a3f4373e91ce02987a76fefa", + "chksum_sha256": "fd72a9b920445f668d61b31646621e0f9587851e61eaaa071f8034468e3fab43", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/src_match_none.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_initial_ipv6_setup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3b6ae94a3a40d6baa6400753b0273af9e1f0c693c0b9d02a216b4d16c9afad67", + "chksum_sha256": "8a2472a61a85371edf42157eb38de6446a90882922de4471337054194b698dff", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_block.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "91c95c35263639fde90b44f93f0612c0a7b3c510f325285afe281d9fc121e58b", + "chksum_sha256": "adda4ccbcef419623366dff6fd814799b732583587c8b71b9a49638079cf4c7d", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel_nonidempotent.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "25ef9f513a03aa86771b90bd0d22940459f94fa3b2257ae7498b9217a405bb9a", + "chksum_sha256": "338693405501e01ca57d2ddeb40f482891c029a986864fc98946fc266265bf13", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/toplevel.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f45a6bb9f23763b221df958302548d88734cedb25ee2edc0fe1ec86be00b4e8b", + "chksum_sha256": "c6645517abeb9ff0bea3331bc844b12c1382b0eea4178be0dfa523a3a38c5a97", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_strict_mul_parents.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ca18a9f33f955ba25c6df6be5108b58cb0b159406b531931d7886b65ec1a0316", + "chksum_sha256": "3d05e7ad3cd69bd4b423def7c76b0200ec3daff4ce28f945cf1b53a001c52d95", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel_exact.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8ff88256789e8892cc5604826818b4a694faa8dd37d8de6f37a06535724dedd2", + "chksum_sha256": "7ef2eb2c6dd20e38ac7f6058ced2a4902a838cfb902e8a32e33fc83bc8ffca5a", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/src_basic.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2544e95d1ed36fd4c73cad6dd719051035205bfd414ef4d6bbb73fe7e592b981", + "chksum_sha256": "843a2bd9f2693a11e665a5f552e9de54fcc379ca3e06ee80ba2530f9077acede", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/defaults.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f299c02b02d7c454dd2eaa7eca83f4306f99b64430892077955f5159b3009031", + "chksum_sha256": "c0c23c50849c89a60cce7588ee594c9f12fc89ae710516e3371d9cdf23bbdfbc", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/macro.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "c50af815c1122d68ec8aa76f0738a923e3100ffbdce96ec9f6eeda091001ff12", + "name": "tests/integration/targets/ios_ospf_interfaces/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/backup.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e567e119083aae3e8dd3739d64db3927cb554387079640fbff99b1d6b79f267e", + "chksum_sha256": "3ca85e538cabf8bda1ebd32dee2b5803e8e171ce955d7affe2f1417283cd92d6", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/src_invalid.yaml", + "name": "tests/integration/targets/ios_ospf_interfaces/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e37382eede72ae657893c3933a8e6731db78596f46d5fede249d4d050e8f12b6", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/save.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "2fbcbac7be1a2444b9866a0312ebd7f30691de74f434b693b301e1b667efbc34", + "name": "tests/integration/targets/ios_lag_interfaces", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli/sublevel.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, + "format": 1 + }, + { + "name": "tests/integration/targets/ios_lag_interfaces/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "81e93d0c4240f0c189dcc3db9d2887404f6f79ccc22a7ae9d8c2c616a823ae23", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/redirection", + "name": "tests/integration/targets/ios_lag_interfaces/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/redirection/shortname.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a9d8f38448bbc15b4db9520e986758afbb1e4332917cfa4e676c4726ecb1324c", + "chksum_sha256": "7548cef68905ad34af6e5c02e932c61e8eadc317b15831fca6346a128b89f7bb", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config", + "name": "tests/integration/targets/ios_lag_interfaces/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_exact_match.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3445b7155b0702ea632d8e846e514af4e58679edf35a1b00034c1f33611c7bcb", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_strict_match.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "faee234111770cb64085b9a25509c53fbd3fcc6d783bebff7592a0cf5ee4e317", + "name": "tests/integration/targets/ios_lag_interfaces/tests", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_backup.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "6c6e65aa217139078a0e172b54fc00eb2cfe51f2079cb7d9b0a5d9c5d2a74ca6", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_block_replace.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b9b16a4833c6d7626d43f1c1e90a106af469adc1f3a032875e78e13c6b563e5f", + "chksum_sha256": "523ce08d67e26a55d5ae1004bdf73f5f785348437c918d98179f5bb01e403839", "format": 1 }, { - "name": "tests/integration/targets/ios_config/tests/cli_config/cli_basic.yaml", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "28f51d7f60e5fcd45a211c50797cc4142a3e4784cf8619ed41eadf1a630e4629", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_config/templates", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_config/templates/basic", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "af7be4e062acefec5cf61c6cc7ad3cb369db2b641ae00f229621ee62a47fe90e", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/setupblock.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c7e470728246324f9d35d7d1f36e53f10a1d424cb9b14aea8ebd22ae03384985", + "chksum_sha256": "0ce0f4b8f4ff19ca8202594612bfff8bbe94ce65867e3db6e3e9bde4354c4c16", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configstrict1.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", + "chksum_sha256": "4a3bf0d0d675271115fbfcb01d220b647d351ba511dff0d16d9f8d7468ce8ac6", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/setupexact.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", + "chksum_sha256": "41fc0f1077783f0157b1bdae02da05009bd55cf31cfffdce93f25490569c7eaa", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/setupstrict.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_populate_port_channel.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "78abef2216f92c74b21c0a935660fa35625c923e4d3b5d6eaa014a2f7b9d5182", + "chksum_sha256": "18e91e2791fb6dd738d3042718436ae3244dbd0a90b5f1886ed5a5daf1d46ceb", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/acl_config.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "819000cad7a1b4e27b8b206fe04b2d18c0bbba7876801d9f2786c94f76482050", + "chksum_sha256": "c30f577272b1c7bdc04fc0cf9a016b5c004a93f0e7d09cdb4bca3fa5aafeea8e", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/macro.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "240ea6bffb5f8140b8fb61c0e4505e89f76ea5c0ade1103b63b25c6024e57892", + "chksum_sha256": "9ae384d2d361bfec3e5ec8d4521923a328fd0a6b06ee0fad2dc813650f4867af", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/intended_running_config", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0c8e4ffd5cb273c2c92fe0690fce9249386fbd72ac0e77872e8fa2cb1c256138", + "chksum_sha256": "d11cd0691705a44a06275d2438229562d70cb6eeafdfd7823c306fae55ab7974", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/base_running_config", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/_add_port_channels.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7385f5112a2ea15a4ca3f480bf6830bf91439a67073d846367170819b02692c6", + "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configblock.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", + "chksum_sha256": "dae7f6e33417854fdb686dc22ab25acf7ccd05b1cd088087f4b6777012ecd7c4", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configexact1.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a112244df64f4360549463724af9ae4c598c3f39c22310a4d0a98c44cf034408", + "chksum_sha256": "a9ef52fd6e4d52c3bdf173bf2d2c13f4ad7515dfd508f93e70d00f951cebc8d5", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/configexact2.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d7019ec0a3b0c34ed351eed7b9ea2979114804e6aac94b9433bd42789bec5b0c", + "chksum_sha256": "59d406ceef4165fcae86490c8251a719575a113ebe80cce578c1e4b67c974225", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/basic/config.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tests/cli/rtt.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fed860520ec0b19850744af6be1c77939335d4a09539bf563d0c15aa6afc84ef", + "chksum_sha256": "45de9b52c7ab6864f1abd09fe743ffafdc10eb084285f98755c9ec21137e9bb0", "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/defaults", + "name": "tests/integration/targets/ios_lag_interfaces/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_config/templates/defaults/config.j2", + "name": "tests/integration/targets/ios_lag_interfaces/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c67459067166baed6059b02907fb2692e34868270185b09fcd9f5d7c3ec013d0", + "chksum_sha256": "79c7a4587c7a00a2c7a91a5eab3b092671c730ab0c82458102614e087ae32030", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_lag_interfaces/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tasks", + "name": "tests/integration/targets/ios_prefix_lists", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3c1978dc1393f0ddade54f4568fbe2a213f323e71e9aa334266bad4fd016ea95", + "name": "tests/integration/targets/ios_prefix_lists/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tasks/cli.yaml", + "name": "tests/integration/targets/ios_prefix_lists/defaults/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/meta", + "name": "tests/integration/targets/ios_prefix_lists/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/meta/main.yaml", + "name": "tests/integration/targets/ios_prefix_lists/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "54b02bf40251a3fd868d5c54f4cfa4eab85e5990b956a037f336c6814eeb19ea", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/defaults", + "name": "tests/integration/targets/ios_prefix_lists/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/defaults/main.yaml", + "name": "tests/integration/targets/ios_prefix_lists/meta/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests", + "name": "tests/integration/targets/ios_prefix_lists/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/_remove_config.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "3c6b76253c2d8e53a0df8c1f620ad1b90d537912cb81877fff08d39689a1537f", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/parsed.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9c08349fdc001cdd463151f85c7bf4a5973c2dff048f27ef2ced9c769535edfc", + "chksum_sha256": "10d8202df57a09927329626e4b89a45038167e54d9e9fbc4c6c6ade64129fff5", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/gathered.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_populate_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "22e70effcb2a1b4e95a65356aeb5851b46cc61d518aa81ce133b7934eb8c6d83", + "chksum_sha256": "f1b300e29142c3cb1fa9e84e476577e0909a1f5e13c9f6bae1036eb2f021402f", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/empty_config.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/rendered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6479de2654937093427d57930e46c699ad3265ee6f67624b7414d03cd9888eb", + "chksum_sha256": "92341a0e0de58ed85e0e12651de37e00217256797d83723f5bf31f5a62ed8b10", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/rtt.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/gathered.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cca6983e388a8e06b3b72325026c23d5794b130d45a74adb6d2156525ff8335d", + "chksum_sha256": "93cc5c3bd91b11ab509b884e143d023a851d0046e2118d1fc2eb22ae074d2d58", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/empty_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5cbe172d53fbd26d8dc675b06a513f8e815008c6f263c8bfae14600cef46f964", + "chksum_sha256": "1baa1acb44f8c05b1081b7d2d49d7d679a694b1eef20d63cf8b7eb33df4a441d", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/_parsed.cfg", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_parsed.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87c9833d471a6b80a6c2cd0a14d29ef5b983fe7d8e9e61e6f43a8c0e1e8a89f6", + "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/_populate_config.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/deleted.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac9b0f35b9607c4dcd6ee6fe8c4c5a3a890eb3ffef2606e5d9935648df7d5b7e", + "chksum_sha256": "0c4dfbbfd610bc72cc634465a0668fa3daabd76ab0771a293c38e366a32a6842", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/replaced.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/_remove_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cfa79d338f05e3971ce8a30e951a60e8a3898786fecbf125898bfc20275377a4", + "chksum_sha256": "db20920f776718e96e3c251c29423c0a28ac5000c6454f49943f65ac20fae7d8", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/parsed.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/overridden.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b28f32004005582bc80fbc2a9c8db6728687c25d87f74a365e61e7a20ec853d5", + "chksum_sha256": "3718ece1e147c8f7a40932aeea280095591c481deeb46038cd3b070377d5f66f", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/purged.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/merged.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "440e31a2f87615c703a8a25d436bebf5e076b729ab0316294b1aea01585fb9ae", + "chksum_sha256": "c1842105d82cd689ea4cea57e9f151bca2e845204e00c78142b60cdac10b401f", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/tests/cli/rendered.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tests/cli/replaced.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75c019721cd809896e681cc3826abf70eb2a7d0616bc09817577e99c02ef7070", + "chksum_sha256": "97081ebf559f11a3701d87bc521f3d05be7a8a62a454d7f37194f651ccb053ab", "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/vars", + "name": "tests/integration/targets/ios_prefix_lists/tasks", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_bgp_global/vars/main.yaml", + "name": "tests/integration/targets/ios_prefix_lists/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9748f49b5ce9a99a9ebc47bf062708794d4c7cc7ca1fa2f887b8220f2f45bc52", + "chksum_sha256": "8fe724448a906aa2a584f11792118430e87edaab920e85f9f8042786edd08daa", "format": 1 }, { - "name": "tests/integration/targets/ios_command", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/integration/targets/ios_prefix_lists/tasks/cli.yaml", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tasks", + "name": "tests/integration/targets/ios_cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tasks/main.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "cbea343b9422e831a52eac293e12796cebaba8432a2a7c3ea24f3d7cfde98a01", + "name": "tests/integration/targets/ios_cliconf/defaults", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tasks/cli.yaml", + "name": "tests/integration/targets/ios_cliconf/defaults/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", "format": 1 }, { - "name": "tests/integration/targets/ios_command/meta", + "name": "tests/integration/targets/ios_cliconf/vars", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/meta/main.yml", + "name": "tests/integration/targets/ios_cliconf/vars/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "3de9b3530a2bce1c236f2ddc4b95f4282226d88b6212be4d1ff1fbc85d5c131f", "format": 1 }, { - "name": "tests/integration/targets/ios_command/defaults", + "name": "tests/integration/targets/ios_cliconf/meta", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/defaults/main.yaml", + "name": "tests/integration/targets/ios_cliconf/meta/main.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests", + "name": "tests/integration/targets/ios_cliconf/tests", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli", + "name": "tests/integration/targets/ios_cliconf/tests/common", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/invalid.yaml", + "name": "tests/integration/targets/ios_cliconf/tests/common/commit_conf.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5de37d3a4e9c0a0deb381515d7aad38814e2573570881499c2f37d01c33148", + "chksum_sha256": "86cde52806aad9c78253ffdb74022af60cb99ff51c80e04adbbfde1af72254cd", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/contains.yaml", + "name": "tests/integration/targets/ios_cliconf/tests/common/_test_config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac41c0332715a477675065b303c059029f452524c9613bfa6837221b3c8a4748", + "chksum_sha256": "c48a21095f6edaea997c25042855b8628c0ca7181366ee8488069286ab350873", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/bad_operator.yaml", + "name": "tests/integration/targets/ios_cliconf/tests/common/_enable_archiving.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "114c1244968981a22617d661fe4e9de4734037af8970bce9b0c5b79102f8ae6e", + "chksum_sha256": "63ff50f1f1f57a709881dd26a33223c2316775239e9fc21dfeff23adbaea7ebc", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/error_regex.yaml", + "name": "tests/integration/targets/ios_cliconf/tests/common/_cleanup.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9d8673ef0e332533bc520e1fc69282244014b33fe4fd67c9df97fb0c45389b35", + "chksum_sha256": "5386a829c04704371984f8ce25e2c63213c131dd62775410cb26568d37e923a6", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/output.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "90067084bae011b7afc19fc1569700cf0007d29ae86d423be0111fbdb7d9bf8d", + "name": "tests/integration/targets/ios_cliconf/tasks", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/timeout.yaml", + "name": "tests/integration/targets/ios_cliconf/tasks/main.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "99999a86b0c912cd067669a525d1e0032db4e19aac5fedec7593bfc8868ae37b", + "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", "format": 1 }, { - "name": "tests/integration/targets/ios_command/tests/cli/cli_command.yaml", + "name": "tests/integration/targets/ios_cliconf/tasks/cli.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "765a06846e98c1bc59b769855ba3c28f6ed2b7f8301b1aef0b8f0a9a4aef4863", + "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", "format": 1 }, { - "name": "tests/integration/targets/ios_ping", + "name": "tests/sanity", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.15.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tasks/main.yaml", + "name": "tests/sanity/ignore-2.14.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d4fb9eae8dce0d7933579bdf2d3f8795995a4058621bb90be902cecbb7fda0da", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tasks/cli.yaml", + "name": "tests/sanity/ignore-2.18.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/sanity/ignore-2.17.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/meta/main.yaml", + "name": "tests/sanity/ignore-2.16.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "4d5b86543c5d0e71325edbf6019f42e4999f5ef2b9121a0c2e30bd0eae3d0fb1", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/defaults/main.yaml", + "name": "tests/config.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", + "chksum_sha256": "4129945061440c8d8c281590b8054b194f5958833c722aa40e878b09038c380e", "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tests", + "name": "tests/unit", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tests/cli", + "name": "tests/unit/mock", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_ping/tests/cli/ping.yaml", + "name": "tests/unit/mock/loader.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "beb45b19b88ea64c61e0d67d7769275c18e3c12a0c572bea86d171bada913956", + "chksum_sha256": "2343d1f644250d4b616f0bf0a826fdee8fe306243d8412d44dd0e033352b262b", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/yaml_helper.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fa89194ba60856f51500efdd1f802c5ca3b2e4ded9461d7b88847c427a43a958", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/mock/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tasks/main.yaml", + "name": "tests/unit/mock/vault_helper.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1f2494ffa73842d0da2f38e4744624c2aa88ee473d24e33d626e7cb28b2d822", + "chksum_sha256": "3bf7834d18bd34473d0f4b898253177229a131f14364874efba584ff985e4a41", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tasks/cli.yaml", + "name": "tests/unit/mock/procenv.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d3350be00fa2af0f217f369684578df724bcf9550402e7a54ef1b84f32dcb53", + "chksum_sha256": "3ff983479d7aa4b90efe73337f723c14224edabcdfde4efe49f24cd905f45f1a", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/meta", + "name": "tests/unit/mock/path.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "110552d5ab0ffabe2bc6b6c57e9f389be3920da2e0f37ea5b628795d1b426bfd", + "format": 1 + }, + { + "name": "tests/unit/plugins", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/meta/main.yml", + "name": "tests/unit/plugins/__init__.py", "ftype": "file", "chksum_type": "sha256", "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/defaults", + "name": "tests/unit/plugins/cliconf", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/defaults/main.yml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_cliconf/tests", + "name": "tests/unit/plugins/cliconf/fixtures", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common", + "name": "tests/unit/plugins/cliconf/fixtures/nos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/_test_config.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/show_running-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c48a21095f6edaea997c25042855b8628c0ca7181366ee8488069286ab350873", + "chksum_sha256": "42f2e50d84821d1ce5c9ddfa082e7a6086254ef9908166a0d4523a3dc5b6b2df", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/_enable_archiving.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "63ff50f1f1f57a709881dd26a33223c2316775239e9fc21dfeff23adbaea7ebc", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/commit_conf.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "86cde52806aad9c78253ffdb74022af60cb99ff51c80e04adbbfde1af72254cd", + "chksum_sha256": "a21600440d1fbd2208fd81eeeaa632cfdf6b69c060bcff46e5a3f4a5f5c26f68", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/tests/common/_cleanup.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/nos/show_chassis", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5386a829c04704371984f8ce25e2c63213c131dd62775410cb26568d37e923a6", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_cliconf/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "a2890b7a8db9c1e8954a186fa311c8a2b44477b1d04bff9c32bf75b7797b4533", "format": 1 }, { - "name": "tests/integration/targets/ios_cliconf/vars/main.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3de9b3530a2bce1c236f2ddc4b95f4282226d88b6212be4d1ff1fbc85d5c131f", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg", + "name": "tests/unit/plugins/cliconf/fixtures/slxos", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_running-config", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tasks/main.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8171ce9eb1bd2474dcb5e0f86eeb142567bac349514708f53c24829283fd382e", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tasks/cli.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", + "chksum_sha256": "e18e1a4f1640ca226a2f0d067a422af58218fa7f191a8b71394432a56177c7fd", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_chassis", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "1ab5008e1e19a8b1995b8c284856ae37ae5d242975b81057a3f0127fafa0f7a2", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/meta/main.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/slxos/show_startup-config", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", + "chksum_sha256": "d1a135373ce559af818475189bbfc8ff838f5891869b62e159e38ac4c30b3284", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/defaults", + "name": "tests/unit/plugins/cliconf/fixtures/ios", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/defaults/main.yaml", + "name": "tests/unit/plugins/cliconf/fixtures/ios/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "665288590cd4226da42511817f09ccdfc92df36c9621583cd2c82919af295c5a", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_linkagg/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/cliconf/fixtures/ios/show_version", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "28896cfd7a101f137f8433db1efdb33343aa43425aaedc2d4f7eebec7e71204d", "format": 1 }, { - "name": "tests/integration/targets/ios_linkagg/tests/cli/basic.yaml", + "name": "tests/unit/plugins/cliconf/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "01543795b9d0559974aa6eb2e501541a442c6d8a61361ab6ce30eb7d7a0610e3", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/plugins/cliconf/test_ios.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "976f42e2eb2d4bc2ca64724d7361549f46d0d1b56ed30a988a39b22d928c886e", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tasks", + "name": "tests/unit/modules", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tasks/main.yaml", + "name": "tests/unit/modules/conftest.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "42f682d0706bde5cedd3667110b289d169b29ca20a1692b85c51bbe5f1e3131e", + "chksum_sha256": "354440d86f684a9641f329807a687fe71fc66ab901207f7a166ecfa648935488", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tasks/cli.yaml", + "name": "tests/unit/modules/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2f113e17755cf29780c0366eea077fbf7d12d9332c0d31df993556813c20a9bf", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/defaults", + "name": "tests/unit/modules/network", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/defaults/main.yaml", + "name": "tests/unit/modules/network/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lacp_interfaces/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli", + "name": "tests/unit/modules/network/ios", "ftype": "dir", "chksum_type": null, "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_remove_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_lacp.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "337f2c06ea2b0c31adfc06bd0684edb480b1a333dc4d82fd36e74e6efad7d6ba", + "chksum_sha256": "8c4a18f73cdb869f9b4951700395f4fc97dd6d7849222c22ec9568fa65f0c2a2", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/deleted.yaml", + "name": "tests/unit/modules/network/ios/test_ios_evpn_evi.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6b15190694a3230175825f662ffc5be36c207a5508f8dd03e34d0f16dba801c3", + "chksum_sha256": "8f30fe112c1b85b2b857971b8327404c2ecbc86a164181203d4361f642e54b3e", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/gathered.yaml", + "name": "tests/unit/modules/network/ios/test_ios_hostname.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5bb10615fc266a5079e9adaf3307602bdefac54f4e8c9fda96954eb59ddc1485", + "chksum_sha256": "47fda50478f19ef45ac929d8622ed877fa426bf5cf25d3184261a8c0f3898ef1", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/empty_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_service.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "200cc72937b5aab4388efc5e85b4f590dfae9bbbfd9668c2c8390d42c73cb1a3", + "chksum_sha256": "cdb28578a9734cdaa4aa74d2418a41f03960d462e068f8b0c9e4c69d9805a805", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_add_port_channels.yml", + "name": "tests/unit/modules/network/ios/test_ios_lag_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "37e0850a33908a4856f7167d6e488cbf3b6060950a032aae1f1006dae560d2aa", + "chksum_sha256": "7724ac0aadb681867d7356a4ee4f4d141f4189731a5dc01d72e751f500f9e9d7", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rtt.yaml", + "name": "tests/unit/modules/network/ios/test_ios_lldp_inteface.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3de8041d6d7c288d7f421fc629c2bbcfd5b1faf29d3785fb1f8c39b6b5f36775", + "chksum_sha256": "0fb33dee7e350597f8b9a6891467929a616cec88859af63feae411a69c237ca0", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/merged.yaml", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "8a4d9930854480ec68685dfce6a5ca53170d519fa93b8b10ff89d84c2fef906d", + "name": "tests/unit/modules/network/ios/fixtures", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/overridden.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_repeat_2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "83acc10766bff99eaf1085cfc2fab4b54e4101edfc70d06c19f65eb5f90f0478", + "chksum_sha256": "4962134fb2b2230a111b5b94f904ba094c12d0e0775e22c50b3db6599dbfcb36", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_parsed.cfg", + "name": "tests/unit/modules/network/ios/fixtures/ios_vlans_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "05d13aca3673ed53547e84c3a96b852f6c6b21e31b250ccae1a3c9dc8a455415", + "chksum_sha256": "9e3b415848259747054d6586d9a85787a48f2a5d3fd5866c41f8b050eadfae90", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/_populate_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_memory_statistics", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ac8361b624da0372fb79c80bd147c5b9bfed4d4140d0be7fe9957b75e414c61b", + "chksum_sha256": "38375b22d4c94dad4289ad32a3360980e0e8f30d69c4a0c2ab1d8181d4fb811b", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/replaced.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv2.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6fd2582bf431113cefd8a863baf6d1b6908f5cd142dccde32ef536feb29d0702", + "chksum_sha256": "f557ec41733d7040f5585b79e18b88623ace43d899ac80edc055e01c469240c1", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/parsed.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_switch_virtual", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fc43ad13fcf0465249c1941a418f61f36fba08a55afaef2aa8a7949ed028a7fe", + "chksum_sha256": "db1b7ead274089538a05952a47f1e7800560ca1a552adc345c34dc2ab4c4f9de", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/tests/cli/rendered.yaml", + "name": "tests/unit/modules/network/ios/fixtures/configure_terminal", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e87a35985502b9c92eb9c60ed83fdefcc11a17e26b421e067dcf7be3624c8503", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_lacp_interfaces/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_lacp_interfaces/vars/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_vrf_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "866d49b9fb83bafefee3c2ed7ba79d894e2b28af83b4fed56ad48982c364a894", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "9ee43d746654712aed9c1163d6130a7b6de350a3efef3e6e228355378b20be50", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tasks/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_l3_interfaces.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea10fd1166a91f0a0c747a5be6a85f313c52f5f3d9f33cdc68e9424f3cc56a42", + "chksum_sha256": "2836ef546936bc7b3ff57cd557f54d5c5024ecbf64451cbb4f0d9c937cdb71c6", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tasks/cli.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_config_src.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "427740e10c11b97e4353bc00c47b3a0d25b23479e67ba0373d932f5d25c23b95", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "57d42d2e8e8b7a4b6cae566115ee42fecea077b525cace10cefc3b7dbd85f033", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/meta/main.yml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9a5282279957f89f8930b279d9672664a1f7887d3996df2fcff9c0f08e9829d2", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "5abf76b46295216c079870fba8c70f8f6064ccd667e80d91e31b47ab84f6fd70", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/defaults/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_vlan_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b6cec8117492a3110c2e9066aa77a54abd2b9774cea08d60eb42b01c51c3e032", - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "tests/integration/targets/ios_ntp/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "73a0c5b62bea4279d25deae4c2e04bf12c53fc3784297675a92eb98c911696fc", "format": 1 }, { - "name": "tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ntp_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11d03d940194a739c19346b9e626e425de69706b572ff7a178b90cc21a6f36d0", + "chksum_sha256": "2dc4f5c356e2ba9f40ec1ad94b5bc4e597c39657662156764465f156ab6cd7cd", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/__init__.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_banner.txt", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "fcbd9e21fbc41c072eed699ebf08ba9fc0e86b9084e4e54eb701cc12d4c764d0", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tasks/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2ee4493aa601f74dca37f18dfebff80578f8ad47283d1921825a9036bae468ad", + "chksum_sha256": "dc71e5e1dc8e16c64ad26477c7b0dc0d0278a20be9dc4a6d53224328f239f79b", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tasks/cli.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "825819c8953b25588aadeb8264ebc23a52d06537049b7e3f4f0b9edfda1b7e45", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_inventory", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "695c97917cde02fca97d816d92429a12142d6400180388630847a6938513829f", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/meta/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ospfv3.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "b45b7eafd03c14cb0a9737561ddd60b86b708aabe1223697376c56066fabb29c", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_cdp_neighbors_detail", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "6e29939eafbbdcd5d64d8558cf6f5fe9d7fa1b806e62b5f19b65b0401c9c9c44", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/defaults/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_system_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "ecb0f88d690961592ffec4c1dbeebb4b6883ed2fee08fd60117a3b7937b37949", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_logging_global.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "89a3006dad756d356d14bf9704c493b1ebac4267dca6344c6af536d53dd1bbf4", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_l2_interfaces.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "743adf2fb8dcad62933e91c19b47b2b0437868c7e50db9a4e556431ed696f2f5", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_remove_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_dir", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "238918c44b8752332fe7ee6df2e293a51da17252fdf2362b337e6a897cc224cc", + "chksum_sha256": "bf4241a7402fd70614b668b90da04f80c7430f8f4535a1eb0a40e989a1d9d48b", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/deleted.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_config_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "844b1f73132324bcee3f3390fce22388df69b69e4266ffebbdd4c5d6a8a4c2e8", + "chksum_sha256": "6fe81e446733fef4e3643a80042ab4111b9b0c927599c4b5972ecea4c18b4ffd", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/gathered.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_processes_cpu", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "72297b557d1b34d29b999d26e00a0b28d813fd1e458338acd1cd3b24b0a35aab", + "chksum_sha256": "e8edd6276089ec830cb2978305dcff0f77cbe3a39f393eb0969c671a981d8d89", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/empty_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_version", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2bfc27b217fab25508ee8dedb4819c40bdb98b3352c464065f8ef169622f4384", + "chksum_sha256": "a6290b0be0cd8622c90617eace7c4c8bb1508a77d33c2b0e7bb9d6f7f8967282", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_initial_vrf_setup.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ipv6_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7fb8dc743143aa6677f024b7333e02bb1f52f1a9c434cd86e1617b442dcc8a0b", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/rtt.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_route_maps.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8a735801dc4fc0769f2773722caa333ada8c5c41daad731c271c185ff1d6a040", + "chksum_sha256": "a2764456add35e41e5109cefb0694cd6a708bcf77239259b47ed60d86fa06856", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/merged.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_banner_show_running_config_ios12.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c70156e646606c78e8221d3f09140d0be29bfc307756e6f0993b02b78b8fe9e9", + "chksum_sha256": "ed9d617788c3a95226fda5a0dfa4271afe77626709937b27a3af70ffde7af53a", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/overridden.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c8f73d52be036135d76b6157719db5f9bd4f7761ebeae5618e48a339ed14ae4e", + "chksum_sha256": "b70d617a3d7b66351dd189740638da0a7558380e1edac4b74e43eeb54b4cf7c6", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_parsed.cfg", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "75178f12ee6688bc6635aafb6d83adddbed9b5a0d12fb9d39c819afa14adba64", + "chksum_sha256": "ad64c29374175a8d737d01ae856c16364c442fca9ea7b9447ab8f22d9ed78dad", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/_populate_config.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d825c44ce8c9cec4e8b41ce23a867b76e766c6e6a3491d6621585bce8bdd57c3", + "chksum_sha256": "547917e90b62a4ef7eb05c6a2527019acf8e3790d7d5a0c9f6b24af6a82a2fb3", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/replaced.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_logging_config_ios12.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "23df18165ce662f9a6837926a752e92d9c0500334a68492ae8607c2385b4cb29", + "chksum_sha256": "2923b7e2af16ca384a4c44c7fc1c9944367fffc1769b9ee6c41d73a9e0a2c1fb", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/parsed.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_10.255.255.250_repeat_2", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "616e7d9e3cc11d85aa6f6948a80ba8ad080df33b6fa2574e58ea96dda1b8b4d7", + "chksum_sha256": "f6102ec8eb37947bb6892dbb4c1252c794ef52376540c9d8ce2b9753aa613685", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/tests/cli/rendered.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_ip_interface", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "21aabfd4dd00cabd0670087c3f46d8f3cf0dac51e013d14790546ec52612579c", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_lldp_neighbors_detail", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "11544c73f3e88ab5384140abf1bedd0c2501f4ed13132ab56bd22a53909183b0", "format": 1 }, { - "name": "tests/integration/targets/ios_ospfv3/vars/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_user_config.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5d9a640abfe561027b4afaadcf0306d9f52437a9ca11c8c6bd33aa39668cfc2b", + "chksum_sha256": "92081628d201c43cc40e2022f0ebac80f1ee5c1e78e19479d0b94780945a9657", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_bgp_config.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "8e1448b74254646dea1644addbebf552013bc999c32b8a90f3141fadfd2e045c", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tasks", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_facts_show_virtual_switch", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "a3c3bbfb2fdcb11e3f9721d7596800690969e51e7fc66ee2e5adae3b524f7177", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tasks/main.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_config_defaults.cfg", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9e463dfec9973774a7a87d75f8e492a829e08a207f7330616a23032087174429", + "chksum_sha256": "114e89387a2b3cb37c475ed22f287f83dd93bd16a51845286b27f8355d1ae0e5", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tasks/cli.yaml", + "name": "tests/unit/modules/network/ios/fixtures/ios_ping_ping_8.8.8.8_size_1400_df-bit", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "84d6592471825e4bcaa55452b39c090fd8c05d17695f8ace236d00772df9af88", + "chksum_sha256": "c8452a768d797ca829ff18314236a7275cf03a14f751c6f53c8b6711bc8a1d7f", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/meta", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/fixtures/ios_prefix_lists.cfg", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "dc8a935708bb8e0b18381fb2cbd56f7bd389aa02255d0b5cbfe36a5b633b1bf1", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/meta/main.yaml", + "name": "tests/unit/modules/network/ios/test_ios_vrf.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ec4fa30fc4a7b9e002d1c7b3932286ace72ba36e4f532e2cc79f49d07e0794c3", + "chksum_sha256": "c8111b8105a96afc7e81b96808cda91611643dc49d0bdc5d5945d8a719b3c31e", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/defaults", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_snmp_server.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cd5d0b6244b77c60fdf0bce2e1bb4e4da5efd31f213ef35546355a7165494c4c", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/defaults/main.yaml", + "name": "tests/unit/modules/network/ios/ios_module.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9894ee154c7a39aa7a1e65d027dfc12b8643e1a3df53d3c09bbab9eeb44a1cf1", + "chksum_sha256": "8a08cf8bab33ef88408880ffc6f8034be5e532945ca4f79d82b213426104876c", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_ospfv2.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "4005f2c067beeb07ad752d35b4cf08c2641f28400006a638d63d5d758bec3a92", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_ping.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "518695ae331bd17c5635aca39e6af516e7a11473236412a9707eb12d5c7cb10f", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/_remove_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_ntp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "070883e8b78940daa953461fd32520d1bef4bdf4cf98664b3e82c7d0fae842b6", + "chksum_sha256": "784a79cd607c99396e7040a04dc142534261d39b04f5c3bfc5a8957a21879054", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/deleted.yaml", + "name": "tests/unit/modules/network/ios/test_ios_route_maps.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "5b7529ae69029b3e22b4dec95b722595deebe267cb2f2735a85fd53a4c82bac8", + "chksum_sha256": "e520d761dedc8ab970293d2a725ee892518f7480bb2e97f0a3e2684460e443d4", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/gathered.yaml", + "name": "tests/unit/modules/network/ios/test_ios_evpn_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a18425a89f8e85573729e8c29b8c45e491dd6814b221f9d42a0acf0960689e8", + "chksum_sha256": "b5bee6ad68b90176a467d9f7c0d348cf07e27b1995f085c64db9cbdb8a088929", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/empty_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_l3_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "9313132bb4ea08fdfebbd76b6376eda299d1e61fef0b62973309894399193613", + "chksum_sha256": "d6716032d5b53020ccd29f08960acbd1ae9fe41a3c175339deb61a4b56f4dcf5", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/merged.yaml", + "name": "tests/unit/modules/network/ios/test_ios_acl_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8f0c8602b6863de3c09c0f29fb3fbe83fc0afa94d1358db7cb974628c616ebc4", + "chksum_sha256": "d39c73e566e5696e0f6c153aca54de2bee9085dff7156bde3fe128861d69aab2", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/_parsed.cfg", + "name": "tests/unit/modules/network/ios/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "334a751e168137370f8d5baaae2c017e63cd9870191a2476633bdb33f5aec915", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/_populate_config.yaml", + "name": "tests/unit/modules/network/ios/test_ios_vxlan_vtep.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "909ad0ac69441e0c20405814bade15872ccc23e5b736632efcfd2880d863c6d7", + "chksum_sha256": "3a17f4db78edf67416a900d929d29f3384c5bf1c3df4ade474fb821703ffbe56", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/parsed.yaml", + "name": "tests/unit/modules/network/ios/test_ios_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e42472783ff99e3351a0a581b2ddcdaca689eb9cb8044af829d580473e17ac35", + "chksum_sha256": "41c9b2cac8e769dabfee1b1bb0605b20518dd345f91f1e3522287c5040cb6a78", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/tests/cli/rendered.yaml", + "name": "tests/unit/modules/network/ios/test_ios_bgp_address_family.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6cd846336af90bbf055ebce81f350f2187733b3580f5c227b07ad766e6c4bf9f", + "chksum_sha256": "6df2c02c70db2b5b94e8f1d57d17ca522e868e63726a5d440147898bafa6a90b", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/vars", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_static_routes.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "cf947c20e29837dbf0e3a749e34e7039686d4fdc680dbedea6eaa84b9aff6394", "format": 1 }, { - "name": "tests/integration/targets/ios_hostname/vars/main.yaml", + "name": "tests/unit/modules/network/ios/test_ios_prefix_lists.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "febb64d561f5a456e89d59fb77210502df86daa4eca07014b96993b76d0bc5ba", + "chksum_sha256": "3b81d60b1aa8a42360235888b69fb75cf5c68a6232dba1df3d3e85726a85e01c", "format": 1 }, { - "name": "tests/integration/target-prefixes.network", + "name": "tests/unit/modules/network/ios/test_ios_facts.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "39053a91dac30879cf24512c4234e519681a1e88be8af8b18415df87fa4b9006", + "chksum_sha256": "1fda5506769c35be3d3d6db871c80807c9ed052c7d74701da7b1b9ee0c03058a", "format": 1 }, { - "name": "tests/integration/network-integration.cfg", + "name": "tests/unit/modules/network/ios/test_ios_ospf_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "d67b11263a8f50b30bf43c7c2b4bdd8dc4f173f0b5dd22761311360dfbd56a1d", + "chksum_sha256": "4e00ef84b911124b4a4accd43340c7ecc9f23b59ae92801d4b1e44e14be30128", "format": 1 }, { - "name": "tests/.gitignore", + "name": "tests/unit/modules/network/ios/test_ios_l2_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", + "chksum_sha256": "789efea07aeca73695ac6318b8efa84135fd9bb01ab01287ad4f1caaaa2fac45", "format": 1 }, { - "name": "docs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "tests/unit/modules/network/ios/test_ios_lldp_global.py", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "b0f11b5fdfc4778112633dbe23e79fcda458799d5a8fb31b2d8b2a79194aab60", "format": 1 }, { - "name": "docs/cisco.ios.ios_vxlan_vtep_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_config.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aa7c5614fed7ad1558e45d3d74eb3188cbe0958515593ce2c437d017406ee842", + "chksum_sha256": "53a89a15a20ad61a015b720b548f4cbd379e0d14bcdbe1d29b8a52816294be6b", "format": 1 }, { - "name": "docs/cisco.ios.ios_lacp_interfaces_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_user.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7bf92f7c407a17daa5b09137112c2d2764968e812b549b74cd7a8e8a45e255c5", + "chksum_sha256": "ec27ba6f7ff75fbb7089e3a8da2d02ef6ae88af4d46875802ae6a93db6d5f9c0", "format": 1 }, { - "name": "docs/cisco.ios.ios_acl_interfaces_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_logging_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "cd05ed9845d1fc11685c746e9a9652f6bbd2670ec0a1d9ca39c5922ae46a64ba", + "chksum_sha256": "422ff5d9c0a8cc3ee7a6d94eb7bdfc035982af02dc1fcb1cbe970195e60e0490", "format": 1 }, { - "name": "docs/cisco.ios.ios_acls_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_vlans.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1aa35d1812bbb92f7b8ba18d3601df03851c682fde01e671f37ddc4c89ff7977", + "chksum_sha256": "617c226e92222fce590330664bc61fc898650e9f0a769a270cbb91aa7ced6ec3", "format": 1 }, { - "name": "docs/cisco.ios.ios_bgp_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_system.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3613c63ea42c85758bc78c1f2f5c970489a96411c41cc0ba7bf216994df8bdc1", + "chksum_sha256": "173cc0ea9b86c0a3672110ccf67e37bc9353519dfe556b22f969ee4a15e991cc", "format": 1 }, { - "name": "docs/cisco.ios.ios_config_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_bgp_global.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3240939a84f27d689eacaf2ce4c89da3c03ee5a2a2739a127d196cb2691784b5", + "chksum_sha256": "f1d485573e2b2ea1ec54e44a085cb811501bb513294a6b8a497c9bdad942b0a7", "format": 1 }, { - "name": "docs/cisco.ios.ios_static_routes_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_acls.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af3d82a1af37c9549d096096f205882d772383bb5c2535ad29efa8424cd413d4", + "chksum_sha256": "e659d95939b8e1e6dea3800b689a53b4df377ef1d4ddece5a738764eb5135b99", "format": 1 }, { - "name": "docs/cisco.ios.ios_ospfv3_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_ospfv3.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e832b1aef91fbd553177805605dd98df5f00f78c63be2a607b631d826e11e086", + "chksum_sha256": "d375c857fee27d16d1553b33bf5398356bb2563b924c4c1e30ce9b4da21289d9", "format": 1 }, { - "name": "docs/cisco.ios.ios_ospfv2_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_lacp_interfaces.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cda4e6568a61d285a6a2de4dffcfa476d33b65ab1b41565d981af4d3bee587b", + "chksum_sha256": "a3009a93056257774086045d682f2a979ae5d99b0e469c80b050d4bc4e10e662", "format": 1 }, { - "name": "docs/cisco.ios.ios_bgp_address_family_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_command.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ef1f1c1bce1238a8e1c30e174c361edb41440f8a4ca5892a51651d687e885b9a", + "chksum_sha256": "977da72df67bef7c5c2a6a0af6ce67292634f3f3b76bc4533bb4f9684302ac31", "format": 1 }, { - "name": "docs/cisco.ios.ios_l3_interfaces_module.rst", + "name": "tests/unit/modules/network/ios/test_ios_banner.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "51ba7650c179e3da62a417f92608431f7d46cf9fb6206772ecd3d5f703d856ee", + "chksum_sha256": "82953a03a9f12f373907684cb7fd0838e83e61619ea7861e8664ba2608b52ef9", "format": 1 }, { - "name": "docs/cisco.ios.ios_user_module.rst", + "name": "tests/unit/modules/utils.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "3e0e3e1d9ad718db52097b1754064e310a3a434709203a7905f6e1a72fb71722", + "chksum_sha256": "414c272e9a403bb6009460ec9502c5acfaa9c80b2159c742f6cb2e225938be3e", "format": 1 }, { - "name": "docs/cisco.ios.ios_facts_module.rst", + "name": "tests/unit/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "827c48cf4385cff2d361bfc60df1d6678cbb046f3ed39ff42426057448cdba1a", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/cisco.ios.ios_logging_global_module.rst", + "name": "tests/unit/requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ec4443978907eee51ca4b9f1dc2ffe6534b3c3479e7555aacfdb82895d45594", + "chksum_sha256": "49ba996dc4735c3463e9af561344346dfae14bcc1a68096ce78364b377f0df1f", "format": 1 }, { - "name": "docs/cisco.ios.ios_ntp_global_module.rst", + "name": "tests/.gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "aac96eeacf4a0b344b25dca00c91f780a8b9233e9ceed3a71e0fbd339739a1b5", + "chksum_sha256": "b5726d3ec9335a09c124469eca039523847a6b0f08a083efaefd002b83326600", "format": 1 }, { - "name": "docs/cisco.ios.ios_vlans_module.rst", + "name": "codecov.yml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "913875bef455036cf1ee302748251aa802719e0ef415a6599df62f4afaaf843d", + "chksum_sha256": "4aa7e485dd4db6f8a55b046088c745def2b3145d9499ccda4e9a3336467dcea2", "format": 1 }, { - "name": "docs/cisco.ios.ios_snmp_server_module.rst", + "name": "tox-ansible.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "fd2156ed69609eb4271746660a9b338a4a1b2e5d7fbf9533ac350f1a5d84a407", + "chksum_sha256": "da802bfc2dc2671ca7caba028e8a635b459b131874041d119b698717333a7a49", "format": 1 }, { - "name": "docs/cisco.ios.ios_prefix_lists_module.rst", + "name": ".gitignore", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c6d0a0fe60c76d6c91776efcc420942c78f5ccbdc3e0f413e4ca3e7ead839506", + "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2", "format": 1 }, { - "name": "docs/cisco.ios.ios_lag_interfaces_module.rst", + "name": "cspell.config.yaml", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "97da1f7af33eae5e26a4537ddd3cbf0fc4fd811da0609dea6db3af82af8f53bd", + "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5", "format": 1 }, { - "name": "docs/__init__.py", + "name": "LICENSE", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986", "format": 1 }, { - "name": "docs/cisco.ios.ios_evpn_evi_module.rst", + "name": "mypy.ini", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "10749ddf85943d2fe186d9ba9bf1fef8326bd267408ee21e9497e7b751f09e9a", + "chksum_sha256": "5cc01a9c3e2a80b779ca004be5e4df814eebd494db650387b1bde98267a0b317", "format": 1 }, { - "name": "docs/cisco.ios.ios_linkagg_module.rst", + "name": ".flake8", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "b123e1380c285f81d808170a79e2e82972af3c1b2e438cfb698a5d373c6be3cf", + "chksum_sha256": "7214cfc0a1b4e8b89190e868962196874d9396503f77e47d7dfa342bd29b2a74", "format": 1 }, { - "name": "docs/cisco.ios.ios_service_module.rst", + "name": "CHANGELOG.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "339ca54b72e461c16788f0a63bdf71786b9a45a4d848251916811ecfe9254a4b", + "chksum_sha256": "22c466a51fb52639d7668078c84f1bb384fcd9c4a8b2522999f698edef8d061c", "format": 1 }, { - "name": "docs/cisco.ios.ios_route_maps_module.rst", + "name": "requirements.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "af30dade8c6261c751142d983650af7a4c8c2e142f2fceaaf3bb604e88d9beb4", + "chksum_sha256": "47d9fe78273fd64c750e78a317b1a59a6f87ebb93d8d4cf9ae6d98a0f2fc9f9e", "format": 1 }, { - "name": "docs/cisco.ios.ios_ntp_module.rst", - "ftype": "file", - "chksum_type": "sha256", - "chksum_sha256": "0ddbf43a41134d7100e58365a10c02a60674a1b37152d4bb07a2dd42b2e54d97", + "name": "docs", + "ftype": "dir", + "chksum_type": null, + "chksum_sha256": null, "format": 1 }, { - "name": "docs/cisco.ios.ios_lldp_module.rst", + "name": "docs/cisco.ios.ios_config_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f499f07239788d95c91a8413b7324e5370a88992e41ded149aeb130412e4f3b5", + "chksum_sha256": "3240939a84f27d689eacaf2ce4c89da3c03ee5a2a2739a127d196cb2691784b5", "format": 1 }, { - "name": "docs/cisco.ios.ios_interfaces_module.rst", + "name": "docs/cisco.ios.ios_command_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f2081011b7cdb08c36dea3476b69ae849614273cd5e800e374edc9123fc04d71", + "chksum_sha256": "8b4546a6a039b29fb5919487fe5b8339d5cb34464e23cf1b07b2d82baf55bbed", "format": 1 }, { - "name": "docs/cisco.ios.ios_system_module.rst", + "name": "docs/cisco.ios.ios_linkagg_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2d9c9ff70523a1f9db7b5d860607252a06b799c12ea8e001944075338f0c32c7", + "chksum_sha256": "b123e1380c285f81d808170a79e2e82972af3c1b2e438cfb698a5d373c6be3cf", "format": 1 }, { - "name": "docs/cisco.ios.ios_vrf_module.rst", + "name": "docs/cisco.ios.ios_ping_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "6ffdd6a11d84d30baee6bf9a10859470627b4ba0521d3d3eb85def9758078a4d", + "chksum_sha256": "2cc3e7247773d272c66efe02e9791b27bd7ae28afb28a26d597d80741042467f", "format": 1 }, { @@ -10109,269 +9801,255 @@ "format": 1 }, { - "name": "docs/cisco.ios.ios_l2_interfaces_module.rst", + "name": "docs/cisco.ios.ios_lldp_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "0a4f000d638f6ee2223d344c7b3c260cfcead1d04793e33c84da4cbbd30b1358", + "chksum_sha256": "f499f07239788d95c91a8413b7324e5370a88992e41ded149aeb130412e4f3b5", "format": 1 }, { - "name": "docs/cisco.ios.ios_lldp_global_module.rst", + "name": "docs/cisco.ios.ios_logging_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "12967941c3851fa6f982162e20ce5a0a3c4eeec8f948b367b8ba680af7c50202", + "chksum_sha256": "6ec4443978907eee51ca4b9f1dc2ffe6534b3c3479e7555aacfdb82895d45594", "format": 1 }, { - "name": "docs/cisco.ios.ios_ping_module.rst", + "name": "docs/cisco.ios.ios_ospfv3_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "2cc3e7247773d272c66efe02e9791b27bd7ae28afb28a26d597d80741042467f", + "chksum_sha256": "e832b1aef91fbd553177805605dd98df5f00f78c63be2a607b631d826e11e086", "format": 1 }, { - "name": "docs/cisco.ios.ios_bgp_global_module.rst", + "name": "docs/cisco.ios.ios_l3_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "89a09f8b1c1900b6dba84033c17963299db060d02fc6b79b1c252c5605765aea", + "chksum_sha256": "bc4a295c5de44164ad073994aea4eb7a7b38b51e503848e11312e354fe567a7d", "format": 1 }, { - "name": "docs/cisco.ios.ios_ospf_interfaces_module.rst", + "name": "docs/cisco.ios.ios_vxlan_vtep_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "736695017ca633989a5ce8d1e661fee1cf6d545cf98f975a8ecc42897e352dcb", + "chksum_sha256": "fe7e11d2742a5c657e48ca08d56b4eee718e65518eae65f3df640c611275eadd", "format": 1 }, { - "name": "docs/cisco.ios.ios_banner_module.rst", + "name": "docs/cisco.ios.ios_ospfv2_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "347f291cfde6d03ea4e5d58a4e81b565cb29450c980cb453d41807836ec60c1f", + "chksum_sha256": "1cda4e6568a61d285a6a2de4dffcfa476d33b65ab1b41565d981af4d3bee587b", "format": 1 }, { - "name": "docs/cisco.ios.ios_hostname_module.rst", + "name": "docs/cisco.ios.ios_vlans_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c17247e2b97de9179680bdd136c547b0b8a4b15d8f6faf22d79543f6e9800246", + "chksum_sha256": "1929d51d16b155395fe24200115859d3107378a420162bf57889a9931d1f1861", "format": 1 }, { - "name": "docs/cisco.ios.ios_evpn_global_module.rst", + "name": "docs/cisco.ios.ios_facts_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "ea291a372120106d38f214b7e0585cc40768c3459232a46d717042872c3ed18d", + "chksum_sha256": "827c48cf4385cff2d361bfc60df1d6678cbb046f3ed39ff42426057448cdba1a", "format": 1 }, { - "name": "docs/cisco.ios.ios_command_module.rst", + "name": "docs/cisco.ios.ios_route_maps_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8b4546a6a039b29fb5919487fe5b8339d5cb34464e23cf1b07b2d82baf55bbed", + "chksum_sha256": "af30dade8c6261c751142d983650af7a4c8c2e142f2fceaaf3bb604e88d9beb4", "format": 1 }, { - "name": "docs/cisco.ios.ios_cliconf.rst", + "name": "docs/__init__.py", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "a17502a2fd8ed08d762ce2e747b95c2b5dfe106d69afbaf97b8e141ac0597668", + "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "format": 1 }, { - "name": "docs/cisco.ios.ios_lldp_interfaces_module.rst", + "name": "docs/cisco.ios.ios_user_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "619db6d298ab8b20cac142e84d3b24258ae70d3b5c092605a4c6ae2fa7d49e12", + "chksum_sha256": "f96397bba27708b066076c0a259766a30ffa86a6711ff56f35201477bec8b28b", "format": 1 }, { - "name": ".isort.cfg", + "name": "docs/cisco.ios.ios_bgp_address_family_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "f287de31c528e7d37475770952855fb25ec053d0bcaedd577091d13807b4c5dc", + "chksum_sha256": "fd627997ec9ae45c6c26bde87fde2ac21ce4b0b47bf5f2431037e95751dd48b1", "format": 1 }, { - "name": "pyproject.toml", + "name": "docs/cisco.ios.ios_cliconf.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1cb6a45dfa2625123890b93ad7fdc156b063c16e8ae6dba11511a1d1986b0fcc", + "chksum_sha256": "a17502a2fd8ed08d762ce2e747b95c2b5dfe106d69afbaf97b8e141ac0597668", "format": 1 }, { - "name": ".flake8", + "name": "docs/cisco.ios.ios_static_routes_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c3619890addbe81b337523c7d31461089055b267a3665f5f5c93d47fa0dbee96", + "chksum_sha256": "af3d82a1af37c9549d096096f205882d772383bb5c2535ad29efa8424cd413d4", "format": 1 }, { - "name": ".darglint", + "name": "docs/cisco.ios.ios_lag_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "954a7045c6fa17fddfe80995f7f8251efb6df1a2b05eaf479afca6bbc6dfd4f2", + "chksum_sha256": "97da1f7af33eae5e26a4537ddd3cbf0fc4fd811da0609dea6db3af82af8f53bd", "format": 1 }, { - "name": "bindep.txt", + "name": "docs/cisco.ios.ios_banner_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5", - "format": 1 - }, - { - "name": "changelogs", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, - "format": 1 - }, - { - "name": "changelogs/fragments", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "chksum_sha256": "347f291cfde6d03ea4e5d58a4e81b565cb29450c980cb453d41807836ec60c1f", "format": 1 }, { - "name": "changelogs/fragments/.keep", + "name": "docs/cisco.ios.ios_evpn_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "f3554b673098af0468b7f528d0c68480648620c96205934c883787352120d7f6", "format": 1 }, { - "name": "changelogs/config.yaml", + "name": "docs/cisco.ios.ios_evpn_evi_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "1bb849048d65cc2f9361aa278e580f629a47e0aca570fdb0f34cf4ef55dd332c", + "chksum_sha256": "1f5131a6c1ff51286735287d453712af785c8e417afb47deab8767fa44a3dccd", "format": 1 }, { - "name": "changelogs/changelog.yaml", + "name": "docs/cisco.ios.ios_system_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c85e91411a1533ae69219589ad751c388129bcd0059e5b0b49b30fe659317353", + "chksum_sha256": "2d9c9ff70523a1f9db7b5d860607252a06b799c12ea8e001944075338f0c32c7", "format": 1 }, { - "name": "tox.ini", + "name": "docs/cisco.ios.ios_ntp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "beb3313789623e5570d0871f6115ba563a0d92ea75e8e89cbd9f79045b4fe279", + "chksum_sha256": "aac96eeacf4a0b344b25dca00c91f780a8b9233e9ceed3a71e0fbd339739a1b5", "format": 1 }, { - "name": "CHANGELOG.rst", + "name": "docs/cisco.ios.ios_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "90fe1b08554e8c1a683f663f7d7bcf69a6395e4cbf63ae1917a6dd7ca9fdd3cd", + "chksum_sha256": "f2081011b7cdb08c36dea3476b69ae849614273cd5e800e374edc9123fc04d71", "format": 1 }, { - "name": ".gitignore", + "name": "docs/cisco.ios.ios_snmp_server_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "179a6d0780422c32653a71b9395a3ecb8b3859346ffa3e38ca3c8d90f8063fd2", + "chksum_sha256": "fd2156ed69609eb4271746660a9b338a4a1b2e5d7fbf9533ac350f1a5d84a407", "format": 1 }, { - "name": ".pre-commit-config.yaml", + "name": "docs/cisco.ios.ios_service_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "08940a10222925e0f47d36e2457f1b3e7045ed20b4e72989208b83cda88a2c25", + "chksum_sha256": "339ca54b72e461c16788f0a63bdf71786b9a45a4d848251916811ecfe9254a4b", "format": 1 }, { - "name": ".prettierignore", + "name": "docs/cisco.ios.ios_lldp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "87f689e56b912f78012677dba2e0237a65f7b3c1f903006cddefab21bf0689f2", + "chksum_sha256": "619db6d298ab8b20cac142e84d3b24258ae70d3b5c092605a4c6ae2fa7d49e12", "format": 1 }, { - "name": ".github", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.ios.ios_bgp_global_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "f40e9c7282d17d9d0714e8078d2fff25c1afed77183c44b61f68fc5955a94b1e", "format": 1 }, { - "name": ".github/dependabot.yml", + "name": "docs/cisco.ios.ios_prefix_lists_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "11ceee3c57116e9fd08bc423414b1095ff002aa012d6fb325b1a7e24d7e28461", + "chksum_sha256": "c6d0a0fe60c76d6c91776efcc420942c78f5ccbdc3e0f413e4ca3e7ead839506", "format": 1 }, { - "name": ".github/CODEOWNERS", + "name": "docs/cisco.ios.ios_acl_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "chksum_sha256": "cd05ed9845d1fc11685c746e9a9652f6bbd2670ec0a1d9ca39c5922ae46a64ba", "format": 1 }, { - "name": ".github/workflows", - "ftype": "dir", - "chksum_type": null, - "chksum_sha256": null, + "name": "docs/cisco.ios.ios_ospf_interfaces_module.rst", + "ftype": "file", + "chksum_type": "sha256", + "chksum_sha256": "736695017ca633989a5ce8d1e661fee1cf6d545cf98f975a8ecc42897e352dcb", "format": 1 }, { - "name": ".github/workflows/codecoverage.yml", + "name": "docs/cisco.ios.ios_l2_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "8bbcae622f5e51798b577df290135e846244399c2a6ccbfedac523b38a8330a3", + "chksum_sha256": "0a4f000d638f6ee2223d344c7b3c260cfcead1d04793e33c84da4cbbd30b1358", "format": 1 }, { - "name": ".github/workflows/lint.yml", + "name": "docs/cisco.ios.ios_lldp_global_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "4aeac57f14d48d82a859c822f84a0573419958bc70708f19caa6daac5c771ff9", + "chksum_sha256": "12967941c3851fa6f982162e20ce5a0a3c4eeec8f948b367b8ba680af7c50202", "format": 1 }, { - "name": ".github/workflows/ack.yml", + "name": "docs/cisco.ios.ios_vrf_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "24c6fbafaa69e3e3ee696f2cefa5120794b62cef7e870553dddce8b8af0a127c", + "chksum_sha256": "45ccaff681470c3ed5a60bf5932c14eaef7106ad08fd075d3a093db856b4829d", "format": 1 }, { - "name": ".github/workflows/release.yml", + "name": "docs/cisco.ios.ios_lacp_interfaces_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c9b7dba505905600bbb9f0d8e9956b7cc20f80edfa742dfdae9395542f417aa1", + "chksum_sha256": "7bf92f7c407a17daa5b09137112c2d2764968e812b549b74cd7a8e8a45e255c5", "format": 1 }, { - "name": ".github/workflows/push.yml", + "name": "docs/cisco.ios.ios_hostname_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "345f246b1e078aa3929a09eca7eb37ed4391f0a92c6446f6d6c507a15b45a1a7", + "chksum_sha256": "c17247e2b97de9179680bdd136c547b0b8a4b15d8f6faf22d79543f6e9800246", "format": 1 }, { - "name": ".github/workflows/tests.yml", + "name": "docs/cisco.ios.ios_acls_module.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "345e7bd3d711ba8194fc11c32bc1935fe6d7916869c7d6908c9e95807f8b1c47", + "chksum_sha256": "9d7f27e505c82c628489be78ca29cc4daa711aa7e3f4d3a40985e768ec2060cb", "format": 1 }, { - "name": ".github/release-drafter.yml", + "name": "bindep.txt", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "7cbc785c8661033cd9dd7a60897484fce731cbe3dc124a689fc3e934b1d974fb", + "chksum_sha256": "80645079eb025b3a905b4775ac545d080a3d7d35d537c31e04f7197c94315ab5", "format": 1 }, { - "name": "cspell.config.yaml", + "name": "platform_guide.rst", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "e1079e6d02ed34033bf83913e7b66ff7bd042e6d8ed4c113aea31123f557deb5", + "chksum_sha256": "b554e3c11718d6ac890f5f861e5996a7c12348766263a10fb34b315da899c58d", "format": 1 } ], diff --git a/ansible_collections/cisco/ios/MANIFEST.json b/ansible_collections/cisco/ios/MANIFEST.json index 99e11f380..5d60df311 100644 --- a/ansible_collections/cisco/ios/MANIFEST.json +++ b/ansible_collections/cisco/ios/MANIFEST.json @@ -2,7 +2,7 @@ "collection_info": { "namespace": "cisco", "name": "ios", - "version": "5.3.0", + "version": "8.0.0", "authors": [ "Ansible Network Community (ansible-network)" ], @@ -17,7 +17,7 @@ "license": [], "license_file": "LICENSE", "dependencies": { - "ansible.netcommon": ">=2.5.1" + "ansible.netcommon": ">=6.1.0" }, "repository": "https://github.com/ansible-collections/cisco.ios", "documentation": null, @@ -28,7 +28,7 @@ "name": "FILES.json", "ftype": "file", "chksum_type": "sha256", - "chksum_sha256": "c1004e08946bf844b562ad6b5101fdf12a9c2338c282804e88f8a909b30d948c", + "chksum_sha256": "4adbe8b0c73c340e1c6bf6a6fabd848c98b04f047780987f22e6573f13477dfd", "format": 1 }, "format": 1 diff --git a/ansible_collections/cisco/ios/README.md b/ansible_collections/cisco/ios/README.md index da89549a1..8d8456157 100644 --- a/ansible_collections/cisco/ios/README.md +++ b/ansible_collections/cisco/ios/README.md @@ -11,7 +11,7 @@ This collection has been tested against Cisco IOS XE Version 17.3 on CML. <!--start requires_ansible--> ## Ansible version compatibility -This collection has been tested against following Ansible versions: **>=2.9.10**. +This collection has been tested against following Ansible versions: **>=2.14.0**. For collections that support Ansible 2.9, please ensure you update your `network_os` to use the fully qualified collection name (for example, `cisco.ios.ios`). @@ -22,7 +22,7 @@ PEP440 is the schema used to describe the versions of Ansible. ### Supported connections -The Cisco IOS collection supports `network_cli` connections. +The Cisco IOS collection supports `network_cli` connections. A detailed platform guide can be found [here](https://github.com/ansible-collections/cisco.ios/blob/main/platform_guide.rst). ## Included content @@ -38,7 +38,6 @@ Name | Description [cisco.ios.ios_acl_interfaces](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_acl_interfaces_module.rst)|Resource module to configure ACL interfaces. [cisco.ios.ios_acls](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_acls_module.rst)|Resource module to configure ACLs. [cisco.ios.ios_banner](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_banner_module.rst)|Module to configure multiline banners. -[cisco.ios.ios_bgp](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_bgp_module.rst)|Module to configure BGP protocol settings. [cisco.ios.ios_bgp_address_family](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_bgp_address_family_module.rst)|Resource module to configure BGP Address family. [cisco.ios.ios_bgp_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_bgp_global_module.rst)|Resource module to configure BGP. [cisco.ios.ios_command](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_command_module.rst)|Module to run commands on remote devices. @@ -58,7 +57,6 @@ Name | Description [cisco.ios.ios_lldp_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_lldp_global_module.rst)|Resource module to configure LLDP. [cisco.ios.ios_lldp_interfaces](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_lldp_interfaces_module.rst)|Resource module to configure LLDP interfaces. [cisco.ios.ios_logging_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_logging_global_module.rst)|Resource module to configure logging. -[cisco.ios.ios_ntp](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ntp_module.rst)|(deprecated, removed after 2024-01-01) Manages core NTP configuration. [cisco.ios.ios_ntp_global](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ntp_global_module.rst)|Resource module to configure NTP. [cisco.ios.ios_ospf_interfaces](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ospf_interfaces_module.rst)|Resource module to configure OSPF interfaces. [cisco.ios.ios_ospfv2](https://github.com/ansible-collections/cisco.ios/blob/main/docs/cisco.ios.ios_ospfv2_module.rst)|Resource module to configure OSPFv2. diff --git a/ansible_collections/cisco/ios/changelogs/changelog.yaml b/ansible_collections/cisco/ios/changelogs/changelog.yaml index 510f6b809..e57571cd7 100644 --- a/ansible_collections/cisco/ios/changelogs/changelog.yaml +++ b/ansible_collections/cisco/ios/changelogs/changelog.yaml @@ -2,107 +2,75 @@ ancestor: null releases: 1.0.0: modules: - - description: ACL interfaces resource module + - description: Resource module to configure ACL interfaces. name: ios_acl_interfaces namespace: "" - - description: ACLs resource module + - description: Resource module to configure ACLs. name: ios_acls namespace: "" - - description: Manage multiline banners on Cisco IOS devices + - description: Module to configure multiline banners. name: ios_banner namespace: "" - - description: Configure global BGP protocol settings on Cisco IOS. - name: ios_bgp - namespace: "" - - description: Run commands on remote devices running Cisco IOS + - description: Module to run commands on remote devices. name: ios_command namespace: "" - - description: Manage Cisco IOS configuration sections + - description: Module to manage configuration sections. name: ios_config namespace: "" - - description: Collect facts from remote devices running Cisco IOS + - description: Module to collect facts from remote devices. name: ios_facts namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Interface on Cisco - IOS network devices - name: ios_interface - namespace: "" - - description: Interfaces resource module + - description: Resource module to configure interfaces. name: ios_interfaces namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Layer-2 interface - on Cisco IOS devices. - name: ios_l2_interface - namespace: "" - - description: L2 interfaces resource module + - description: Resource module to configure L2 interfaces. name: ios_l2_interfaces namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage Layer-3 interfaces - on Cisco IOS network devices. - name: ios_l3_interface - namespace: "" - - description: L3 interfaces resource module + - description: Resource module to configure L3 interfaces. name: ios_l3_interfaces namespace: "" - - description: LACP resource module + - description: Resource module to configure LACP. name: ios_lacp namespace: "" - - description: LACP interfaces resource module + - description: Resource module to configure LACP interfaces. name: ios_lacp_interfaces namespace: "" - - description: LAG interfaces resource module + - description: Resource module to configure LAG interfaces. name: ios_lag_interfaces namespace: "" - - description: Manage link aggregation groups on Cisco IOS network devices + - description: Module to configure link aggregation groups. name: ios_linkagg namespace: "" - - description: Manage LLDP configuration on Cisco IOS network devices. + - description: + (deprecated, removed after 2024-06-01) Manage LLDP configuration + on Cisco IOS network devices. name: ios_lldp namespace: "" - - description: LLDP resource module + - description: Resource module to configure LLDP. name: ios_lldp_global namespace: "" - - description: LLDP interfaces resource module + - description: Resource module to configure LLDP interfaces. name: ios_lldp_interfaces namespace: "" - - description: Manage logging on network devices - name: ios_logging - namespace: "" - - description: Manages core NTP configuration. - name: ios_ntp - namespace: "" - - description: OSPFv2 resource module + - description: Resource module to configure OSPFv2. name: ios_ospfv2 namespace: "" - - description: Tests reachability using ping from Cisco IOS network devices + - description: Tests reachability using ping from IOS switch. name: ios_ping namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage static IP routes - on Cisco IOS network devices - name: ios_static_route - namespace: "" - - description: Static routes resource module + - description: Resource module to configure static routes. name: ios_static_routes namespace: "" - - description: Manage the system attributes on Cisco IOS devices + - description: Module to manage the system attributes. name: ios_system namespace: "" - - description: Manage the aggregate of local users on Cisco IOS device + - description: Module to manage the aggregates of local users. name: ios_user namespace: "" - - description: - (deprecated, removed after 2022-06-01) Manage VLANs on IOS network - devices - name: ios_vlan - namespace: "" - - description: VLANs resource module + - description: Resource module to configure VLANs. name: ios_vlans namespace: "" - - description: Manage the collection of VRF definitions on Cisco IOS devices + - description: Module to configure VRF definitions. name: ios_vrf namespace: "" plugins: @@ -153,7 +121,7 @@ releases: minor_changes: - Add ios_ospfv3 module. modules: - - description: OSPFv3 resource module + - description: Resource module to configure OSPFv3. name: ios_ospfv3 namespace: "" release_date: "2020-10-01" @@ -172,7 +140,7 @@ releases: minor_changes: - Add ios_ospf_interfaces module. modules: - - description: OSPF Interfaces resource module + - description: Resource module to configure OSPF interfaces. name: ios_ospf_interfaces namespace: "" release_date: "2020-11-01" @@ -196,7 +164,7 @@ releases: minor_changes: - Add ios_bgp_global module. modules: - - description: BGP Global resource module + - description: Resource module to configure BGP. name: ios_bgp_global namespace: "" release_date: "2021-01-29" @@ -214,7 +182,7 @@ releases: - Add ios_bgp_address_family Resource Module. (https://github.com/ansible-collections/cisco.ios/pull/219). - Adds support for single_user_mode command output caching. (https://github.com/ansible-collections/cisco.ios/pull/204). modules: - - description: BGP Address Family resource module. + - description: Resource module to configure BGP Address family. name: ios_bgp_address_family namespace: "" release_date: "2021-02-25" @@ -246,7 +214,7 @@ releases: security_fixes: - To fix Cisco IOS no log issue and add ignore txt for 2.12 (https://github.com/ansible-collections/cisco.ios/pull/304). modules: - - description: Route Maps resource module. + - description: Resource module to configure route maps. name: ios_route_maps namespace: "" release_date: "2021-04-27" @@ -265,10 +233,10 @@ releases: - Add ios_logging_global module. - IOS Prefix list resource module. modules: - - description: Logging resource module. + - description: Resource module to configure logging. name: ios_logging_global namespace: "" - - description: Prefix Lists resource module. + - description: Resource module to configure prefix lists. name: ios_prefix_lists namespace: "" release_date: "2021-05-18" @@ -377,7 +345,7 @@ releases: - sd_wan_support.yaml - set_allow_duplicates.yaml modules: - - description: ntp_global resource module + - description: Resource module to configure NTP. name: ios_ntp_global namespace: "" release_date: "2021-09-24" @@ -409,7 +377,7 @@ releases: - sanity-213.yaml - snmp_server_resource_module.yaml modules: - - description: snmp_server resource module + - description: Resource module to configure snmp server. name: ios_snmp_server namespace: "" release_date: "2021-12-07" @@ -452,7 +420,7 @@ releases: - snmp_server_feature_user.yaml - static_route_interface_issue.yaml modules: - - description: hostname resource module + - description: Resource module to configure hostname. name: ios_hostname namespace: "" release_date: "2022-01-31" @@ -1065,3 +1033,130 @@ releases: name: ios_vxlan_vtep namespace: "" release_date: "2023-11-29" + 6.0.0: + changes: + major_changes: + - Bumping `requires_ansible` to `>=2.14.0`, since previous ansible-core versions + are EoL now. + release_summary: + Starting from this release, the minimum `ansible-core` version + this collection requires is `2.14.0`. The last known version compatible with + ansible-core<2.14 is `v5.3.0`. + removed_features: + - Removed previously deprecated ios_bgp module in favor of ios_bgp_global and + ios_bgp_address_family. + fragments: + - bgp_dep_rem.yml + - major_600.yml + release_date: "2023-11-30" + 6.1.0: + changes: + bugfixes: + - ios_bgp_global - fix template attribute to generate configuration commands. + - ios_l3_interfaces - remove validation from ipv6 address parameter. + - ios_snmp_server - fix group and user IPv6 ACL commands. + - ios_user - fix configuration of user with hashed password. + - ios_user - fixed configuration removal of ssh users using purge. + - ios_vlans - Make behaviour of the action states consistent. + - ios_vlans - Top level configuration attribute is not required, the module + works with vlan and vlan configuration both. + minor_changes: + - ios_bgp_global - added 'bgp.default.ipv4_unicast' and 'bgp.default.route_target.filter' + key + - ios_l3_interfaces - added 'autostate', 'mac_address', 'ipv4.source_interface', + and 'ipv6.enable' key + - ios_vlans - Add purged state to deal with toplevel vlan and vlan configuration + config. + fragments: + - fix_ios_bgp_global_20231204173037.yaml + - fix_ios_l3_interfacel_20231207172506.yaml + - ios_facts_tests.yml + - ios_l3_ipv6.yml + - ios_user_fix.yml + - ios_vlans_revert.yml + - snmp_server_ipv6_acl.yml + - template_revoke_bgp.yaml + release_date: "2024-01-11" + 6.1.1: + changes: + bugfixes: + - Prevents module_defaults from were being incorrectly applied to the platform + action, instead of the concerned module. + - ios_vlans - fixes behaviour of shutdown attribute with action states. + fragments: + - module_defaults.yaml + - vlan_shutdown_fix.yaml + release_date: "2024-01-30" + 6.1.2: + changes: + bugfixes: + - ios_acls - Fix replaced state to consider remarks and ace entries while comparing + configuration. + - ios_acls - correctly match the different line for ACL without sequence number + - ios_acls - take correctly in case where we want to push an ACL from a different + type + - ios_ospfv2 - Fix improper rendering of admin_distance attribute. + - ios_snmp_server - fixed config issue with snmp user password update being + idempotent on consecutive runs. + - ios_user - Fix configuration of hashed passwords and secrets. + fragments: + - ios_acls_changes.yml + - ios_acls_replaced_state.yml + - ios_user_bug.yml + - ospfv2_admin_distance_fix.yml + - snmp_idempotancy_fix.yml + release_date: "2024-02-14" + 6.1.3: + changes: + bugfixes: + - ios_acls - Adds back existing remarks for an ace entry when updated with replaced + or overridden state, as all remarks for a specific sequence gets removed when + ace entry is updated. + - ios_bgp_global - Shutdown attributes generates negate command on set as false. + - ios_vrf - Update and add missing argspec keys that define the attributes. + doc_changes: + - ios_vrf - Update and add missing documentation for ios_vrf module. + fragments: + - bgp_global_shutdown.yml + - ios_acls_sticky.yml + - ios_vrf_docfix.yml + release_date: "2024-03-08" + 6.1.4: + changes: + bugfixes: + - ios_acls - update module to apply remarks entry with sequence numbers. + - ios_bgp_address_family - description attribute, evalutated as complex object + casted to string. + - ios_bgp_global - description attribute, evalutated as complex object casted + to string. + - ios_interfaces - description attribute, evalutated as complex object casted + to string. + - ios_prefix_lists - description attribute, evalutated as complex object casted + to string. + - ios_route_maps - description attribute, evalutated as complex object casted + to string. + fragments: + - acl_refactor.yaml + - json_serializable_issue.yaml + release_date: "2024-03-27" + 7.0.0: + changes: + major_changes: + - ios_ntp - Remove deprecated ntp legacy module + removed_features: + - Deprecated ios_ntp module in favor of ios_ntp_global. + fragments: + - remove_deprecated.yml + release_date: "2024-04-01" + 8.0.0: + changes: + major_changes: + - Update the netcommon base version 6.1.0 to support cli_restore plugin. + minor_changes: + - Add support for cli_restore functionality. + - Please refer the PR to know more about core changes (https://github.com/ansible-collections/ansible.netcommon/pull/618). + - cli_restore module is part of netcommon. + fragments: + - add_restore_support.yaml + - sanityfix.yml + release_date: "2024-04-12" diff --git a/ansible_collections/cisco/ios/changelogs/config.yaml b/ansible_collections/cisco/ios/changelogs/config.yaml index e7a09b4e5..f18533f71 100644 --- a/ansible_collections/cisco/ios/changelogs/config.yaml +++ b/ansible_collections/cisco/ios/changelogs/config.yaml @@ -1,3 +1,4 @@ +--- changelog_filename_template: ../CHANGELOG.rst changelog_filename_version_depth: 0 changes_file: changelog.yaml diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst index a76156dd6..bb0328d87 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_acls_module.rst @@ -3145,6 +3145,8 @@ Parameters <div>The remarks/description of the ACL.</div> <div>The remarks attribute used within an ace with or without a sequence number will produce remarks that are pushed before the ace entry.</div> <div>Remarks entry used as the only key in as the list option will produce non ace specific remarks, these remarks would be pushed at the end of all the aces for an acl.</div> + <div>Remarks is treated a block, for every single remarks updated for an ace all the remarks are negated and added back to maintain the order of remarks mentioned.</div> + <div>As the appliance deletes all the remarks once the ace is updated, the set of remarks would be re-applied that is an expected behavior.</div> </td> </tr> <tr> @@ -5195,6 +5197,347 @@ Examples # ip access-list extended 150 # 10 deny tcp 198.51.100.0 0.0.0.255 eq telnet 198.51.110.0 0.0.0.255 eq telnet syn dscp ef ttl eq 10 + # Using overridden - example remarks specific on multiple sequence + + # Before state: + # ------------- + # + # vios#show running-config | section access-list + # ip access-list extended TEST + # 10 remark FIRST REMARK BEFORE SEQUENCE 10 + # 10 remark ============ + # 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # 20 remark FIRST REMARK BEFORE SEQUENCE 20 + # 20 remark ============ + # 20 remark ALLOW HOST FROM SEQUENCE 20 + # 20 permit ip host 1.1.1.1 any + # 30 remark FIRST REMARK BEFORE SEQUENCE 30 + # 30 remark ============ + # 30 remark ALLOW HOST FROM SEQUENCE 30 + # 30 permit ip host 2.2.2.2 any + # 40 remark FIRST REMARK BEFORE SEQUENCE 40 + # 40 remark ============ + # 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + # 40 permit ip host 3.3.3.3 any + # remark Remark not specific to sequence + # remark ============ + # remark End Remarks + # ip access-list extended test_acl + # 10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 + # ip access-list extended 110 + # 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + # ip access-list extended 123 + # 10 deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 + # 20 deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 + # ipv6 access-list R1_TRAFFIC + # sequence 10 deny tcp any eq www any eq telnet ack dscp af11 + + - name: Override remarks and ace configurations + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 192.168.0.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30 updated" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks 1" + state: overridden + + # Task Output + # ----------- + # + # before: + # - acls: + # - aces: + # - destination: + # address: 192.0.3.0 + # wildcard_bits: 0.0.0.255 + # dscp: ef + # grant: deny + # protocol: icmp + # protocol_options: + # icmp: + # echo: true + # sequence: 10 + # source: + # address: 192.0.2.0 + # wildcard_bits: 0.0.0.255 + # ttl: + # eq: 10 + # acl_type: extended + # name: '110' + # - aces: + # - destination: + # address: 198.51.101.0 + # port_protocol: + # eq: telnet + # wildcard_bits: 0.0.0.255 + # grant: deny + # protocol: tcp + # protocol_options: + # tcp: + # ack: true + # sequence: 10 + # source: + # address: 198.51.100.0 + # wildcard_bits: 0.0.0.255 + # tos: + # service_value: 12 + # - destination: + # address: 192.0.4.0 + # port_protocol: + # eq: www + # wildcard_bits: 0.0.0.255 + # dscp: ef + # grant: deny + # protocol: tcp + # protocol_options: + # tcp: + # ack: true + # sequence: 20 + # source: + # address: 192.0.3.0 + # wildcard_bits: 0.0.0.255 + # ttl: + # lt: 20 + # acl_type: extended + # name: '123' + # - aces: + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 20 + # - ============ + # - ALLOW HOST FROM SEQUENCE 20 + # sequence: 20 + # source: + # host: 1.1.1.1 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 30 + # - ============ + # - ALLOW HOST FROM SEQUENCE 30 + # sequence: 30 + # source: + # host: 2.2.2.2 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 40 + # - ============ + # - ALLOW NEW HOST FROM SEQUENCE 40 + # sequence: 40 + # source: + # host: 3.3.3.3 + # - remarks: + # - FIRST REMARK BEFORE SEQUENCE 10 + # - ============ + # - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # sequence: 10 + # - remarks: + # - Remark not specific to sequence + # - ============ + # - End Remarks + # acl_type: extended + # name: TEST + # - aces: + # - destination: + # address: 192.0.3.0 + # port_protocol: + # eq: www + # wildcard_bits: 0.0.0.255 + # grant: deny + # option: + # traceroute: true + # protocol: tcp + # protocol_options: + # tcp: + # fin: true + # sequence: 10 + # source: + # address: 192.0.2.0 + # wildcard_bits: 0.0.0.255 + # ttl: + # eq: 10 + # acl_type: extended + # name: test_acl + # afi: ipv4 + # - acls: + # - aces: + # - destination: + # any: true + # port_protocol: + # eq: telnet + # dscp: af11 + # grant: deny + # protocol: tcp + # protocol_options: + # tcp: + # ack: true + # sequence: 10 + # source: + # any: true + # port_protocol: + # eq: www + # name: R1_TRAFFIC + # afi: ipv6 + # commands: + # - no ipv6 access-list R1_TRAFFIC + # - ip access-list extended TEST + # - no 10 # removes all remarks and ace entry for sequence 10 + # - no 20 permit ip host 1.1.1.1 any # removing the ace automatically removes the remarks + # - no 30 remark # just remove remarks for sequence 30 + # - no remark # remove all remarks at end of acl, that has no sequence + # - 10 remark FIRST REMARK BEFORE SEQUENCE 10 + # - 10 remark ============ + # - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # - 10 permit ip host 1.1.1.1 any + # - 20 remark FIRST REMARK BEFORE SEQUENCE 20 + # - 20 remark ============ + # - 20 remark ALLOW HOST FROM SEQUENCE 20 + # - 20 permit ip host 192.168.0.1 any + # - 30 remark FIRST REMARK BEFORE SEQUENCE 30 + # - 30 remark ============ + # - 30 remark ALLOW HOST FROM SEQUENCE 30 updated + # - remark Remark not specific to sequence + # - remark ============ + # - remark End Remarks 1 + # - no ip access-list extended 110 + # - no ip access-list extended 123 + # - no ip access-list extended test_acl + # after: + # - acls: + # - aces: + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 10 + # - ============ + # - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # sequence: 10 + # source: + # host: 1.1.1.1 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 20 + # - ============ + # - ALLOW HOST FROM SEQUENCE 20 + # sequence: 20 + # source: + # host: 192.168.0.1 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 30 + # - ============ + # - ALLOW HOST FROM SEQUENCE 30 updated + # sequence: 30 + # source: + # host: 2.2.2.2 + # - destination: + # any: true + # grant: permit + # protocol: ip + # remarks: + # - FIRST REMARK BEFORE SEQUENCE 40 + # - ============ + # - ALLOW NEW HOST FROM SEQUENCE 40 + # sequence: 40 + # source: + # host: 3.3.3.3 + # - remarks: + # - Remark not specific to sequence + # - ============ + # - End Remarks 1 + # acl_type: extended + # name: TEST + # afi: ipv4 + + # After state: + # ------------- + # + # foo#show running-config | section access-list + # ip access-list extended TEST + # 10 remark FIRST REMARK BEFORE SEQUENCE 10 + # 10 remark ============ + # 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + # 10 permit ip host 1.1.1.1 any + # 20 remark FIRST REMARK BEFORE SEQUENCE 20 + # 20 remark ============ + # 20 remark ALLOW HOST FROM SEQUENCE 20 + # 20 permit ip host 192.168.0.1 any + # 30 remark FIRST REMARK BEFORE SEQUENCE 30 + # 30 remark ============ + # 30 remark ALLOW HOST FROM SEQUENCE 30 updated + # 30 permit ip host 2.2.2.2 any + # 40 remark FIRST REMARK BEFORE SEQUENCE 40 + # 40 remark ============ + # 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + # 40 permit ip host 3.3.3.3 any + # remark Remark not specific to sequence + # remark ============ + # remark End Remarks 1 # Using deleted - delete ACL(s) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst index 25fb233ac..268217811 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_address_family_module.rst @@ -8060,7 +8060,7 @@ Notes ----- .. note:: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html - The module examples uses callback plugin (stdout_callback = yaml) to generate task output in yaml format. diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst index ad461f776..77eb908c5 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_global_module.rst @@ -1467,6 +1467,88 @@ Parameters <td class="elbow-placeholder"></td> <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>default</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Configure BGP defaults</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="4"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>ipv4_unicast</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li><div style="color: blue"><b>yes</b> ←</div></li> + </ul> + </td> + <td> + <div>Activate ipv4-unicast for a peer by default</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="4"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>route_target</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Control behavior based on Route-Target attributes</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>filter</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li><div style="color: blue"><b>yes</b> ←</div></li> + </ul> + </td> + <td> + <div>Control automatic VPN Route-Target filtering</div> + </td> + </tr> + + + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="5"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>deterministic_med</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -9269,7 +9351,6 @@ Parameters </td> <td> <div>Enter template command mode</div> - <div>This option is DEPRECATED as is not valid within the scope of module, this attribute will be removed after 2024-06-01.</div> </td> </tr> <tr> @@ -9432,7 +9513,7 @@ Notes ----- .. note:: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html - The module examples uses callback plugin (stdout_callback = yaml) to generate task output in yaml format. @@ -9463,6 +9544,10 @@ Examples reuse_route_val: 1 suppress_route_val: 1 max_suppress: 1 + default: + ipv4_unicast: false + route_target: + filter: true graceful_shutdown: neighbors: time: 50 @@ -9506,6 +9591,7 @@ Examples # - timers bgp 100 200 150 # - bgp advertise-best-external # - bgp bestpath compare-routerid + # - no bgp default ipv4-unicast # - bgp dampening 1 1 1 1 # - bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 # - bgp log-neighbor-changes @@ -9528,6 +9614,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: false + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9567,6 +9657,7 @@ Examples # # vios#sh running-config | section ^router bgp # router bgp 65000 + # no bgp default ipv4-unicast # bgp log-neighbor-changes # bgp nopeerup-delay post-boot 10 # bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 @@ -9639,6 +9730,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9686,6 +9781,10 @@ Examples # bestpath_options: # med: # confed: true + # default: + # ipv4_unicast: true + # route_target: + # filter: true # log_neighbor_changes: true # nopeerup_delay_options: # cold_boot: 20 @@ -9752,6 +9851,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9827,6 +9930,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -9898,6 +10005,10 @@ Examples # advertise_best_external: true # bestpath_options: # compare_routerid: true + # default: + # ipv4_unicast: true + # route_target: + # filter: true # dampening: # max_suppress: 1 # penalty_half_time: 1 @@ -9974,6 +10085,10 @@ Examples # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 + # default: + # ipv4_unicast: true + # route_target: + # filter: true # graceful_shutdown: # community: '100' # local_preference: 100 diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst deleted file mode 100644 index c8aa774b0..000000000 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_bgp_module.rst +++ /dev/null @@ -1,1142 +0,0 @@ -.. _cisco.ios.ios_bgp_module: - - -***************** -cisco.ios.ios_bgp -***************** - -**Module to configure BGP protocol settings.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2023-08-24 -:Why: Newer and updated modules released with more functionality -:Alternative: ios_bgp_global - - - -Synopsis --------- -- This module provides configuration management of global BGP parameters on devices running Cisco IOS - - - - -Parameters ----------- - -.. raw:: html - - <table border=0 cellpadding=0 class="documentation-table"> - <tr> - <th colspan="4">Parameter</th> - <th>Choices/<font color="blue">Defaults</font></th> - <th width="100%">Comments</th> - </tr> - <tr> - <td colspan="4"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>config</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies the BGP related configuration.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>address_family</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - / <span style="color: purple">elements=dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies BGP address family related configurations.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>afi</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>ipv4</li> - <li>ipv6</li> - </ul> - </td> - <td> - <div>Type of address family to configure.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>auto_summary</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable/disable automatic network number summarization.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>neighbors</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - / <span style="color: purple">elements=dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies BGP neighbor related configurations in Address Family configuration mode.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>activate</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable the Address Family for this Neighbor.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>advertisement_interval</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Minimum interval between sending BGP routing updates for this neighbor.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>maximum_prefix</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Maximum number of prefixes to accept from this peer.</div> - <div>The range is from 1 to 2147483647.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>neighbor</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Neighbor router address.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>next_hop_self</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable/disable the next hop calculation for this neighbor.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>next_hop_unchanged</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Propagate next hop unchanged for iBGP paths to this neighbor.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>prefix_list_in</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Name of ip prefix-list to apply to incoming prefixes.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>prefix_list_out</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Name of ip prefix-list to apply to outgoing prefixes.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>remove_private_as</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Remove the private AS number from outbound updates.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>route_reflector_client</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Specify a neighbor as a route reflector client.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>route_server_client</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Specify a neighbor as a route server client.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>networks</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - / <span style="color: purple">elements=dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specify Networks to announce via BGP.</div> - <div>For operation replace, this option is mutually exclusive with root level networks option.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>masklen</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>prefix</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Network ID to announce via BGP.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>route_map</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Route map to modify the attributes.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>redistribute</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - / <span style="color: purple">elements=dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies the redistribute information from another routing protocol.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>id</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Identifier for the routing protocol for configuring redistribute information.</div> - <div>Valid for protocols 'ospf', 'ospfv3' and 'eigrp'.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>metric</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies the metric for redistributed routes.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>protocol</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>ospf</li> - <li>ospfv3</li> - <li>eigrp</li> - <li>isis</li> - <li>static</li> - <li>connected</li> - <li>odr</li> - <li>lisp</li> - <li>mobile</li> - <li>rip</li> - </ul> - </td> - <td> - <div>Specifies the protocol for configuring redistribute information.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>route_map</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies the route map reference.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>safi</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>flowspec</li> - <li><div style="color: blue"><b>unicast</b> ←</div></li> - <li>multicast</li> - <li>labeled-unicast</li> - </ul> - </td> - <td> - <div>Specifies the type of cast for the address family.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>synchronization</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable/disable IGP synchronization.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>bgp_as</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies the BGP Autonomous System (AS) number to configure on the device.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>log_neighbor_changes</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable/disable logging neighbor up/down and reset reason.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>neighbors</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - / <span style="color: purple">elements=dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies BGP neighbor related configurations.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>description</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Neighbor specific description.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>ebgp_multihop</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies the maximum hop count for EBGP neighbors not on directly connected networks.</div> - <div>The range is from 1 to 255.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>enabled</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>Administratively shutdown or enable a neighbor.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>local_as</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>The local AS number for the neighbor.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>neighbor</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Neighbor router address.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>password</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Password to authenticate the BGP peer connection.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>peer_group</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Name of the peer group that the neighbor is a member of.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>remote_as</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Remote AS of the BGP neighbor to configure.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>timers</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specifies BGP neighbor timer related configurations.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>holdtime</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Interval (in seconds) after not receiving a keepalive message that IOS declares a peer dead.</div> - <div>The range is from 0 to 65535.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>keepalive</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Frequency (in seconds) with which the device sends keepalive messages to its peer.</div> - <div>The range is from 0 to 65535.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>min_neighbor_holdtime</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Interval (in seconds) specifying the minimum acceptable hold-time from a BGP neighbor.</div> - <div>The minimum acceptable hold-time must be less than, or equal to, the interval specified in the holdtime argument.</div> - <div>The range is from 0 to 65535.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>update_source</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Source of the routing updates.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>networks</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - / <span style="color: purple">elements=dictionary</span> - </div> - </td> - <td> - </td> - <td> - <div>Specify Networks to announce via BGP.</div> - <div>For operation replace, this option is mutually exclusive with networks option under address_family.</div> - <div>For operation replace, if the device already has an address family activated, this option is not allowed.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>masklen</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">integer</span> - </div> - </td> - <td> - </td> - <td> - <div>Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.).</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>prefix</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - / <span style="color: red">required</span> - </div> - </td> - <td> - </td> - <td> - <div>Network ID to announce via BGP.</div> - </td> - </tr> - <tr> - <td class="elbow-placeholder"></td> - <td class="elbow-placeholder"></td> - <td colspan="2"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>route_map</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Route map to modify the attributes.</div> - </td> - </tr> - - <tr> - <td class="elbow-placeholder"></td> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>router_id</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - <b>Default:</b><br/><div style="color: blue">null</div> - </td> - <td> - <div>Configures the BGP routing process router-id value.</div> - </td> - </tr> - - <tr> - <td colspan="4"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>operation</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li><div style="color: blue"><b>merge</b> ←</div></li> - <li>replace</li> - <li>override</li> - <li>delete</li> - </ul> - </td> - <td> - <div>Specifies the operation to be performed on the BGP process configured on the device.</div> - <div>In case of merge, the input configuration will be merged with the existing BGP configuration on the device.</div> - <div>In case of replace, if there is a diff between the existing configuration and the input configuration, the existing configuration will be replaced by the input configuration for every option that has the diff.</div> - <div>In case of override, all the existing BGP configuration will be removed from the device and replaced with the input configuration.</div> - <div>In case of delete the existing BGP configuration will be removed from the device.</div> - </td> - </tr> - </table> - <br/> - - -Notes ------ - -.. note:: - - Tested against Cisco IOS Version 15.6(3)M2 - - - -Examples --------- - -.. code-block:: yaml - - - name: Configure global bgp as 64496 - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - router_id: 192.0.2.1 - log_neighbor_changes: true - neighbors: - - neighbor: 203.0.113.5 - remote_as: 64511 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 198.51.100.2 - remote_as: 64498 - networks: - - prefix: 198.51.100.0 - route_map: RMAP_1 - - prefix: 192.0.2.0 - masklen: 23 - address_family: - - afi: ipv4 - safi: unicast - redistribute: - - protocol: ospf - id: 223 - metric: 10 - operation: merge - - - name: Configure BGP neighbors - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - password: ansible - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - operation: merge - - - name: Configure root-level networks for BGP - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - operation: merge - - - name: Configure BGP neighbors under address family mode - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: unicast - neighbors: - - neighbor: 203.0.113.10 - activate: true - maximum_prefix: 250 - advertisement_interval: 120 - - neighbor: 192.0.2.15 - activate: true - route_reflector_client: true - operation: merge - - - name: Remove bgp as 64496 from config - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - operation: delete - - - -Return Values -------------- -Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module: - -.. raw:: html - - <table border=0 cellpadding=0 class="documentation-table"> - <tr> - <th colspan="1">Key</th> - <th>Returned</th> - <th width="100%">Description</th> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>commands</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - </div> - </td> - <td>always</td> - <td> - <div>The list of configuration mode commands to send to the device</div> - <br/> - <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['router bgp 64496', 'bgp router-id 192.0.2.1', 'bgp log-neighbor-changes', 'neighbor 203.0.113.5 remote-as 64511', 'neighbor 203.0.113.5 timers 300 360 360', 'neighbor 198.51.100.2 remote-as 64498', 'network 198.51.100.0 route-map RMAP_1', 'network 192.0.2.0 mask 255.255.254.0', 'address-family ipv4', 'redistribute ospf 223 metric 70', 'exit-address-family']</div> - </td> - </tr> - </table> - <br/><br/> - - -Status ------- - - -- This module will be removed in a release after 2023-08-24. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Nilashish Chakraborty (@NilashishC) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst index 9c19c8cdf..777fafa72 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_evi_module.rst @@ -329,7 +329,7 @@ Notes ----- .. note:: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst index e9b71bbbd..4ee7194b6 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_evpn_global_module.rst @@ -343,7 +343,7 @@ Notes ----- .. note:: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst index f75d03be8..c9195fc50 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_l3_interfaces_module.rst @@ -53,6 +53,26 @@ Parameters <td class="elbow-placeholder"></td> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>autostate</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable autostate determination for VLAN.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>ipv4</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -234,6 +254,86 @@ Parameters <div>Configures the IP address as a secondary address.</div> </td> </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>source_interface</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Enable IP processing without an explicit address</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>name</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + </td> + <td> + </td> + <td> + <div>Interface name</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>point_to_point</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable point-to-point connection</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>poll</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable IP connected host polling</div> + </td> + </tr> + <tr> <td class="elbow-placeholder"></td> @@ -441,6 +541,27 @@ Parameters <td class="elbow-placeholder"></td> <td colspan="2"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>enable</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable IPv6 on interface</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>eui</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -567,6 +688,22 @@ Parameters <td class="elbow-placeholder"></td> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>mac_address</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + </td> + <td> + </td> + <td> + <div>Manually set interface MAC address.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>name</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -691,6 +828,13 @@ Examples - name: GigabitEthernet3.100 ipv4: - address: 192.168.0.3/24 + - name: Vlan901 + autostate: false + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true state: merged # Task Output @@ -715,6 +859,10 @@ Examples # - ipv6 address fd5d:12c9:2201:1::1/64 # - interface GigabitEthernet3.100 # - ip address 192.168.0.3 255.255.255.0 + # - interface Vlan901 + # - ip unnumbered Loopback1 + # - ipv6 enable + # - no autostate # after: # - ipv4: # - dhcp: @@ -731,6 +879,13 @@ Examples # - address: 192.168.0.3/24 # - name: GigabitEthernet4 # - name: Loopback999 + # ipv4: + # - source_interface: + # name: Loopback1 + # ipv6: + # - enable: true + # autostate: false + # - name: Vlan901 # After state: # ------------ @@ -761,6 +916,11 @@ Examples # no ip address # shutdown # negotiation auto + # interface Vlan901 + # ip unnumbered Loopback1 + # ipv6 enable + # no autostate + # Using replaced diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst deleted file mode 100644 index 9979a45ae..000000000 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_ntp_module.rst +++ /dev/null @@ -1,291 +0,0 @@ -.. _cisco.ios.ios_ntp_module: - - -***************** -cisco.ios.ios_ntp -***************** - -**(deprecated, removed after 2024-01-01) Manages core NTP configuration.** - - -Version added: 1.0.0 - -.. contents:: - :local: - :depth: 1 - -DEPRECATED ----------- -:Removed in collection release after 2024-01-01 -:Why: Updated module released with more functionality. -:Alternative: ios_ntp_global - - - -Synopsis --------- -- Manages core NTP configuration. - - - - -Parameters ----------- - -.. raw:: html - - <table border=0 cellpadding=0 class="documentation-table"> - <tr> - <th colspan="1">Parameter</th> - <th>Choices/<font color="blue">Defaults</font></th> - <th width="100%">Comments</th> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>acl</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>ACL for peer/server access restricition.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>auth</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li><div style="color: blue"><b>no</b> ←</div></li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable NTP authentication. Data type boolean.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>auth_key</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>md5 NTP authentication key of tye 7.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>key_id</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>auth_key id. Data type string</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>logging</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li><div style="color: blue"><b>no</b> ←</div></li> - <li>yes</li> - </ul> - </td> - <td> - <div>Enable NTP logs. Data type boolean.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>server</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Network address of NTP server.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>source_int</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>Source interface for NTP packets.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>state</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li><div style="color: blue"><b>present</b> ←</div></li> - <li>absent</li> - </ul> - </td> - <td> - <div>Manage the state of the resource.</div> - </td> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>vrf</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">string</span> - </div> - </td> - <td> - </td> - <td> - <div>VRF configuration for NTP servers</div> - </td> - </tr> - </table> - <br/> - - -Notes ------ - -.. note:: - - For more information on using Ansible to manage network devices see the :ref:`Ansible Network Guide <network_guide>` - - For more information on using Ansible to manage Cisco devices see the `Cisco integration page <https://www.ansible.com/integrations/networks/cisco>`_. - - - -Examples --------- - -.. code-block:: yaml - - # Set new NTP server and source interface - - name: Example ntp play - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - logging: false - state: present - - # Remove NTP ACL and logging - - name: Example ntp play absent - cisco.ios.ios_ntp: - acl: NTP_ACL - logging: true - state: absent - - # Set NTP authentication - - name: Example ntp play auth - cisco.ios.ios_ntp: - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present - - # Set new NTP configuration - - name: Example ntp play auth - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - acl: NTP_ACL - logging: true - vrf: mgmt - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present - - - -Return Values -------------- -Common return values are documented `here <https://docs.ansible.com/ansible/latest/reference_appendices/common_return_values.html#common-return-values>`_, the following are the fields unique to this module: - -.. raw:: html - - <table border=0 cellpadding=0 class="documentation-table"> - <tr> - <th colspan="1">Key</th> - <th>Returned</th> - <th width="100%">Description</th> - </tr> - <tr> - <td colspan="1"> - <div class="ansibleOptionAnchor" id="return-"></div> - <b>commands</b> - <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> - <div style="font-size: small"> - <span style="color: purple">list</span> - </div> - </td> - <td>always</td> - <td> - <div>command sent to the device</div> - <br/> - <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['no ntp server 10.0.255.10', 'no ntp source Loopback0']</div> - </td> - </tr> - </table> - <br/><br/> - - -Status ------- - - -- This module will be removed in a release after 2024-01-01. *[deprecated]* -- For more information see `DEPRECATED`_. - - -Authors -~~~~~~~ - -- Federico Olivieri (@Federico87) -- Joanie Sylvain (@JoanieAda) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst index e06ea5631..b4b3957d8 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_user_module.rst @@ -513,6 +513,17 @@ Examples .. code-block:: yaml + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username testuser privilege 15 password 0 password + + # Present state create a new user play: + # ------------------------------------- + - name: Create a new user cisco.ios.ios_user: name: ansible @@ -520,6 +531,37 @@ Examples sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" state: present + # Task Output + # ----------- + + # commands: + # - ip ssh pubkey-chain + # - username ansible + # - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + # - exit + # - exit + # - username ansible nopassword + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username testuser privilege 15 password 0 password + # username ansible nopassword + # username ansible + # key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username testuser privilege 15 password 0 password + + # Present state create a new user with multiple keys play: + # -------------------------------------------------------- + - name: Create a new user with multiple keys cisco.ios.ios_user: name: ansible @@ -528,18 +570,109 @@ Examples - "{{ lookup('file', '~/path/to/public_key') }}" state: present + # Task Output + # ----------- + + # commands: + # - ip ssh pubkey-chain + # - username ansible + # - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + # - key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora + # - exit + # - exit + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username testuser privilege 15 password 0 password + # username ansible + # key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + # key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora + + # Using Purge: true + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username testuser privilege 15 password 0 password + # username ansible nopassword + # username ansible + # key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + + # Purge all users except admin play: + # ---------------------------------- + - name: Remove all users except admin cisco.ios.ios_user: purge: true + # Task Output + # ----------- + + # commands: + # - no username testuser + # - no username ansible + # - ip ssh pubkey-chain + # - no username ansible + # - exit + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + + # Using Purge: true + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username testuser privilege 15 password 0 password1 + # username testuser1 privilege 15 password 0 password2 + # username ansible nopassword + + # Purge all users except admin and these listed users play: + # --------------------------------------------------------- + - name: Remove all users except admin and these listed users cisco.ios.ios_user: aggregate: + - name: testuser - name: testuser1 - - name: testuser2 - - name: testuser3 purge: true + # Task Output + # ----------- + + # commands: + # - no username ansible + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username testuser privilege 15 password 0 password1 + # username testuser1 privilege 15 password 0 password2 + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username netop password 0 password1 + # username netend password 0 password2 + + # Present state set multiple users to privilege level 15 play: + # ------------------------------------------------------------ + - name: Set multiple users to privilege level 15 cisco.ios.ios_user: aggregate: @@ -548,38 +681,135 @@ Examples privilege: 15 state: present - - name: Set user view/role - cisco.ios.ios_user: - name: netop - view: network-operator - state: present + # Task Output + # ----------- + + # commands: + # - username netop privilege 15 + # - username netend privilege 15 + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 password1 + # username netend privilege 15 password 0 password2 + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 oldpassword + + # Present state Change Password for User netop play: + # -------------------------------------------- - name: Change Password for User netop cisco.ios.ios_user: name: netop - configured_password: "{{ new_password }}" + configured_password: "newpassword" + password_type: password update_password: always state: present - - name: Aggregate of users + # Task Output + # ----------- + + # commands: + # - username netop password newpassword + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 newpassword + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username netop privilege 15 password 0 password + # username netend privilege 15 password 0 password + + # Present state set user view/role for users play: + # -------------------------------------------- + + - name: Set user view/role for users cisco.ios.ios_user: aggregate: - - name: ansibletest2 - - name: ansibletest3 + - name: netop + - name: netend view: network-admin + state: present - - name: Add a user specifying password type - cisco.ios.ios_user: - name: ansibletest4 - configured_password: "{{ new_password }}" - password_type: password + # Task Output + # ----------- - - name: Add a user with MD5 hashed password + # commands: + # - username netop view network-admin + # - username netend view network-admin + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username netop privilege 15 view network-admin password 0 password + # username netend privilege 15 view network-admin password 0 password + + # Using state: present + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + + # Present state create a new user with hashed password play: + # -------------------------------------------------------------- + + - name: Create a new user with hashed password cisco.ios.ios_user: name: ansibletest5 hashed_password: - type: 5 - value: $3$8JcDilcYgFZi.yz4ApaqkHG2.8/ + type: 9 + value: "thiswillbereplacedwithhashedpassword" + state: present + + # Task Output + # ----------- + + # commands: + # - username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + # username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + + # Using state: absent + + # Before state: + # ------------- + + # router-ios#show running-config | section ^username + # username admin privilege 15 password 0 password + # username ansibletest1 password 0 password + # username ansibletest2 secret 9 thiswillbereplacedwithhashedpassword + # username ansibletest3 password 5 thistoowillbereplacedwithhashedpassword + + # Absent state remove multiple users play: + # ---------------------------------------- - name: Delete users with aggregate cisco.ios.ios_user: @@ -589,6 +819,20 @@ Examples - name: ansibletest3 state: absent + # Task Output + # ----------- + + # commands: + # - no username ansibletest1 + # - no username ansibletest2 + # - no username ansibletest3 + + # After state: + # ------------ + + # router-ios#show running-config | section username + # username admin privilege 15 password 0 password + Return Values diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst index 598486c57..78fa5ec97 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vlans_module.rst @@ -273,25 +273,6 @@ Parameters <tr> <td colspan="3"> <div class="ansibleOptionAnchor" id="parameter-"></div> - <b>configuration</b> - <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> - <div style="font-size: small"> - <span style="color: purple">boolean</span> - </div> - </td> - <td> - <ul style="margin: 0; padding: 0"><b>Choices:</b> - <li>no</li> - <li>yes</li> - </ul> - </td> - <td> - <div>When set to true, deals with vlan configuration CLIs</div> - </td> - </tr> - <tr> - <td colspan="3"> - <div class="ansibleOptionAnchor" id="parameter-"></div> <b>running_config</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -323,6 +304,7 @@ Parameters <li>deleted</li> <li>rendered</li> <li>gathered</li> + <li>purged</li> <li>parsed</li> </ul> </td> @@ -331,7 +313,7 @@ Parameters <div>The states <em>rendered</em>, <em>gathered</em> and <em>parsed</em> does not perform any change on the device.</div> <div>The state <em>rendered</em> will transform the configuration in <code>config</code> option to platform specific CLI commands which will be returned in the <em>rendered</em> key within the result. For state <em>rendered</em> active connection to remote host is not required.</div> <div>The state <em>gathered</em> will fetch the running configuration from device and transform it into structured data in the format as per the resource module argspec and the value is returned in the <em>gathered</em> key within the result.</div> - <div>The state <em>parsed</em> reads the configuration from <code>running_config</code> option and transforms it into JSON format as per the resource module parameters and the value is returned in the <em>parsed</em> key within the result. The value of <code>running_config</code> option should be the same format as the output of command <em>show running-config | include ip route|ipv6 route</em> executed on device. For state <em>parsed</em> active connection to remote host is not required.</div> + <div>The state <em>parsed</em> reads the configuration from <code>running_config</code> option and transforms it into JSON format as per the resource module parameters and the value is returned in the <em>parsed</em> key within the result. The value of <code>running_config</code> option should be the same format as the output of commands <em>show vlan</em> and <em>show running-config | sec ^vlan configuration .+</em> executed on device. For state <em>parsed</em> active connection to remote host is not required.</div> </td> </tr> </table> @@ -342,7 +324,7 @@ Notes ----- .. note:: - - Tested against Cisco IOSl2 device with Version 15.2 on VIRL. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - Starting from v2.5.0, this module will fail when run against Cisco IOS devices that do not support VLANs. The offline states (``rendered`` and ``parsed``) will work as expected. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html @@ -424,7 +406,7 @@ Examples # ------------------------------------------------------------------------------ # 10 - # Using merged (configuration: True) + # Using merged # Before state: # ------------- @@ -446,7 +428,6 @@ Examples - vlan_id: 901 member: vni: 50901 - configuration: true state: merged # After state: @@ -525,7 +506,7 @@ Examples # 1005 trnet 101005 1500 - - - ibm - 0 0 - # Using overridden (configuration: True) + # Using overridden # Before state: # ------------- @@ -551,7 +532,6 @@ Examples member: vni: 10101 evi: 101 - configuration: true state: overridden # After state: @@ -723,7 +703,7 @@ Examples # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 - # Using deleted (configuration: True) + # Using deleted # Before state: # ------------- @@ -742,13 +722,13 @@ Examples cisco.ios.ios_vlans: config: - vlan_id: 101 - configuration: true state: deleted # After state: # ------------- # # Leaf-01#show run nve | sec ^vlan configuration + # vlan configuration 101 # vlan configuration 102 # member evpn-instance 102 vni 10102 # vlan configuration 201 @@ -813,7 +793,7 @@ Examples # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 - # Using Deleted without any config passed (configuration: True) + # Using Deleted without any config passed # "(NOTE: This will delete all of configured vlans attributes)" # Before state: @@ -833,7 +813,6 @@ Examples - name: Delete attributes of ALL VLANs cisco.ios.ios_vlans: - configuration: true state: deleted # After state: @@ -847,7 +826,7 @@ Examples # no vlan configuration 901 # no vlan configuration 902 - # Using Gathered (configuration: True) + # Using gathered, vlan configuration only # Before state: # ------------- @@ -866,8 +845,6 @@ Examples - name: Gather listed vlans with provided configurations cisco.ios.ios_vlans: - config: - configuration: true state: gathered # Module Execution Result: @@ -957,9 +934,9 @@ Examples # "shutdown" # ] - # Using Rendered (configuration: True) + # Using Rendered - - name: Render the commands for provided configuration + - name: Render the commands for provided configuration cisco.ios.ios_vlans: config: - vlan_id: 101 @@ -1076,7 +1053,7 @@ Examples # } # ] - # Using Parsed (configuration: True) + # Using Parsed Vlan configuration only # File: parsed.cfg # ---------------- @@ -1091,7 +1068,6 @@ Examples - name: Parse the commands for provided configuration cisco.ios.ios_vlans: running_config: "{{ lookup('file', './parsed.cfg') }}" - configuration: true state: parsed # Module Execution Result: @@ -1120,6 +1096,128 @@ Examples # } # ] + # Using Parsed, Vlan and vlan configuration + + # File: parsed.cfg + # ---------------- + # + # VLAN Name Status Ports + # ---- -------------------------------- --------- ------------------------------- + # 1 default active Gi0/1, Gi0/2 + # 101 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + # Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + # Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + # Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + # Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + # 150 VLAN0150 active + # 888 a_very_long_vlan_name_a_very_long_vlan_name + # active + # 1002 fddi-default act/unsup + # 1003 trcrf-default act/unsup + # 1004 fddinet-default act/unsup + # 1005 trbrf-default act/unsup + # + # VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + # ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + # 1 enet 100001 1500 - - - - - 0 0 + # 101 enet 100101 610 - - - - - 0 0 + # 150 enet 100150 1500 - - - - - 0 0 + # 888 enet 100888 1500 - - - - - 0 0 + # 1002 fddi 101002 1500 - - - - - 0 0 + # 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + # 1004 fdnet 101004 1500 - - - ieee - 0 0 + # 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + # + # + # VLAN AREHops STEHops Backup CRF + # ---- ------- ------- ---------- + # 1003 7 7 off + # + # Remote SPAN VLANs + # ------------------------------------------------------------------------------ + # 150 + # + # Primary Secondary Type Ports + # ------- --------- ----------------- ------------------------------------------ + # + # vlan configuration 101 + # member evpn-instance 101 vni 10101 + # vlan configuration 102 + # member evpn-instance 102 vni 10102 + # vlan configuration 901 + # member vni 50901 + + - name: Parse the commands for provided configuration + cisco.ios.ios_vlans: + running_config: "{{ lookup('file', './parsed.cfg') }}" + state: parsed + + # Module Execution Result: + # ------------------------ + # + # "parsed": [ + # { + # "name": "default", + # "vlan_id": 1, + # "state": "active", + # "shutdown": "disabled", + # "mtu": 1500, + # }, + # { + # "name": "RemoteIsInMyName", + # "vlan_id": 101, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 610, + # "member": {"evi": 101, "vni": 10101}, + # }, + # { + # "name": "VLAN0150", + # "vlan_id": 150, + # "state": "active", + # "shutdown": "disabled", + # "mtu": 1500, + # "remote_span": True, + # }, + # { + # "name": "a_very_long_vlan_name_a_very_long_vlan_name", + # "vlan_id": 888, + # "state": "active", + # "shutdown": "disabled", + # "mtu": 1500, + # }, + # { + # "name": "fddi-default", + # "vlan_id": 1002, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 1500, + # }, + # { + # "name": "trcrf-default", + # "vlan_id": 1003, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 4472, + # }, + # { + # "name": "fddinet-default", + # "vlan_id": 1004, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 1500, + # }, + # { + # "name": "trbrf-default", + # "vlan_id": 1005, + # "state": "active", + # "shutdown": "enabled", + # "mtu": 4472, + # }, + # {"vlan_id": 102, "member": {"evi": 102, "vni": 10102}}, + # {"vlan_id": 901, "member": {"vni": 50901}}, + # ] + Return Values @@ -1140,16 +1238,15 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <b>after</b> <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> <div style="font-size: small"> - <span style="color: purple">list</span> + <span style="color: purple">dictionary</span> </div> </td> <td>when changed</td> <td> - <div>The configuration as structured data after module completion.</div> + <div>The resulting configuration after module execution.</div> <br/> <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">The configuration returned will always be in the same format - of the parameters above.</div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div> </td> </tr> <tr> @@ -1158,16 +1255,15 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <b>before</b> <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> <div style="font-size: small"> - <span style="color: purple">list</span> + <span style="color: purple">dictionary</span> </div> </td> - <td>always</td> + <td>when <em>state</em> is <code>merged</code>, <code>replaced</code>, <code>overridden</code>, <code>deleted</code> or <code>purged</code></td> <td> - <div>The configuration as structured data prior to module invocation.</div> + <div>The configuration prior to the module execution.</div> <br/> <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">The configuration returned will always be in the same format - of the parameters above.</div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div> </td> </tr> <tr> @@ -1179,12 +1275,63 @@ Common return values are documented `here <https://docs.ansible.com/ansible/late <span style="color: purple">list</span> </div> </td> - <td>always</td> + <td>when <em>state</em> is <code>merged</code>, <code>replaced</code>, <code>overridden</code>, <code>deleted</code> or <code>purged</code></td> <td> <div>The set of commands pushed to the remote device.</div> <br/> <div style="font-size: smaller"><b>Sample:</b></div> - <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['vlan 20', 'name vlan_20', 'mtu 600', 'remote-span']</div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['vlan configuration 202', 'state active', 'remote-span']</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="return-"></div> + <b>gathered</b> + <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + </div> + </td> + <td>when <em>state</em> is <code>gathered</code></td> + <td> + <div>Facts about the network resource gathered from the remote device as structured data.</div> + <br/> + <div style="font-size: smaller"><b>Sample:</b></div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="return-"></div> + <b>parsed</b> + <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + </div> + </td> + <td>when <em>state</em> is <code>parsed</code></td> + <td> + <div>The device native config provided in <em>running_config</em> option parsed into structured data as per module argspec.</div> + <br/> + <div style="font-size: smaller"><b>Sample:</b></div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">This output will always be in the same format as the module argspec.</div> + </td> + </tr> + <tr> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="return-"></div> + <b>rendered</b> + <a class="ansibleOptionLink" href="#return-" title="Permalink to this return value"></a> + <div style="font-size: small"> + <span style="color: purple">list</span> + </div> + </td> + <td>when <em>state</em> is <code>rendered</code></td> + <td> + <div>The provided configuration in the task rendered in device-native format (offline).</div> + <br/> + <div style="font-size: smaller"><b>Sample:</b></div> + <div style="font-size: smaller; color: blue; word-wrap: break-word; word-break: break-all;">['vlan configuration 202', 'member evpn-instance 202 vni 10202', 'vlan 200']</div> </td> </tr> </table> @@ -1199,3 +1346,5 @@ Authors ~~~~~~~ - Sumit Jaiswal (@justjais) +- Sagar Paul (@KB-perByte) +- Padmini Priyadarshini Sivaraj (@PadminiSivaraj) diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst index 9223586e0..799399597 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vrf_module.rst @@ -29,12 +29,12 @@ Parameters <table border=0 cellpadding=0 class="documentation-table"> <tr> - <th colspan="1">Parameter</th> + <th colspan="5">Parameter</th> <th>Choices/<font color="blue">Defaults</font></th> <th width="100%">Comments</th> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>address_family</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -49,9 +49,303 @@ Parameters <div>The list of address families with MDT parameters to be configured on the remote IOS device.</div> </td> </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="4"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>afi</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>ipv4</li> + <li>ipv6</li> + </ul> + </td> + <td> + <div>Address family identifier.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td colspan="4"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>mdt</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>MDT parameters.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>auto_discovery</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Auto-discovery parameters.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>vxlan</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Vxlan parameters.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>enable</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable VXLAN.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>inter_as</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable inter-as.</div> + </td> + </tr> + + + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>data</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Parameters for data option.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>threshold</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">integer</span> + </div> + </td> + <td> + </td> + <td> + <div>Threshold value.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>vxlan_mcast_group</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + </td> + <td> + </td> + <td> + <div>VXLAN multicast group value.</div> + </td> + </tr> + + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>default</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Parameters for default option.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>vxlan_mcast_group</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">string</span> + </div> + </td> + <td> + </td> + <td> + <div>VXLAN multicast group value.</div> + </td> + </tr> + + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="3"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>overlay</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>Parameters for overlay option.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="2"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>use_bgp</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">dictionary</span> + </div> + </td> + <td> + </td> + <td> + <div>parameters for BGP option.</div> + </td> + </tr> + <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td colspan="1"> + <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>enable</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable use BGP.</div> + </td> + </tr> <tr> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> + <td class="elbow-placeholder"></td> <td colspan="1"> <div class="ansibleOptionAnchor" id="parameter-"></div> + <b>spt_only</b> + <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> + <div style="font-size: small"> + <span style="color: purple">boolean</span> + </div> + </td> + <td> + <ul style="margin: 0; padding: 0"><b>Choices:</b> + <li>no</li> + <li>yes</li> + </ul> + </td> + <td> + <div>Enable SPT only.</div> + </td> + </tr> + + + + + <tr> + <td colspan="5"> + <div class="ansibleOptionAnchor" id="parameter-"></div> <b>associated_interfaces</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> <div style="font-size: small"> @@ -66,7 +360,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>delay</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -82,7 +376,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>description</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -97,7 +391,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>interfaces</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -113,7 +407,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>name</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -128,7 +422,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>purge</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -147,7 +441,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>rd</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -162,7 +456,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_both</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -178,7 +472,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_both_ipv4</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -194,7 +488,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_both_ipv6</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -210,7 +504,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_export</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -226,7 +520,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_export_ipv4</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -242,7 +536,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_export_ipv6</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -258,7 +552,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_import</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -274,7 +568,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_import_ipv4</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -290,7 +584,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>route_import_ipv6</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -306,7 +600,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>state</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> @@ -325,7 +619,7 @@ Parameters </td> </tr> <tr> - <td colspan="1"> + <td colspan="5"> <div class="ansibleOptionAnchor" id="parameter-"></div> <b>vrfs</b> <a class="ansibleOptionLink" href="#parameter-" title="Permalink to this option"></a> diff --git a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst index 3f1abc5f5..6359a2afa 100644 --- a/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst +++ b/ansible_collections/cisco/ios/docs/cisco.ios.ios_vxlan_vtep_module.rst @@ -391,7 +391,7 @@ Notes ----- .. note:: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection ``network_cli``. See https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html diff --git a/ansible_collections/cisco/ios/meta/runtime.yml b/ansible_collections/cisco/ios/meta/runtime.yml index 4a4bd852d..c7d437cb8 100644 --- a/ansible_collections/cisco/ios/meta/runtime.yml +++ b/ansible_collections/cisco/ios/meta/runtime.yml @@ -1,128 +1,5 @@ --- plugin_routing: - action: - acl_interfaces: - redirect: cisco.ios.ios - acls: - redirect: cisco.ios.ios - banner: - redirect: cisco.ios.ios - bgp: - redirect: cisco.ios.ios - bgp_global: - redirect: cisco.ios.ios - command: - redirect: cisco.ios.ios - config: - redirect: cisco.ios.ios - evpn_global: - redirect: cisco.ios.ios - evpn_evi: - redirect: cisco.ios.ios - facts: - redirect: cisco.ios.ios - hostname: - redirect: cisco.ios.ios - interfaces: - redirect: cisco.ios.ios - ios_acl_interfaces: - redirect: cisco.ios.ios - ios_acls: - redirect: cisco.ios.ios - ios_banner: - redirect: cisco.ios.ios - ios_bgp: - redirect: cisco.ios.ios - ios_bgp_global: - redirect: cisco.ios.ios - ios_command: - redirect: cisco.ios.ios - ios_config: - redirect: cisco.ios.ios - ios_evpn_global: - redirect: cisco.ios.ios - ios_evpn_evi: - redirect: cisco.ios.ios - ios_facts: - redirect: cisco.ios.ios - ios_hostname: - redirect: cisco.ios.ios - ios_linkagg: - redirect: cisco.ios.ios - ios_lldp: - redirect: cisco.ios.ios - ios_logging_global: - redirect: cisco.ios.ios - ios_ntp: - redirect: cisco.ios.ios - ios_ntp_global: - redirect: cisco.ios.ios - ios_ospfv2: - redirect: cisco.ios.ios - ios_ping: - redirect: cisco.ios.ios - ios_prefix_lists: - redirect: cisco.ios.ios - ios_route_maps: - redirect: cisco.ios.ios - ios_snmp_server: - redirect: cisco.ios.ios - ios_static_routes: - redirect: cisco.ios.ios - ios_system: - redirect: cisco.ios.ios - ios_vxlan_vtep: - redirect: cisco.ios.ios - l2_interfaces: - redirect: cisco.ios.ios - l3_interfaces: - redirect: cisco.ios.ios - lacp: - redirect: cisco.ios.ios - lacp_interfaces: - redirect: cisco.ios.ios - lag_interfaces: - redirect: cisco.ios.ios - linkagg: - redirect: cisco.ios.ios - lldp: - redirect: cisco.ios.ios - lldp_global: - redirect: cisco.ios.ios - lldp_interfaces: - redirect: cisco.ios.ios - logging: - redirect: cisco.ios.ios - logging_global: - redirect: cisco.ios.ios - ntp: - redirect: cisco.ios.ios - ntp_global: - redirect: cisco.ios.ios - ospfv2: - redirect: cisco.ios.ios - ping: - redirect: cisco.ios.ios - prefix_lists: - redirect: cisco.ios.ios - route_maps: - redirect: cisco.ios.ios - service: - redirect: cisco.ios.ios - snmp_server: - redirect: cisco.ios.ios - static_routes: - redirect: cisco.ios.ios - system: - redirect: cisco.ios.ios - user: - redirect: cisco.ios.ios - vlans: - redirect: cisco.ios.ios - vrf: - redirect: cisco.ios.ios - vxlan_vtep: - redirect: cisco.ios.ios modules: acl_interfaces: redirect: cisco.ios.ios_acl_interfaces @@ -130,11 +7,6 @@ plugin_routing: redirect: cisco.ios.ios_acls banner: redirect: cisco.ios.ios_banner - bgp: - deprecation: - removal_date: "2023-08-24" - warning_text: See the plugin documentation for more details - redirect: cisco.ios.ios_bgp bgp_global: redirect: cisco.ios.ios_bgp_global command: @@ -151,10 +23,6 @@ plugin_routing: redirect: cisco.ios.ios_hostname interfaces: redirect: cisco.ios.ios_interfaces - ios_bgp: - deprecation: - removal_date: "2023-08-24" - warning_text: See the plugin documentation for more details ios_linkagg: deprecation: removal_date: "2024-06-01" @@ -163,10 +31,6 @@ plugin_routing: deprecation: removal_date: "2024-06-01" warning_text: See the plugin documentation for more details - ios_ntp: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details l2_interfaces: redirect: cisco.ios.ios_l2_interfaces l3_interfaces: @@ -193,11 +57,6 @@ plugin_routing: redirect: cisco.ios.ios_lldp_interfaces logging_global: redirect: cisco.ios.ios_logging_global - ntp: - deprecation: - removal_date: "2024-01-01" - warning_text: See the plugin documentation for more details - redirect: cisco.ios.ios_ntp ntp_global: redirect: cisco.ios.ios_ntp_global ospfv2: @@ -224,4 +83,4 @@ plugin_routing: redirect: cisco.ios.ios_vrf vxlan_vtep: redirect: cisco.ios.ios_vxlan_vtep -requires_ansible: ">=2.9.10" +requires_ansible: ">=2.14.0" diff --git a/ansible_collections/cisco/ios/platform_guide.rst b/ansible_collections/cisco/ios/platform_guide.rst new file mode 100644 index 000000000..036804a04 --- /dev/null +++ b/ansible_collections/cisco/ios/platform_guide.rst @@ -0,0 +1,94 @@ +.. _ios_platform_options: + +*************************************** +IOS Platform Options +*************************************** + +The `Cisco IOS <https://galaxy.ansible.com/ui/repo/published/cisco/ios>`_ collection supports Enable Mode (Privilege Escalation). This page offers details on how to use Enable Mode on IOS in Ansible. + +.. contents:: + :local: + +Connections available +================================================================================ + +.. table:: + :class: documentation-table + + ==================== ========================================== + .. CLI + ==================== ========================================== + Protocol SSH + + Credentials uses SSH keys / SSH-agent if present + + accepts ``-u myuser -k`` if using password + + Indirect Access by a bastion (jump host) + + Connection Settings ``ansible_connection: ansible.netcommon.network_cli`` + + Enable_mode supported: use ``ansible_become: true`` with + ``ansible_become_method: enable`` and ``ansible_become_password:`` + + Returned Data Format ``stdout[0].`` + ==================== ========================================== + +The ``ansible_connection: local`` has been deprecated. Please use ``ansible_connection: ansible.netcommon.network_cli`` instead. + +Using CLI in Ansible +==================== + +Example CLI ``group_vars/ios.yml`` +---------------------------------- + +.. code-block:: yaml + + ansible_connection: ansible.netcommon.network_cli + ansible_network_os: cisco.ios.ios + ansible_user: myuser + ansible_password: !vault... + ansible_become: true + ansible_become_method: enable + ansible_become_password: !vault... + ansible_ssh_common_args: '-o ProxyCommand="ssh -W %h:%p -q bastion01"' + + +- If you are using SSH keys (including an ssh-agent) you can remove the ``ansible_password`` configuration. +- If you are accessing your host directly (not through a bastion/jump host) you can remove the ``ansible_ssh_common_args`` configuration. +- If you are accessing your host through a bastion/jump host, you cannot include your SSH password in the ``ProxyCommand`` directive. To prevent secrets from leaking out (for example in ``ps`` output), SSH does not support providing passwords through environment variables. + +Example CLI task +---------------- + +.. code-block:: yaml + + - name: Backup current switch config (ios) + cisco.ios.ios_config: + backup: yes + register: backup_ios_location + when: ansible_network_os == 'cisco.ios.ios' + +Warning +-------- +Never store passwords in plain text. We recommend using SSH keys to authenticate SSH connections. Ansible supports ssh-agent to manage your SSH keys. If you must use passwords to authenticate SSH connections, we recommend encrypting them with Ansible Vault. + +Cisco IOS-XE platform support matrix +=================================== + +The following platforms and software versions have been certified by Cisco to work with this version of Ansible. + +.. table:: Platform / Software Minimum Requirements + :align: center + + =================== ===================== + Supported Platforms Minimum IOS-XE Version + =================== ===================== + Cisco IOS-XE 9000 17.03.2 and later + Cisco IOS-XE 8000 17.03.6 and later + =================== ===================== + +Notes +----- + +`Setting Timeout Option <https://docs.ansible.com/ansible/latest/network/getting_started/network_connection_options.html#timeout-options>`_ diff --git a/ansible_collections/cisco/ios/plugins/action/ntp.py b/ansible_collections/cisco/ios/plugins/action/ntp.py deleted file mode 100644 index 38c0ed229..000000000 --- a/ansible_collections/cisco/ios/plugins/action/ntp.py +++ /dev/null @@ -1,56 +0,0 @@ -# -# (c) 2016 Red Hat 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 - - -from ansible.utils.display import Display -from ansible_collections.ansible.netcommon.plugins.action.network import ( - ActionModule as ActionNetworkModule, -) - - -display = Display() - - -class ActionModule(ActionNetworkModule): - def run(self, tmp=None, task_vars=None): - del tmp # tmp no longer has any effect - - module_name = self._task.action.split(".")[-1] - self._config_module = True if module_name in ["ios_config", "config"] else False - persistent_connection = self._play_context.connection.split(".")[-1] - warnings = [] - - if persistent_connection != "network_cli": - return { - "failed": True, - "msg": "Connection type %s is not valid for this module" - % self._play_context.connection, - } - - result = super(ActionModule, self).run(task_vars=task_vars) - if warnings: - if "warnings" in result: - result["warnings"].extend(warnings) - else: - result["warnings"] = warnings - return result diff --git a/ansible_collections/cisco/ios/plugins/cliconf/ios.py b/ansible_collections/cisco/ios/plugins/cliconf/ios.py index be62c3724..324b7f000 100644 --- a/ansible_collections/cisco/ios/plugins/cliconf/ios.py +++ b/ansible_collections/cisco/ios/plugins/cliconf/ios.py @@ -180,6 +180,13 @@ class Cliconf(CliconfBase): return self.send_command(cmd) + @enable_mode + def restore(self, filename=None, path=""): + if not filename: + raise ValueError("'file_name' value is required for restore") + cmd = f"configure replace {path}{filename} force" + return self.send_command(cmd) + def get_diff( self, candidate=None, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py index 21bb051c3..6e82c99c2 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/bgp_global/bgp_global.py @@ -163,6 +163,20 @@ class Bgp_globalArgs(object): # pylint: disable=R0903 "route_map": {"type": "str"}, }, }, + "default": { + "type": "dict", + "apply_defaults": True, + "options": { + "ipv4_unicast": {"type": "bool", "default": True}, + "route_target": { + "type": "dict", + "apply_defaults": True, + "options": { + "filter": {"type": "bool", "default": True}, + }, + }, + }, + }, "deterministic_med": {"type": "bool"}, "dmzlink_bw": {"type": "bool"}, "enforce_first_as": {"type": "bool"}, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py index 455261409..82ae98ee6 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/l3_interfaces/l3_interfaces.py @@ -36,6 +36,8 @@ class L3_interfacesArgs(object): # pylint: disable=R0903 "type": "list", "elements": "dict", "options": { + "autostate": {"type": "bool"}, + "mac_address": {"type": "str"}, "name": {"type": "str", "required": True}, "ipv4": { "type": "list", @@ -54,6 +56,14 @@ class L3_interfacesArgs(object): # pylint: disable=R0903 }, }, "pool": {"type": "str"}, + "source_interface": { + "type": "dict", + "options": { + "name": {"type": "str"}, + "poll": {"type": "bool"}, + "point_to_point": {"type": "bool"}, + }, + }, }, }, "ipv6": { @@ -72,6 +82,7 @@ class L3_interfacesArgs(object): # pylint: disable=R0903 "rapid_commit": {"type": "bool"}, }, }, + "enable": {"type": "bool"}, "anycast": {"type": "bool"}, "cga": {"type": "bool"}, "eui": {"type": "bool"}, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py index 9db593dcc..65e631817 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/argspec/vlans/vlans.py @@ -51,7 +51,10 @@ class VlansArgs(object): "private_vlan": { "type": "dict", "options": { - "type": {"type": "str", "choices": ["primary", "community", "isolated"]}, + "type": { + "type": "str", + "choices": ["primary", "community", "isolated"], + }, "associated": {"type": "list", "elements": "int"}, }, }, @@ -65,7 +68,6 @@ class VlansArgs(object): }, "type": "list", }, - "configuration": {"type": "bool"}, "running_config": {"type": "str"}, "state": { "choices": [ @@ -75,6 +77,7 @@ class VlansArgs(object): "deleted", "rendered", "parsed", + "purged", "gathered", ], "default": "merged", diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py index 164c75c40..f604e4360 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/acls/acls.py @@ -119,6 +119,16 @@ class Acls(ResourceModule): for wname, wentry in iteritems(wplists): hentry = hplists.pop(wname, {}) acl_type = wentry["acl_type"] if wentry.get("acl_type") else hentry.get("acl_type") + # If ACLs type is different between existing and wanted ACL, we need first remove it + if acl_type != hentry.get("acl_type", acl_type): + self.commands.append( + "no " + self.acl_name_cmd(wname, afi, hentry.get("acl_type", "")), + ) + hentry.pop( + "aces", + {}, + ) # We remove ACEs because we have previously add a command to suppress completely the ACL + begin = len(self.commands) # to determine the index for acl command self._compare_aces( wentry.pop("aces", {}), @@ -159,20 +169,22 @@ class Acls(ResourceModule): else: return {} + # case 1 - loop on want and compare with have data here for wseq, wentry in iteritems(want): hentry = have.pop(wseq, {}) rem_hentry, rem_wentry = {}, {} - if hentry: + if hentry: # if there is have information with same sequence + # the protocol options are processed here hentry = self.sanitize_protocol_options(wentry, hentry) - if hentry != wentry: # will let in if ace is same but remarks is not same - if hentry: + if hentry != wentry: # if want and have is different + if hentry: # separate remarks from have in an ace entry rem_hentry["remarks"] = pop_remark(hentry, afi) - if wentry: + if wentry: # separate remarks from want in an ace entry rem_wentry["remarks"] = pop_remark(wentry, afi) - if hentry: + if hentry: # have aces processing starts here if self.state == "merged": self._module.fail_json( msg="Cannot update existing sequence {0} of ACLs {1} with state merged." @@ -180,55 +192,78 @@ class Acls(ResourceModule): hentry.get("sequence", ""), name, ), - ) - else: # other action states - if rem_hentry.get("remarks"): # remove remark if not in want - for k_hrems, hrems in rem_hentry.get("remarks").items(): - if k_hrems not in rem_wentry.get("remarks", {}).keys(): - if self.state in ["replaced", "overridden"]: - self.addcmd( - { - "remarks": hrems, - "sequence": hentry.get("sequence", ""), - }, - "remarks_no_data", - negate=True, - ) - break - else: - self.addcmd( - { - "remarks": hrems, - "sequence": hentry.get("sequence", ""), - }, - "remarks", - negate=True, - ) - # remove ace if not in want - if hentry != wentry: - self.addcmd(add_afi(hentry, afi), "aces", negate=True) + ) # if merged then don't update anything and fail + + # i.e if not merged + if rem_hentry.get("remarks") != rem_wentry.get("remarks"): + self.addcmd( + { + "sequence": hentry.get("sequence", None), + }, + "remarks_no_data", + negate=True, + ) # remove all remarks for a ace if want and have don't match + # as if we randomly add aces we cannot maintain order we have to + # add all of them again, for that ace + rem_hentry["remarks"] = {} + # and me empty our have as we would add back + # all our remarks for that ace anyways + + # remove ace if not in want + # we might think why not update it directly, + # if we try to update without negating the entry appliance + # reports % Duplicate sequence number + if hentry != wentry: + self.addcmd(add_afi(hentry, afi), "aces", negate=True) + # once an ace is negated intentionally emptying out have so that + # the remarks are repopulated, as the remarks and ace behavior is sticky + # if an ace is taken out all the remarks is removed automatically. + rem_hentry["remarks"] = {} + if rem_wentry.get("remarks"): # add remark if not in have + if rem_hentry.get("remarks"): + self.addcmd( + { + "sequence": hentry.get("sequence", None), + }, + "remarks_no_data", + negate=True, + ) # but delete all remarks before to protect order for k_wrems, wrems in rem_wentry.get("remarks").items(): - if k_wrems not in rem_hentry.get("remarks", {}).keys(): - self.addcmd( - {"remarks": wrems, "sequence": hentry.get("sequence", "")}, - "remarks", - ) + self.addcmd( + { + "remarks": wrems, + "sequence": wentry.get("sequence", ""), + }, + "remarks", + ) + # add ace if not in have if hentry != wentry: - self.addcmd(add_afi(wentry, afi), "aces") - - # remove remaining entries from have aces list + if len(wentry) == 1 and wentry.get( + "sequence", + ): # if the ace entry just has sequence then do nothing + continue + else: # add normal ace entries from want + self.addcmd(add_afi(wentry, afi), "aces") + + # case 2 - loop over remaining have and remove them for hseq in have.values(): - if hseq.get("remarks"): # remove remarks that are extra in have - for krems, rems in hseq.get("remarks").items(): - self.addcmd( - {"remarks": rems, "sequence": hseq.get("sequence", "")}, - "remarks", - negate=True, - ) - else: # remove extra aces - self.addcmd(add_afi(hseq, afi), "aces", negate=True) + if hseq.get("remarks"): # remove all remarks in that + self.addcmd( + { + "sequence": hseq.get("sequence", None), + }, + "remarks_no_data", + negate=True, + ) + hseq.pop("remarks") + # deal with the rest of ace entry + self.addcmd( + add_afi(hseq, afi), + "aces", + negate=True, + ) def sanitize_protocol_options(self, wace, hace): """handles protocol and protocol options as optional attribute""" @@ -262,7 +297,7 @@ class Acls(ResourceModule): def list_to_dict(self, param): """converts list attributes to dict""" - temp, count = dict(), 0 + temp = dict() if param: for each in param: # ipv4 and ipv6 acl temp_acls = {} @@ -271,7 +306,9 @@ class Acls(ResourceModule): temp_aces = {} if acl.get("aces"): rem_idx = 0 # remarks if defined in an ace - for ace in acl.get("aces"): # each ace turned to dict + for count, ace in enumerate( + acl.get("aces"), + ): # each ace turned to dict if ( ace.get("destination") and ace.get("destination", {}).get( @@ -285,9 +322,9 @@ class Acls(ResourceModule): for k, v in ( ace.get("destination", {}).get("port_protocol", {}).items() ): - ace["destination"]["port_protocol"][ - k - ] = self.port_protocl_no_to_protocol(v) + ace["destination"]["port_protocol"][k] = ( + self.port_protocl_no_to_protocol(v) + ) if acl.get("acl_type") == "standard": for ks in list(ace.keys()): if ks not in [ @@ -311,13 +348,14 @@ class Acls(ResourceModule): # temp_rem.extend(ace.pop("remarks")) for remks in ace.get("remarks"): rem_ace[remks.replace(" ", "_")] = remks - rem_idx += 1 ace["remarks"] = rem_ace if ace.get("sequence"): temp_aces.update({ace.get("sequence"): ace}) + elif ace.get("remarks"): + temp_aces.update({"__{0}".format(rem_idx): ace}) + rem_idx += 1 elif ace: - count += 1 temp_aces.update({"_" + to_text(count): ace}) # if temp_rem: # add remarks to the temp ace @@ -325,7 +363,12 @@ class Acls(ResourceModule): if acl.get("acl_type"): # update acl dict with req info temp_acls.update( - {acl.get("name"): {"aces": temp_aces, "acl_type": acl["acl_type"]}}, + { + acl.get("name"): { + "aces": temp_aces, + "acl_type": acl["acl_type"], + }, + }, ) else: # if no acl type then here eg: ipv6 temp_acls.update({acl.get("name"): {"aces": temp_aces}}) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py index c48cac946..77112ffa2 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/bgp_global/bgp_global.py @@ -61,6 +61,8 @@ class Bgp_global(ResourceModule): "route_server_context.description", "synchronization", "table_map", + "template.peer_policy", + "template.peer_session", "timers", "bgp.additional_paths", "bgp.advertise_best_external", @@ -79,6 +81,8 @@ class Bgp_global(ResourceModule): "bgp.consistency_checker.auto_repair", "bgp.consistency_checker.error_message", "bgp.dampening", + "bgp.default.ipv4_unicast", + "bgp.default.route_target.filter", "bgp.deterministic_med", "bgp.dmzlink_bw", "bgp.enforce_first_as", @@ -168,7 +172,10 @@ class Bgp_global(ResourceModule): if self.state == "deleted": # deleted, clean up global params if not self.want or (self.have.get("as_number") == self.want.get("as_number")): - self._compare(want={}, have=self.have) + if "as_number" not in self.want: + self.want["as_number"] = self.have.get("as_number") + self._set_bgp_defaults(self.want) + self._compare(self.want, have=self.have) elif self.state == "purged": # delete as_number takes down whole bgp config @@ -190,10 +197,16 @@ class Bgp_global(ResourceModule): for the Bgp_global network resource. """ self.generic_list_parsers = ["distributes", "aggregate_addresses", "networks"] + if self._has_bgp_inject_maps(want): self.generic_list_parsers.insert(0, "inject_maps") cmd_len = len(self.commands) # holds command length to add as_number + + # for clean bgp global setup + if not have.get("bgp", {}).get("default"): + self._set_bgp_defaults(have) + # for dict type attributes self.compare(parsers=self.parsers, want=want, have=have) @@ -206,17 +219,40 @@ class Bgp_global(ResourceModule): _parse, ) else: - self._compare_generic_lists(want.get(_parse, {}), have.get(_parse, {}), _parse) + self._compare_generic_lists( + want.get(_parse, {}), + have.get(_parse, {}), + _parse, + ) # for neighbors - self._compare_neighbor_lists(want.get("neighbors", {}), have.get("neighbors", {})) + self._compare_neighbor_lists( + want.get("neighbors", {}), + have.get("neighbors", {}), + ) # for redistribute - self._compare_redistribute_lists(want.get("redistribute", {}), have.get("redistribute", {})) + self._compare_redistribute_lists( + want.get("redistribute", {}), + have.get("redistribute", {}), + ) - # add as_number in the begining fo command set if commands generated + # add as_number in the beginning of commands set if commands generated if len(self.commands) != cmd_len or (not have and want): - self.commands.insert(0, self._tmplt.render(want or have, "as_number", False)) + self.commands.insert( + 0, + self._tmplt.render(want or have, "as_number", False), + ) + + def _set_bgp_defaults(self, bgp_dict): + bgp_dict.setdefault("bgp", {}).setdefault("default", {}).setdefault( + "ipv4_unicast", + True, + ) + bgp_dict.setdefault("bgp", {}).setdefault("default", {}).setdefault( + "route_target", + {}, + ).setdefault("filter", True) def _has_bgp_inject_maps(self, want): if want.get("bgp", {}).get("inject_maps", {}): @@ -324,10 +360,21 @@ class Bgp_global(ResourceModule): ] for name, w_neighbor in want.items(): + handle_shutdown_default = False have_nbr = have.pop(name, {}) want_route = w_neighbor.pop("route_maps", {}) have_route = have_nbr.pop("route_maps", {}) + if ( + not w_neighbor.get("shutdown", {}).get("set") + and have_nbr.get("shutdown", {}).get("set") + and self.state in ["merged", "replaced", "overridden"] + ): + neig_parses.remove("shutdown") + handle_shutdown_default = True self.compare(parsers=neig_parses, want=w_neighbor, have=have_nbr) + if handle_shutdown_default: + self.addcmd(have_nbr, "shutdown", True) + if want_route: for k_rmps, w_rmps in want_route.items(): have_rmps = have_route.pop(k_rmps, {}) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py index b4b874d6e..b862ac466 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/l3_interfaces/l3_interfaces.py @@ -29,7 +29,6 @@ from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates ) from ansible_collections.cisco.ios.plugins.module_utils.network.ios.utils.utils import ( normalize_interface, - validate_ipv6, validate_n_expand_ipv4, ) @@ -48,12 +47,18 @@ class L3_interfaces(ResourceModule): tmplt=L3_interfacesTemplate(), ) self.parsers = [ + "mac_address", "ipv4.address", "ipv4.pool", "ipv4.dhcp", + "ipv4.source_interface", "ipv6.address", "ipv6.autoconfig", "ipv6.dhcp", + "ipv6.enable", + ] + self.gen_parsers = [ + "autostate", ] def execute_module(self): @@ -101,10 +106,16 @@ class L3_interfaces(ResourceModule): self._compare(want={}, have=have) for k, want in wantd.items(): - self._compare(want=want, have=haved.pop(k, {})) + have = haved.pop(k, {}) + # New interface (doesn't use fact file) + if k[:4] == "Vlan": + have.setdefault("autostate", True) + want.setdefault("autostate", True) + self._compare(want=want, have=have) def _compare(self, want, have): begin = len(self.commands) + self.compare(parsers=self.gen_parsers, want=want, have=have) self._compare_lists(want=want, have=have) if len(self.commands) != begin: self.commands.insert(begin, self._tmplt.render(want or have, "name", False)) @@ -141,7 +152,12 @@ class L3_interfaces(ResourceModule): # hacl is set as primary, if wacls has no other primary entry we must keep # this entry as primary (so we'll compare entry to hacl and not # generate commands) - if list(filter(lambda w: w.get("secondary", False) is False, wacls.values())): + if list( + filter( + lambda w: w.get("secondary", False) is False, + wacls.values(), + ), + ): # another primary is in wacls hacl = {} self.validate_ips(afi, want=entry, have=hacl) @@ -168,17 +184,11 @@ class L3_interfaces(ResourceModule): v4_addr = validate_n_expand_ipv4(self._module, want) if want.get("address") else {} if v4_addr: want["address"] = v4_addr - elif afi == "ipv6" and want: - if want.get("address"): - validate_ipv6(want["address"], self._module) if afi == "ipv4" and have: v4_addr_h = validate_n_expand_ipv4(self._module, have) if have.get("address") else {} if v4_addr_h: have["address"] = v4_addr_h - elif afi == "ipv6" and have: - if have.get("address"): - validate_ipv6(have["address"], self._module) def list_to_dict(self, param): if param: diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py index d8a1bec9f..f02fbfdfb 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/route_maps/route_maps.py @@ -304,11 +304,11 @@ class Route_maps(ResourceModule): "acl", ) elif match["ip"][each_ip_param].get("prefix_lists"): - match["ip"][each_ip_param][ - "prefix_lists" - ] = convert_to_dict( - match["ip"][each_ip_param]["prefix_lists"], - "prefix_list", + match["ip"][each_ip_param]["prefix_lists"] = ( + convert_to_dict( + match["ip"][each_ip_param]["prefix_lists"], + "prefix_list", + ) ) if match.get("local_preference") and match.get("local_preference").get( "value", diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py index 187d0779d..d61a70a10 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/snmp_server/snmp_server.py @@ -237,39 +237,20 @@ class Snmp_server(ResourceModule): def _compare_lists_attrs(self, want, have): """Compare list of dict""" for _parser in self.list_parsers: - if _parser == "users": - i_want = want.get(_parser, {}) - i_have = have.get(_parser, {}) - for key, wanting in iteritems(i_want): - wanting_compare = deepcopy(wanting) - if ( - "authentication" in wanting_compare - and "password" in wanting_compare["authentication"] - ): - wanting_compare["authentication"].pop("password") - if ( - "encryption" in wanting_compare - and "password" in wanting_compare["encryption"] - ): - wanting_compare["encryption"].pop("password") - haveing = i_have.pop(key, {}) - if wanting_compare != haveing: - if haveing and self.state in ["overridden", "replaced"]: + i_want = want.get(_parser, {}) + i_have = have.get(_parser, {}) + for key, wanting in iteritems(i_want): + haveing = i_have.pop(key, {}) + if wanting != haveing: + if haveing and self.state in ["overridden", "replaced"]: + if not ( + _parser == "users" + and wanting.get("username") == haveing.get("username") + ): self.addcmd(haveing, _parser, negate=True) - self.addcmd(wanting, _parser) - for key, haveing in iteritems(i_have): - self.addcmd(haveing, _parser, negate=True) - else: - i_want = want.get(_parser, {}) - i_have = have.get(_parser, {}) - for key, wanting in iteritems(i_want): - haveing = i_have.pop(key, {}) - if wanting != haveing: - if haveing and self.state in ["overridden", "replaced"]: - self.addcmd(haveing, _parser, negate=True) - self.addcmd(wanting, _parser) - for key, haveing in iteritems(i_have): - self.addcmd(haveing, _parser, negate=True) + self.addcmd(wanting, _parser) + for key, haveing in iteritems(i_have): + self.addcmd(haveing, _parser, negate=True) def _snmp_list_to_dict(self, data): """Convert all list of dicts to dicts of dicts""" diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py index ad95b680a..d195c317e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/config/vlans/vlans.py @@ -1,62 +1,60 @@ # # -*- coding: utf-8 -*- -# Copyright 2019 Red Hat +# Copyright 2024 Red Hat # GNU General Public License v3.0+ # (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) -""" -The ios_vlans class -It is in this file where the current configuration (as dict) -is compared to the provided configuration (as dict) and the command set -necessary to bring the current configuration to it's desired end-state is -created -""" +# from __future__ import absolute_import, division, print_function __metaclass__ = type +""" +The ios_vlans config file. +It is in this file where the current configuration (as dict) +is compared to the provided configuration (as dict) and the command set +necessary to bring the current configuration to its desired end-state is +created. +""" + -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base import ( - ConfigBase, +from ansible.module_utils.six import iteritems +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module import ( + ResourceModule, ) from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import ( - remove_empties, - to_list, + dict_merge, ) from ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.facts import Facts -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.utils.utils import dict_to_set +from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates.vlans import ( + VlansTemplate, +) -class Vlans(ConfigBase): +class Vlans(ResourceModule): """ - The ios_vlans class + The ios_vlans config class """ - gather_subset = ["!all", "!min"] - - gather_network_resources = ["vlans"] - def __init__(self, module): - super(Vlans, self).__init__(module) - - def get_vlans_facts(self, data=None): - """Get the 'facts' (the current configuration) - - :rtype: A dictionary - :returns: The current configuration as a dictionary - """ - - facts, _warnings = Facts(self._module).get_facts( - self.gather_subset, - self.gather_network_resources, - data=data, + super(Vlans, self).__init__( + empty_fact_val={}, + facts_module=Facts(module), + module=module, + resource="vlans", + tmplt=VlansTemplate(), ) - vlans_facts = facts["ansible_network_resources"].get("vlans") - if not vlans_facts: - return [] - return vlans_facts + self.parsers = [ + "name", + "state", + "mtu", + "remote_span", + "private_vlan.type", + "private_vlan.associated", + "member", + ] def execute_module(self): """Execute the module @@ -64,394 +62,106 @@ class Vlans(ConfigBase): :rtype: A dictionary :returns: The result from module execution """ - result = {"changed": False} - commands = list() - warnings = list() - self.have_now = list() - self.configuration = self._module.params["configuration"] - if not self.configuration: - self.vlan_parent = "vlan {0}" - else: - self.vlan_parent = "vlan configuration {0}" - if self.state in self.ACTION_STATES: - existing_vlans_facts = self.get_vlans_facts() - else: - existing_vlans_facts = [] - - if self.state in self.ACTION_STATES or self.state == "rendered": - commands.extend(self.set_config(existing_vlans_facts)) - if commands and self.state in self.ACTION_STATES: - if not self._module.check_mode: - self._connection.edit_config(commands) - result["changed"] = True - if self.state in self.ACTION_STATES: - result["commands"] = commands - - if self.state in self.ACTION_STATES or self.state == "gathered": - changed_vlans_facts = self.get_vlans_facts() - elif self.state == "rendered": - result["rendered"] = commands - elif self.state == "parsed": - running_config = self._module.params["running_config"] - if not running_config: - self._module.fail_json( - msg="value of running_config parameter must not be empty for state parsed", + if self.state not in ["parsed", "gathered"]: + self.segregate_resource() + self.run_commands() + return self.result + + def segregate_resource(self): + self.want_vlan_config = [] + self.have_vlan_config = [] + for vlan_data in self.want: + if vlan_data.get("member"): + self.want_vlan_config.append( + { + "vlan_id": vlan_data.get("vlan_id"), + "member": vlan_data.pop("member"), + }, ) - result["parsed"] = self.get_vlans_facts(data=running_config) - else: - changed_vlans_facts = [] - - if self.state in self.ACTION_STATES: - result["before"] = existing_vlans_facts - if result["changed"]: - result["after"] = changed_vlans_facts - elif self.state == "gathered": - result["gathered"] = changed_vlans_facts - - result["warnings"] = warnings - return result - - def set_config(self, existing_vlans_facts): - """Collect the configuration from the args passed to the module, - collect the current configuration (as a dict from facts) - - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - want = [] - if self._module.params.get("config"): - for cfg in self._module.params["config"]: - want.append(remove_empties(cfg)) - have = existing_vlans_facts - resp = self.set_state(want, have) - return to_list(resp) - - def set_state(self, want, have): - """Select the appropriate function based on the state provided - - :param want: the desired configuration as a dictionary - :param have: the current configuration as a dictionary - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - - if self.state in ("overridden", "merged", "replaced", "rendered") and not want: - self._module.fail_json( - msg="value of config parameter must not be empty for state {0}".format(self.state), - ) - - if self.state == "overridden": - commands = self._state_overridden(want, have) - elif self.state == "deleted": - commands = self._state_deleted(want, have) - elif self.state in ("merged", "rendered"): - commands = self._state_merged(want, have) - elif self.state == "replaced": - commands = self._state_replaced(want, have) - return commands - - def _state_replaced(self, want, have): - """The command generator when state is replaced - - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - commands = [] - - check = False - for each in want: - for every in have: - if every["vlan_id"] == each["vlan_id"]: - check = True - break - continue - if check: - commands.extend(self._set_config(each, every)) - else: - commands.extend(self._set_config(each, dict())) - - return commands - - def _state_overridden(self, want, have): - """The command generator when state is overridden - - :rtype: A list - :returns: the commands necessary to migrate the current configuration - to the desired configuration - """ - commands = [] - - want_local = want - self.have_now = have.copy() - for each in have: - count = 0 - for every in want_local: - if each["vlan_id"] == every["vlan_id"]: - break - count += 1 else: - # We didn't find a matching desired state, which means we can - # pretend we received an empty desired state. - commands.extend(self._clear_config(every, each)) - continue - commands.extend(self._set_config(every, each)) - # as the pre-existing VLAN are now configured by - # above set_config call, deleting the respective - # VLAN entry from the want_local list - del want_local[count] - - # Iterating through want_local list which now only have new VLANs to be - # configured - for each in want_local: - commands.extend(self._set_config(each, dict())) - - return commands - - def _state_merged(self, want, have): - """The command generator when state is merged - - :rtype: A list - :returns: the commands necessary to merge the provided into - the current configuration - """ - commands = [] - - check = False - for each in want: - for every in have: - if each.get("vlan_id") == every.get("vlan_id"): - check = True - break - continue - if check: - commands.extend(self._set_config(each, every)) + self.want_vlan_config.append( + {"vlan_id": vlan_data.get("vlan_id")}, + ) + for vlan_data in self.have: + if vlan_data.get("member"): + self.have_vlan_config.append( + { + "vlan_id": vlan_data.get("vlan_id"), + "member": vlan_data.pop("member"), + }, + ) else: - commands.extend(self._set_config(each, dict())) - - return commands - - def _state_deleted(self, want, have): - """The command generator when state is deleted + self.have_vlan_config.append( + {"vlan_id": vlan_data.get("vlan_id")}, + ) + if self.want or self.have: + self.generate_commands(self.want, self.have, "vlans") + if self.want_vlan_config or self.have_vlan_config: + self.generate_commands( + self.want_vlan_config, + self.have_vlan_config, + "vlan_configuration", + ) - :rtype: A list - :returns: the commands necessary to remove the current configuration - of the provided objects + def generate_commands(self, conf_want, conf_have, resource=None): + """Generate configuration commands to send based on + want, have and desired state. """ - commands = [] - - if want: - check = False - for each in want: - for every in have: - if each.get("vlan_id") == every.get("vlan_id"): - check = True - break - check = False - continue - if check: - commands.extend(self._clear_config(each, every)) + wantd = {entry["vlan_id"]: entry for entry in conf_want} + haved = {entry["vlan_id"]: entry for entry in conf_have} + + # if state is merged, merge want onto have and then compare + if self.state == "merged": + wantd = dict_merge(haved, wantd) + + # if state is deleted, empty out wantd and set haved to wantd + if self.state == "deleted": + haved = {k: v for k, v in iteritems(haved) if k in wantd or not wantd} + wantd = {} + + # if state is deleted, empty out wantd and set haved to wantd + if self.state in ["deleted", "purged"]: + haved = {k: v for k, v in iteritems(haved) if k in wantd or not wantd} + wantd = {} + + # remove superfluous config for overridden and deleted + if self.state in ["overridden", "deleted"]: + for k, have in iteritems(haved): + if k not in wantd: + self._compare(want={}, have=have, resource=resource) + + if self.state == "purged": + for k, have in iteritems(haved): + self.purge(have, resource) else: - for each in have: - commands.extend(self._clear_config(dict(), each)) - - return commands - - def remove_command_from_config_list(self, vlan_id, cmd, commands): - if vlan_id not in commands and cmd != "vlan": - commands.insert(0, vlan_id) - elif cmd == "vlan": - commands.append("no %s" % vlan_id) - return commands - commands.append("no %s" % cmd) - return commands - - def add_command_to_config_list(self, vlan_id, cmd, commands): - if vlan_id not in commands: - commands.insert(0, vlan_id) - if cmd not in commands: - commands.append(cmd) - - def _set_config(self, want, have): - # Set the interface config based on the want and have config - commands = [] - - vlan = self.vlan_parent.format(want.get("vlan_id")) - - def negate_have_config(want_diff, have_diff, vlan, commands): - name = dict(have_diff).get("name") - if name and not dict(want_diff).get("name"): - self.remove_command_from_config_list(vlan, "name {0}".format(name), commands) - state = dict(have_diff).get("state") - if state and not dict(want_diff).get("state"): - self.remove_command_from_config_list(vlan, "state {0}".format(state), commands) - shutdown = dict(have_diff).get("shutdown") - if shutdown and not dict(want_diff).get("shutdown"): - self.remove_command_from_config_list(vlan, "shutdown", commands) - mtu = dict(have_diff).get("mtu") - if mtu and not dict(want_diff).get("mtu"): - self.remove_command_from_config_list(vlan, "mtu {0}".format(mtu), commands) - remote_span = dict(have_diff).get("remote_span") - if remote_span and not dict(want_diff).get("remote_span"): - self.remove_command_from_config_list(vlan, "remote-span", commands) - private_vlan = dict(have_diff).get("private_vlan") - if private_vlan and not dict(want_diff).get("private_vlan"): - private_vlan_type = dict(private_vlan).get("type") - self.remove_command_from_config_list( - vlan, - "private-vlan {0}".format(private_vlan_type), - commands, - ) - if private_vlan_type == "primary" and dict(private_vlan).get("associated"): - self.remove_command_from_config_list(vlan, "private-vlan association", commands) - - # Get the diff b/w want n have - - want_dict = dict_to_set(want, sort_dictionary=True) - have_dict = dict_to_set(have, sort_dictionary=True) - diff = want_dict - have_dict - have_diff = have_dict - want_dict - - if diff: - if have_diff and (self.state == "replaced" or self.state == "overridden"): - negate_have_config(diff, have_diff, vlan, commands) - - if not self.configuration: - name = dict(diff).get("name") - state = dict(diff).get("state") - shutdown = dict(diff).get("shutdown") - mtu = dict(diff).get("mtu") - remote_span = dict(diff).get("remote_span") - private_vlan = dict(diff).get("private_vlan") - - if name: - self.add_command_to_config_list(vlan, "name {0}".format(name), commands) - if state: - self.add_command_to_config_list(vlan, "state {0}".format(state), commands) - if mtu: - self.add_command_to_config_list(vlan, "mtu {0}".format(mtu), commands) - if remote_span: - self.add_command_to_config_list(vlan, "remote-span", commands) - - if private_vlan: - private_vlan_type = dict(private_vlan).get("type") - private_vlan_associated = dict(private_vlan).get("associated") - if private_vlan_type: - self.add_command_to_config_list( - vlan, - "private-vlan {0}".format(private_vlan_type), - commands, - ) - if private_vlan_associated: - associated_list = ",".join( - str(e) for e in private_vlan_associated - ) # Convert python list to string with elements separated by a comma - self.add_command_to_config_list( - vlan, - "private-vlan association {0}".format(associated_list), - commands, - ) - if shutdown == "enabled": - self.add_command_to_config_list(vlan, "shutdown", commands) - elif shutdown == "disabled": - self.add_command_to_config_list(vlan, "no shutdown", commands) + for k, want in iteritems(wantd): + self._compare(want=want, have=haved.pop(k, {}), resource=resource) + + def _compare(self, want, have, resource=None): + """Leverages the base class `compare()` method and + populates the list of commands to be run by comparing + the `want` and `have` data with the `parsers` defined + for the Vlans network resource. + """ + begin = len(self.commands) + self.compare(parsers=self.parsers, want=want, have=have) + if want.get("shutdown") != have.get("shutdown"): + if want.get("shutdown"): + self.addcmd(want, "shutdown", True) else: - member_dict = dict(diff).get("member") - if member_dict: - member_dict = dict(member_dict) - member_vni = member_dict.get("vni") - member_evi = member_dict.get("evi") - commands.extend( - self._remove_vlan_vni_evi_mapping( - want, - ), - ) - commands.extend( - [ - vlan, - self._get_member_cmds(member_dict), - ], - ) - - elif have_diff and (self.state == "replaced" or self.state == "overridden"): - negate_have_config(diff, have_diff, vlan, commands) - return commands - - def _clear_config(self, want, have): - # Delete the interface config based on the want and have config - commands = [] - vlan = self.vlan_parent.format(have.get("vlan_id")) - - if ( - have.get("vlan_id") - and "default" not in have.get("name", "") - and (have.get("vlan_id") != want.get("vlan_id") or self.state == "deleted") - ): - self.remove_command_from_config_list(vlan, "vlan", commands) - if self.configuration and self.state == "overridden": - self.have_now.remove(have) - elif "default" not in have.get("name", ""): - if not self.configuration: - if have.get("mtu") != want.get("mtu"): - self.remove_command_from_config_list(vlan, "mtu", commands) - if have.get("remote_span") != want.get("remote_span") and want.get("remote_span"): - self.remove_command_from_config_list(vlan, "remote-span", commands) - if have.get("shutdown") != want.get("shutdown") and want.get("shutdown"): - self.remove_command_from_config_list(vlan, "shutdown", commands) - if have.get("state") != want.get("state") and want.get("state"): - self.remove_command_from_config_list(vlan, "state", commands) - return commands - - def _remove_vlan_vni_evi_mapping(self, want_dict): - commands = [] - have_copy = self.have_now.copy() - vlan = want_dict["vlan_id"] - for vlan_dict in have_copy: - if vlan_dict["vlan_id"] == vlan: - if "member" in vlan_dict: - commands.extend( - [ - self.vlan_parent.format(vlan), - self._get_member_cmds( - vlan_dict.get("member", {}), - prefix="no", - ), - ], - ) - vlan_dict.pop("member") - if vlan_dict["vlan_id"] != vlan: - delete_member = False - have_vni = vlan_dict.get("member", {}).get("vni") - have_evi = vlan_dict.get("member", {}).get("evi") - if have_vni and (have_vni == want_dict["member"].get("vni")): - delete_member = True - if have_evi and (have_evi == want_dict["member"].get("evi")): - delete_member = True - if delete_member: - commands.extend( - [ - self.vlan_parent.format(vlan_dict["vlan_id"]), - self._get_member_cmds( - vlan_dict.get("member", {}), - prefix="no", - ), - ], - ) - self.have_now.remove(vlan_dict) - return commands - - def _get_member_cmds(self, member_dict, prefix=""): - cmd = "" - if prefix: - prefix = prefix + " " - member_vni = member_dict.get("vni") - member_evi = member_dict.get("evi") - - if member_evi: - cmd = prefix + "member evpn-instance {0} vni {1}".format(member_evi, member_vni) - elif member_vni: - cmd = prefix + "member vni {0}".format(member_vni) + if want: + self.addcmd(want, "shutdown", False) + elif have.get("shutdown"): + # handles deleted as want be blank and only + # negates if no shutdown + self.addcmd(have, "shutdown", False) + if len(self.commands) != begin: + self.commands.insert( + begin, + self._tmplt.render(want or have, resource, False), + ) - return cmd + def purge(self, have, resource): + """Handle operation for purged state""" + if resource == "vlan_configuration": + self.commands.append(self._tmplt.render(have, resource, True)) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py index 2be369a7a..341491f2e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/acls/acls.py @@ -105,7 +105,10 @@ class AclsFacts(object): if namedata: # parse just names to update empty acls - templateObjName = NetworkTemplate(lines=namedata.splitlines(), tmplt=AclsTemplate()) + templateObjName = NetworkTemplate( + lines=namedata.splitlines(), + tmplt=AclsTemplate(), + ) raw_acl_names = templateObjName.parse() raw_acls = self.populate_empty_acls(raw_acls, raw_acl_names) @@ -114,7 +117,10 @@ class AclsFacts(object): if raw_acls.get("acls"): for k, v in iteritems(raw_acls.get("acls")): - if v.get("afi") == "ipv4" and v.get("acl_type") in ["standard", "extended"]: + if v.get("afi") == "ipv4" and v.get("acl_type") in [ + "standard", + "extended", + ]: del v["afi"] temp_v4.append(v) elif v.get("afi") == "ipv6": @@ -142,10 +148,15 @@ class AclsFacts(object): def process_protocol_options(each): for each_ace in each.get("aces"): if each.get("acl_type") == "standard": - if len(each_ace.get("source", {})) == 1 and each_ace.get("source", {}).get( + if len(each_ace.get("source", {})) == 1 and each_ace.get( + "source", + {}, + ).get( "address", ): - each_ace["source"]["host"] = each_ace["source"].pop("address") + each_ace["source"]["host"] = each_ace["source"].pop( + "address", + ) if each_ace.get("source", {}).get("address"): addr = each_ace.get("source", {}).get("address") if addr[-1] == ",": @@ -159,7 +170,10 @@ class AclsFacts(object): if each_ace.get("icmp_igmp_tcp_protocol"): each_ace["protocol_options"] = { each_ace["protocol"]: { - each_ace.pop("icmp_igmp_tcp_protocol").replace("-", "_"): True, + each_ace.pop("icmp_igmp_tcp_protocol").replace( + "-", + "_", + ): True, }, } if each_ace.get("protocol_number"): @@ -172,13 +186,21 @@ class AclsFacts(object): ace_entry = [] ace_rem = [] rem = {} + # every remarks is one list item which has a sequence number + # every ace remark is preserved and ordered + # at the end of each sequence it is flushed to a ace entry for i in aces: + # i here denotes an ace, which would be populated with remarks entries if i.get("is_remark_for"): if not rem.get(i.get("is_remark_for")): rem[i.get("is_remark_for")] = {"remarks": []} - rem[i.get("is_remark_for")]["remarks"].append(i.get("the_remark")) + rem[i.get("is_remark_for")]["remarks"].append( + i.get("the_remark"), + ) else: - rem[i.get("is_remark_for")]["remarks"].append(i.get("the_remark")) + rem[i.get("is_remark_for")]["remarks"].append( + i.get("the_remark"), + ) else: if rem: if rem.get(i.get("sequence")): @@ -187,12 +209,27 @@ class AclsFacts(object): ace_entry.append(i) if rem: # pending remarks - pending_rem = rem.get("remark") - ace_entry.append({"remarks": pending_rem.get("remarks")}) + for pending_rem_seq, pending_rem_val in rem.items(): + # there can be ace entry with just a remarks and no ace actually + # 10 remarks I am a remarks + # 20 ..... so onn + if pending_rem_seq != "remark": + ace_entry.append( + { + "sequence": pending_rem_seq, + "remarks": pending_rem_val.get("remarks"), + }, + ) + else: + # this handles the classic set of remarks at the end, which is not tied to + # any sequence number + pending_rem = rem.get("remark", {}) + ace_entry.append({"remarks": pending_rem.get("remarks")}) return ace_entry for each in temp_v4: if each.get("aces"): + # handling remarks for each ace entry each["aces"] = collect_remarks(each.get("aces")) process_protocol_options(each) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py index 37bbfabfd..c5b90d9e7 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/bgp_global/bgp_global.py @@ -35,6 +35,17 @@ class Bgp_globalFacts(object): def get_bgp_global_data(self, connection): return connection.get("show running-config | section ^router bgp") + def _set_defaults(self, objs): + """makes data as per the facts after data obtained from parsers""" + + if objs.get("as_number"): + objs.setdefault("bgp", {}).setdefault("default", {}).setdefault("ipv4_unicast", True) + objs.setdefault("bgp", {}).setdefault("default", {}).setdefault( + "route_target", + {}, + ).setdefault("filter", True) + return objs + def populate_facts(self, connection, ansible_facts, data=None): """Populate the facts for Bgp_global network resource @@ -56,6 +67,9 @@ class Bgp_globalFacts(object): module=self._module, ) objs = bgp_global_parser.parse() + if objs: + objs = self._set_defaults(objs) + neighbor_list = objs.get("neighbors", {}) if neighbor_list: objs["neighbors"] = sorted( diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py index 7718b474d..583c86b51 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/facts.py @@ -104,7 +104,12 @@ from ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vxlan_ ) -FACT_LEGACY_SUBSETS = dict(default=Default, hardware=Hardware, interfaces=Interfaces, config=Config) +FACT_LEGACY_SUBSETS = dict( + default=Default, + hardware=Hardware, + interfaces=Interfaces, + config=Config, +) FACT_RESOURCE_SUBSETS = dict( interfaces=InterfacesFacts, @@ -155,7 +160,11 @@ class Facts(FactsBase): :return: the facts gathered """ if self.VALID_RESOURCE_SUBSETS: - self.get_network_resources_facts(FACT_RESOURCE_SUBSETS, resource_facts_type, data) + self.get_network_resources_facts( + FACT_RESOURCE_SUBSETS, + resource_facts_type, + data, + ) if self.VALID_LEGACY_GATHER_SUBSETS: self.get_network_legacy_facts(FACT_LEGACY_SUBSETS, legacy_facts_type) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py index bea49159b..1b36db57a 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/l3_interfaces/l3_interfaces.py @@ -40,6 +40,14 @@ class L3_InterfacesFacts(object): def get_l3_interfaces_data(self, connection): return connection.get("show running-config | section ^interface") + def _set_defaults(self, objs): + """Set default parameters""" + + for intf in objs: + if intf.get("name") and intf["name"][:4] == "Vlan": + intf.setdefault("autostate", True) + return objs + def populate_facts(self, connection, ansible_facts, data=None): """Populate the facts for l3 interfaces :param connection: the device connection @@ -71,6 +79,10 @@ class L3_InterfacesFacts(object): temp = sorted(temp, key=lambda k, sk="name": k[sk]) objs = temp + + if objs: + objs = self._set_defaults(objs) + facts = {} if objs: facts["l3_interfaces"] = [] diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py index 9b506fa90..7bfed68d5 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/facts/vlans/vlans.py @@ -16,8 +16,6 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -import re - from copy import deepcopy from ansible_collections.ansible.netcommon.plugins.module_utils.network.common import utils @@ -25,6 +23,9 @@ from ansible_collections.ansible.netcommon.plugins.module_utils.network.common i from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.vlans.vlans import ( VlansArgs, ) +from ansible_collections.cisco.ios.plugins.module_utils.network.ios.rm_templates.vlans import ( + VlansTemplate, +) class VlansFacts(object): @@ -44,154 +45,60 @@ class VlansFacts(object): self.generated_spec = utils.generate_dict(facts_argument_spec) - def get_vlans_data(self, connection, configuration): + def get_vlans_data(self, connection): """Checks device is L2/L3 and returns facts gracefully. Does not fail module. """ - if configuration: - cmd = "show running-config | sec ^vlan configuration .+" - else: - cmd = "show vlan" check_os_type = connection.get_device_info() if check_os_type.get("network_os_type") == "L3": return "" - return connection.get(cmd) + return connection.get("show vlan") + + def get_vlan_conf_data(self, connection): + return connection.get("show running-config | section ^vlan configuration .+") + + def populate_vlans_config_facts(self, connection, data=None): + """Process config for Vlans Configurations - def populate_facts(self, connection, ansible_facts, data=None): - """Populate the facts for vlans :param connection: the device connection :param ansible_facts: Facts dictionary :param data: previously collected conf + :rtype: dictionary :returns: facts """ - configuration = self._module.params["configuration"] - objs = [] if not data: - data = self.get_vlans_data(connection, configuration) - if not configuration: - objs = self.parse_vlan(data) - else: - objs = self.parse_vlan_config(data) + data = self.get_vlan_conf_data(connection) - facts = {} - if objs: - facts["vlans"] = [] - params = utils.validate_config(self.argument_spec, {"config": objs}) - - for cfg in params["config"]: - facts["vlans"].append(utils.remove_empties(cfg)) - ansible_facts["ansible_network_resources"].update(facts) - return ansible_facts + # parse native config using the Vlan_configurations template + vlan_configurations_parser = VlansTemplate( + lines=data.splitlines(), + module=self._module, + ) + return vlan_configurations_parser.parse() - def render_config(self, spec, conf, vlan_info): - """ - Render config as dictionary structure and delete keys - from spec for null values - - :param spec: The facts tree, generated from the argspec - :param conf: The configuration + def populate_facts(self, connection, ansible_facts, data=None): + """Populate the facts for vlans + :param connection: the device connection + :param ansible_facts: Facts dictionary + :param data: previously collected conf :rtype: dictionary - :returns: The generated config + :returns: facts """ - config = deepcopy(spec) - - if vlan_info == "Name" and "VLAN Name" not in conf: - conf = list(filter(None, conf.split(" "))) - config["vlan_id"] = int(conf[0]) - config["name"] = conf[1] - state_idx = 2 - for i in range(2, len(conf)): # check for index where state starts - if conf[i] in ["suspended", "active"]: - state_idx = i - break - elif conf[i].split("/")[0] in ["sus", "act"]: - state_idx = i - break - config["name"] += " " + conf[i] - try: - if len(conf[state_idx].split("/")) > 1: - _state = conf[state_idx].split("/")[0] - if _state == "sus": - config["state"] = "suspend" - elif _state == "act": - config["state"] = "active" - config["shutdown"] = "enabled" - else: - if conf[state_idx] == "suspended": - config["state"] = "suspend" - elif conf[state_idx] == "active": - config["state"] = "active" - config["shutdown"] = "disabled" - except IndexError: - pass - elif vlan_info == "Type" and "VLAN Type" not in conf: - conf = list(filter(None, conf.split(" "))) - config["mtu"] = int(conf[3]) - elif vlan_info == "Remote": - if len(conf.split(",")) > 1 or conf.isdigit(): - remote_span_vlan = [] - if len(conf.split(",")) > 1: - remote_span_vlan = conf.split(",") - else: - remote_span_vlan.append(conf) - remote_span = [] - for each in remote_span_vlan: - split_sp_list = each.split("-") - if len(split_sp_list) > 1: # break range - for r_sp in range(int(split_sp_list[0]), int(split_sp_list[1]) + 1): - remote_span.append(r_sp) - else: - remote_span.append(int(each)) - config["remote_span"] = remote_span - - elif vlan_info == "Private" and "Primary Secondary" not in conf: - conf = list(filter(None, conf.split(" "))) - - pri_idx = 0 - sec_idx = 1 - priv_type_idx = 2 - - config["tmp_pvlans"] = { - "primary": conf[pri_idx], - "secondary": conf[sec_idx], - "sec_type": conf[priv_type_idx], - } - return utils.remove_empties(config) - - def parse_vlan_config(self, vlan_conf): - vlan_list = list() - - re1 = re.compile(r"^vlan configuration +(?P<vlan>\d+)$") - re2 = re.compile(r"^member +(evpn\-instance +(?P<evi>\d+) )?vni (?P<vni>[\d\-]+)$") - - for line in vlan_conf.splitlines(): - line = line.strip() - m = re1.match(line) - if m: - vlan = m.groupdict()["vlan"] - vlan_dict = {"vlan_id": vlan} - continue - - m = re2.match(line) - if m: - group = m.groupdict() - vlan_dict.update({"member": {}}) - vlan_dict["member"].update({"vni": group["vni"]}) - if group["evi"]: - vlan_dict["member"].update({"evi": group["evi"]}) - vlan_list.append(vlan_dict) - - return vlan_list - - def parse_vlan(self, data): objs = [] mtu_objs = [] remote_objs = [] final_objs = [] pvlan_objs = [] + conf_data = {} + + if not data: + data = self.get_vlans_data(connection) + + # deals with vlan configuration config only + conf_data = self.populate_vlans_config_facts(connection, data) # operate on a collection of resource x config = data.split("\n") @@ -199,6 +106,7 @@ class VlansFacts(object): vlan_info = "" temp = "" vlan_name = True + for conf in config: if len(list(filter(None, conf.split(" ")))) <= 2 and vlan_name: temp = temp + conf @@ -231,6 +139,7 @@ class VlansFacts(object): pvlan_objs.append(obj) elif obj: objs.append(obj) + # Appending MTU value to the retrieved dictionary for o, m in zip(objs, mtu_objs): o.update(m) @@ -250,7 +159,6 @@ class VlansFacts(object): pvlan_final = {} if len(pvlan_objs) > 0: # Sanitize and structure everything - for data in pvlan_objs: pvdata = data.get("tmp_pvlans") privlan = pvdata.get("primary") @@ -270,7 +178,9 @@ class VlansFacts(object): "private_vlan": {"type": "primary", "associated": []}, } if secvlan and (isinstance(secvlan, int) or secvlan.isnumeric()): - pvlan_final[privlan]["private_vlan"]["associated"].append(int(secvlan)) + pvlan_final[privlan]["private_vlan"]["associated"].append( + int(secvlan), + ) # Associate with the proper VLAN in final_objs for vlan_id, data in pvlan_final.items(): @@ -278,7 +188,103 @@ class VlansFacts(object): if vlan_id == every.get("vlan_id"): every.update(data) - if final_objs: - return objs - else: - return {} + facts = {} + + if conf_data: + for vlan in objs: + if conf_data.get(vlan.get("vlan_id")): + member_data = conf_data.pop(vlan.get("vlan_id")) + vlan.update(member_data) + + if conf_data: # if any vlan configuration data is pending add it to facts + for vlanid, conf in conf_data.items(): + objs.append(conf) + + if objs: + facts["vlans"] = [] + params = utils.validate_config(self.argument_spec, {"config": objs}) + + for cfg in params["config"]: + facts["vlans"].append(utils.remove_empties(cfg)) + ansible_facts["ansible_network_resources"].update(facts) + + return ansible_facts + + def render_config(self, spec, conf, vlan_info): + """ + Render config as dictionary structure and delete keys + from spec for null values + + :param spec: The facts tree, generated from the argspec + :param conf: The configuration + :rtype: dictionary + :returns: The generated config + """ + config = deepcopy(spec) + + if vlan_info == "Name" and "VLAN Name" not in conf: + conf = list(filter(None, conf.split(" "))) + config["vlan_id"] = int(conf[0]) + config["name"] = conf[1] + state_idx = 2 + for i in range(2, len(conf)): # check for index where state starts + if conf[i] in ["suspended", "active"]: + state_idx = i + break + elif conf[i].split("/")[0] in ["sus", "act"]: + state_idx = i + break + config["name"] += " " + conf[i] + try: + if len(conf[state_idx].split("/")) > 1: + _state = conf[state_idx].split("/")[0] + if _state == "sus": + config["state"] = "suspend" + elif _state == "act": + config["state"] = "active" + config["shutdown"] = "enabled" + else: + if conf[state_idx] == "suspended": + config["state"] = "suspend" + elif conf[state_idx] == "active": + config["state"] = "active" + config["shutdown"] = "disabled" + except IndexError: + pass + elif vlan_info == "Type" and "VLAN Type" not in conf: + conf = list(filter(None, conf.split(" "))) + config["mtu"] = int(conf[3]) + elif vlan_info == "Remote": + if len(conf.split(",")) > 1 or conf.isdigit(): + remote_span_vlan = [] + if len(conf.split(",")) > 1: + remote_span_vlan = conf.split(",") + else: + remote_span_vlan.append(conf) + remote_span = [] + for each in remote_span_vlan: + split_sp_list = each.split("-") + if len(split_sp_list) > 1: # break range + for r_sp in range( + int(split_sp_list[0]), + int(split_sp_list[1]) + 1, + ): + remote_span.append(r_sp) + else: + remote_span.append(int(each)) + config["remote_span"] = remote_span + + elif vlan_info == "Private" and "Primary Secondary" not in conf: + conf = list(filter(None, conf.split(" "))) + + pri_idx = 0 + sec_idx = 1 + priv_type_idx = 2 + + config["tmp_pvlans"] = { + "primary": conf[pri_idx], + "secondary": conf[sec_idx], + "sec_type": conf[priv_type_idx], + } + + return utils.remove_empties(config) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/__init__.py +++ /dev/null diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/__init__.py +++ /dev/null diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py deleted file mode 100644 index f1b9cdb90..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/base.py +++ /dev/null @@ -1,82 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, 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 -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.config import ( - NetworkConfig, -) -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - - -class ConfigBase(object): - argument_spec = {} - - mutually_exclusive = [] - - identifier = () - - def __init__(self, **kwargs): - self.values = {} - self._rendered_configuration = {} - self.active_configuration = None - - for item in self.identifier: - self.values[item] = kwargs.pop(item) - - for key, value in iteritems(kwargs): - if key in self.argument_spec: - setattr(self, key, value) - - for key, value in iteritems(self.argument_spec): - if value.get("default"): - if not getattr(self, key, None): - setattr(self, key, value.get("default")) - - def __getattr__(self, key): - if key in self.argument_spec: - return self.values.get(key) - - def __setattr__(self, key, value): - if key in self.argument_spec: - if key in self.identifier: - raise TypeError("cannot set value") - elif value is not None: - self.values[key] = value - else: - super(ConfigBase, self).__setattr__(key, value) - - def context_config(self, cmd): - if "context" not in self._rendered_configuration: - self._rendered_configuration["context"] = list() - self._rendered_configuration["context"].extend(to_list(cmd)) - - def global_config(self, cmd): - if "global" not in self._rendered_configuration: - self._rendered_configuration["global"] = list() - self._rendered_configuration["global"].extend(to_list(cmd)) - - def get_rendered_configuration(self): - config = list() - for section in ("context", "global"): - config.extend(self._rendered_configuration.get(section, [])) - return config - - def set_active_configuration(self, config): - self.active_configuration = config - - def render(self, config=None): - raise NotImplementedError - - def get_section(self, config, section): - if config is not None: - netcfg = NetworkConfig(indent=1, contents=config) - try: - config = netcfg.get_block_config(to_list(section)) - except ValueError: - config = None - return config diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/__init__.py +++ /dev/null diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py deleted file mode 100644 index e4c2bd803..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/address_family.py +++ /dev/null @@ -1,147 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, 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 -import re - -from ansible.module_utils.common.network import to_netmask -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.neighbors import ( - AFNeighbors, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers import ( - CliProvider, -) - - -class AddressFamily(CliProvider): - def render(self, config=None): - commands = list() - safe_list = list() - - router_context = "router bgp %s" % self.get_value("config.bgp_as") - context_config = None - - for item in self.get_value("config.address_family"): - context = "address-family %s" % item["afi"] - if item["safi"] != "unicast": - context += " %s" % item["safi"] - context_commands = list() - - if config: - context_path = [router_context, context] - context_config = self.get_config_context(config, context_path, indent=1) - - for key, value in iteritems(item): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(item, context_config) - if resp: - context_commands.extend(to_list(resp)) - - if context_commands: - commands.append(context) - commands.extend(context_commands) - commands.append("exit-address-family") - - safe_list.append(context) - - if self.params["operation"] == "replace": - if config: - resp = self._negate_config(config, safe_list) - commands.extend(resp) - - return commands - - def _negate_config(self, config, safe_list=None): - commands = list() - matches = re.findall(r"(address-family .+)$", config, re.M) - for item in set(matches).difference(safe_list): - commands.append("no %s" % item) - return commands - - def _render_auto_summary(self, item, config=None): - cmd = "auto-summary" - if item["auto_summary"] is False: - cmd = "no %s" % cmd - if not config or cmd not in config: - return cmd - - def _render_synchronization(self, item, config=None): - cmd = "synchronization" - if item["synchronization"] is False: - cmd = "no %s" % cmd - if not config or cmd not in config: - return cmd - - def _render_networks(self, item, config=None): - commands = list() - safe_list = list() - - for entry in item["networks"]: - network = entry["prefix"] - cmd = "network %s" % network - if entry["masklen"]: - cmd += " mask %s" % to_netmask(entry["masklen"]) - network += " mask %s" % to_netmask(entry["masklen"]) - if entry["route_map"]: - cmd += " route-map %s" % entry["route_map"] - network += " route-map %s" % entry["route_map"] - - safe_list.append(network) - - if not config or cmd not in config: - commands.append(cmd) - - if self.params["operation"] == "replace": - if config: - matches = re.findall(r"network (.*)", config, re.M) - for entry in set(matches).difference(safe_list): - commands.append("no network %s" % entry) - - return commands - - def _render_redistribute(self, item, config=None): - commands = list() - safe_list = list() - - for entry in item["redistribute"]: - option = entry["protocol"] - - cmd = "redistribute %s" % entry["protocol"] - - if entry["id"] and entry["protocol"] in ("ospf", "ospfv3", "eigrp"): - cmd += " %s" % entry["id"] - option += " %s" % entry["id"] - - if entry["metric"]: - cmd += " metric %s" % entry["metric"] - - if entry["route_map"]: - cmd += " route-map %s" % entry["route_map"] - - if not config or cmd not in config: - commands.append(cmd) - - safe_list.append(option) - - if self.params["operation"] == "replace": - if config: - matches = re.findall(r"redistribute (\S+)(?:\s*)(\d*)", config, re.M) - for i in range(0, len(matches)): - matches[i] = " ".join(matches[i]).strip() - for entry in set(matches).difference(safe_list): - commands.append("no redistribute %s" % entry) - - return commands - - def _render_neighbors(self, item, config): - """generate bgp neighbor configuration""" - return AFNeighbors(self.params).render(config, nbr_list=item["neighbors"]) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py deleted file mode 100644 index 4ee337b00..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/neighbors.py +++ /dev/null @@ -1,203 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, 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 -import re - -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers import ( - CliProvider, -) - - -class Neighbors(CliProvider): - def render(self, config=None, nbr_list=None): - commands = list() - safe_list = list() - if not nbr_list: - nbr_list = self.get_value("config.neighbors") - - for item in nbr_list: - neighbor_commands = list() - context = "neighbor %s" % item["neighbor"] - cmd = "%s remote-as %s" % (context, item["remote_as"]) - - if not config or cmd not in config: - neighbor_commands.append(cmd) - - for key, value in iteritems(item): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(item, config) - if resp: - neighbor_commands.extend(to_list(resp)) - - commands.extend(neighbor_commands) - safe_list.append(context) - - if self.params["operation"] == "replace": - if config and safe_list: - commands.extend(self._negate_config(config, safe_list)) - - return commands - - def _negate_config(self, config, safe_list=None): - commands = list() - matches = re.findall(r"(neighbor \S+)", config, re.M) - for item in set(matches).difference(safe_list): - commands.append("no %s" % item) - return commands - - def _render_local_as(self, item, config=None): - cmd = "neighbor %s local-as %s" % (item["neighbor"], item["local_as"]) - if not config or cmd not in config: - return cmd - - def _render_port(self, item, config=None): - cmd = "neighbor %s port %s" % (item["neighbor"], item["port"]) - if not config or cmd not in config: - return cmd - - def _render_description(self, item, config=None): - cmd = "neighbor %s description %s" % (item["neighbor"], item["description"]) - if not config or cmd not in config: - return cmd - - def _render_enabled(self, item, config=None): - cmd = "neighbor %s shutdown" % item["neighbor"] - if item["enabled"] is True: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_update_source(self, item, config=None): - cmd = "neighbor %s update-source %s" % (item["neighbor"], item["update_source"]) - if not config or cmd not in config: - return cmd - - def _render_password(self, item, config=None): - cmd = "neighbor %s password %s" % (item["neighbor"], item["password"]) - if not config or cmd not in config: - return cmd - - def _render_ebgp_multihop(self, item, config=None): - cmd = "neighbor %s ebgp-multihop %s" % (item["neighbor"], item["ebgp_multihop"]) - if not config or cmd not in config: - return cmd - - def _render_peer_group(self, item, config=None): - cmd = "neighbor %s peer-group %s" % (item["neighbor"], item["peer_group"]) - if not config or cmd not in config: - return cmd - - def _render_timers(self, item, config): - """generate bgp timer related configuration""" - keepalive = item["timers"]["keepalive"] - holdtime = item["timers"]["holdtime"] - min_neighbor_holdtime = item["timers"]["min_neighbor_holdtime"] - neighbor = item["neighbor"] - - if keepalive and holdtime: - cmd = "neighbor %s timers %s %s" % (neighbor, keepalive, holdtime) - if min_neighbor_holdtime: - cmd += " %s" % min_neighbor_holdtime - if not config or cmd not in config: - return cmd - - -class AFNeighbors(CliProvider): - def render(self, config=None, nbr_list=None): - commands = list() - if not nbr_list: - return - - for item in nbr_list: - neighbor_commands = list() - for key, value in iteritems(item): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(item, config) - if resp: - neighbor_commands.extend(to_list(resp)) - - commands.extend(neighbor_commands) - - return commands - - def _render_advertisement_interval(self, item, config=None): - cmd = "neighbor %s advertisement-interval %s" % ( - item["neighbor"], - item["advertisement_interval"], - ) - if not config or cmd not in config: - return cmd - - def _render_route_reflector_client(self, item, config=None): - cmd = "neighbor %s route-reflector-client" % item["neighbor"] - if item["route_reflector_client"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_route_server_client(self, item, config=None): - cmd = "neighbor %s route-server-client" % item["neighbor"] - if item["route_server_client"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_remove_private_as(self, item, config=None): - cmd = "neighbor %s remove-private-as" % item["neighbor"] - if item["remove_private_as"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_next_hop_self(self, item, config=None): - cmd = "neighbor %s next-hop-self" % item["neighbor"] - if item["next_hop_self"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_activate(self, item, config=None): - cmd = "neighbor %s activate" % item["neighbor"] - if item["activate"] is False: - if not config or cmd in config: - cmd = "no %s" % cmd - return cmd - elif not config or cmd not in config: - return cmd - - def _render_maximum_prefix(self, item, config=None): - cmd = "neighbor %s maximum-prefix %s" % (item["neighbor"], item["maximum_prefix"]) - if not config or cmd not in config: - return cmd - - def _render_prefix_list_in(self, item, config=None): - cmd = "neighbor %s prefix-list %s in" % (item["neighbor"], item["prefix_list_in"]) - if not config or cmd not in config: - return cmd - - def _render_prefix_list_out(self, item, config=None): - cmd = "neighbor %s prefix-list %s out" % (item["neighbor"], item["prefix_list_out"]) - if not config or cmd not in config: - return cmd diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py deleted file mode 100644 index 2b54daa35..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/cli/config/bgp/process.py +++ /dev/null @@ -1,163 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, 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 -import re - -from ansible.module_utils.common.network import to_netmask -from ansible.module_utils.six import iteritems -from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.utils import to_list - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.address_family import ( - AddressFamily, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.neighbors import ( - Neighbors, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers import ( - CliProvider, - register_provider, -) - - -REDISTRIBUTE_PROTOCOLS = [ - "ospf", - "ospfv3", - "eigrp", - "isis", - "static", - "connected", - "odr", - "lisp", - "mobile", - "rip", -] - - -@register_provider("ios", "ios_bgp") -class Provider(CliProvider): - def render(self, config=None): - commands = list() - - existing_as = None - if config: - match = re.search(r"router bgp (\d+)", config, re.M) - if match: - existing_as = match.group(1) - - operation = self.params["operation"] - - context = None - if self.params["config"]: - context = "router bgp %s" % self.get_value("config.bgp_as") - - if operation == "delete": - if existing_as: - commands.append("no router bgp %s" % existing_as) - elif context: - commands.append("no %s" % context) - - else: - self._validate_input(config) - if operation == "replace": - if existing_as and int(existing_as) != self.get_value("config.bgp_as"): - commands.append("no router bgp %s" % existing_as) - config = None - - elif operation == "override": - if existing_as: - commands.append("no router bgp %s" % existing_as) - config = None - - context_commands = list() - - for key, value in iteritems(self.get_value("config")): - if value is not None: - meth = getattr(self, "_render_%s" % key, None) - if meth: - resp = meth(config) - if resp: - context_commands.extend(to_list(resp)) - - if context and context_commands: - commands.append(context) - commands.extend(context_commands) - commands.append("exit") - return commands - - def _render_router_id(self, config=None): - cmd = "bgp router-id %s" % self.get_value("config.router_id") - if not config or cmd not in config: - return cmd - - def _render_log_neighbor_changes(self, config=None): - cmd = "bgp log-neighbor-changes" - log_neighbor_changes = self.get_value("config.log_neighbor_changes") - if log_neighbor_changes is True: - if not config or cmd not in config: - return cmd - elif log_neighbor_changes is False: - if config and cmd in config: - return "no %s" % cmd - - def _render_networks(self, config=None): - commands = list() - safe_list = list() - - for entry in self.get_value("config.networks"): - network = entry["prefix"] - cmd = "network %s" % network - if entry["masklen"] and entry["masklen"] not in (24, 16, 8): - cmd += " mask %s" % to_netmask(entry["masklen"]) - network += " mask %s" % to_netmask(entry["masklen"]) - - if entry["route_map"]: - cmd += " route-map %s" % entry["route_map"] - network += " route-map %s" % entry["route_map"] - - safe_list.append(network) - - if not config or cmd not in config: - commands.append(cmd) - - if self.params["operation"] == "replace": - if config: - matches = re.findall(r"network (.*)", config, re.M) - for entry in set(matches).difference(safe_list): - commands.append("no network %s" % entry) - - return commands - - def _render_neighbors(self, config): - """generate bgp neighbor configuration""" - return Neighbors(self.params).render(config) - - def _render_address_family(self, config): - """generate address-family configuration""" - return AddressFamily(self.params).render(config) - - def _validate_input(self, config=None): - def device_has_AF(config): - return re.search(r"address-family (?:.*)", config) - - address_family = self.get_value("config.address_family") - root_networks = self.get_value("config.networks") - operation = self.params["operation"] - - if operation == "replace": - if address_family and root_networks: - for item in address_family: - if item["networks"]: - raise ValueError( - "operation is replace but provided both root level network(s) and network(s) under %s %s address family" - % (item["afi"], item["safi"]), - ) - - if root_networks and config and device_has_AF(config): - raise ValueError( - "operation is replace and device has one or more address family activated but root level network(s) provided", - ) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py deleted file mode 100644 index 4de464795..000000000 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/providers/module.py +++ /dev/null @@ -1,66 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, 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 -from ansible.module_utils._text import to_text -from ansible.module_utils.basic import AnsibleModule -from ansible.module_utils.connection import Connection - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers import providers - - -class NetworkModule(AnsibleModule): - fail_on_missing_provider = True - - def __init__(self, connection=None, *args, **kwargs): - super(NetworkModule, self).__init__(*args, **kwargs) - - if connection is None: - connection = Connection(self._socket_path) - - self.connection = connection - - @property - def provider(self): - if not hasattr(self, "_provider"): - capabilities = self.from_json(self.connection.get_capabilities()) - - network_os = capabilities["device_info"]["network_os"] - network_api = capabilities["network_api"] - - if network_api == "cliconf": - connection_type = "network_cli" - - cls = providers.get(network_os, self._name.split(".")[-1], connection_type) - - if not cls: - msg = "unable to find suitable provider for network os %s" % network_os - if self.fail_on_missing_provider: - self.fail_json(msg=msg) - else: - self.warn(msg) - - obj = cls(self.params, self.connection, self.check_mode) - - setattr(self, "_provider", obj) - - return getattr(self, "_provider") - - def get_facts(self, subset=None): - try: - self.provider.get_facts(subset) - except Exception as exc: - self.fail_json(msg=to_text(exc)) - - def edit_config(self, config_filter=None): - current_config = self.connection.get_config(flags=config_filter) - try: - commands = self.provider.edit_config(current_config) - changed = bool(commands) - return {"commands": commands, "changed": changed} - except Exception as exc: - self.fail_json(msg=to_text(exc)) diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py index b3afd65f9..54d082c2e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/acls.py @@ -23,9 +23,9 @@ from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.r def remarks_with_sequence(remarks_data): - cmd = "remark " + cmd = "remark" if remarks_data.get("remarks"): - cmd += remarks_data.get("remarks") + cmd += " " + remarks_data.get("remarks") if remarks_data.get("sequence"): cmd = to_text(remarks_data.get("sequence")) + " " + cmd return cmd @@ -191,7 +191,7 @@ class AclsTemplate(NetworkTemplate): "name": "{{ acl_name }}", "aces": [ { - "the_remark": "{{ remarks }}", + "the_remark": "'{{ remarks }}'", "order": "{{ order }}", "is_remark_for": "{{ sequence }}", }, @@ -206,14 +206,14 @@ class AclsTemplate(NetworkTemplate): r"""(?P<order>^\d+)\s*remark\s(?P<remarks>.+)$""", re.VERBOSE, ), - "setval": "{{ sequence }} remark", + "setval": remarks_with_sequence, "result": { "acls": { "{{ acl_name|d() }}": { "name": "{{ acl_name }}", "aces": [ { - "the_remark": "{{ remarks }}", + "the_remark": "'{{ remarks }}'", "order": "{{ order }}", "is_remark_for": "remark", }, @@ -238,7 +238,7 @@ class AclsTemplate(NetworkTemplate): "aces": [ { "sequence": "{{ sequence }}", - "remarks": ["{{ remarks }}"], + "remarks": ["'{{ remarks }}'"], }, ], }, @@ -248,7 +248,7 @@ class AclsTemplate(NetworkTemplate): { "name": "aces_ipv4_standard", "getval": re.compile( - r"""(\s*(?P<sequence>\d+))? + r"""^\s*((?P<sequence>\d+))? (\s(?P<grant>deny|permit)) (\s+(?P<address>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))? (\s(?P<wildcard>((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)))? @@ -281,17 +281,17 @@ class AclsTemplate(NetworkTemplate): { "name": "aces", "getval": re.compile( - r"""(\s*(?P<sequence>\d+))? - (\s*sequence\s(?P<sequence_ipv6>\d+))? - (\s*(?P<grant>deny|permit)) + r"""^\s*((?P<sequence>\d+))? + (\ssequence\s(?P<sequence_ipv6>\d+))? + (\s(?P<grant>deny|permit)) (\sevaluate\s(?P<evaluate>\S+))? - (\s(?P<protocol_num>\d+))? + (\s(?P<protocol_num>\d+)\s)? (\s*(?P<protocol>ahp|eigrp|esp|gre|icmp|igmp|ipinip|ipv6|ip|nos|ospf|pcp|pim|sctp|tcp|ip|udp))? - ((\s(?P<source_any>any))| - (\sobject-group\s(?P<source_obj_grp>\S+))| - (\shost\s(?P<source_host>\S+))| - (\s(?P<ipv6_source_address>\S+/\d+))| - (\s(?P<source_address>(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s\S+)))? + ((\s*(?P<source_any>any))| + (\s*object-group\s(?P<source_obj_grp>\S+))| + (\s*host\s(?P<source_host>\S+))| + (\s*(?P<ipv6_source_address>\S+/\d+))| + (\s*(?P<source_address>(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})\s\S+)))? (\seq\s(?P<seq>(\S+|\d+)))? (\sgt\s(?P<sgt>(\S+|\d+)))? (\slt\s(?P<slt>(\S+|\d+)))? diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py index ca85440b2..eb5a08a37 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_address_family.py @@ -28,7 +28,11 @@ UNIQUE_NEIB_ADD = "{{ neighbor_address }}" class Bgp_address_familyTemplate(NetworkTemplate): def __init__(self, lines=None, module=None): - super(Bgp_address_familyTemplate, self).__init__(lines=lines, tmplt=self, module=module) + super(Bgp_address_familyTemplate, self).__init__( + lines=lines, + tmplt=self, + module=module, + ) PARSERS = [ { @@ -61,7 +65,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' vrf ' + vrf) if vrf is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"afi": "{{ afi }}", "safi": "{{ safi }}", "vrf": "{{ vrf }}"}, + UNIQUE_AFI: { + "afi": "{{ afi }}", + "safi": "{{ safi }}", + "vrf": "{{ vrf }}", + }, }, }, "shared": True, @@ -136,7 +144,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "table_map": {"name": "{{ name }}", "filter": "{{ not not filter }}"}, + "table_map": { + "name": "{{ name }}", + "filter": "{{ not not filter }}", + }, }, }, }, @@ -149,7 +160,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): }, { "name": "default_information", - "getval": re.compile(r"""\s\sdefault-information\soriginate$""", re.VERBOSE), + "getval": re.compile( + r"""\s\sdefault-information\soriginate$""", + re.VERBOSE, + ), "setval": "default-information originate", "result": {"address_family": {UNIQUE_AFI: {"default_information": True}}}, }, @@ -162,7 +176,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "default-metric {{ default_metric|string }}", - "result": {"address_family": {UNIQUE_AFI: {"default_metric": "{{ default_metric }}"}}}, + "result": { + "address_family": { + UNIQUE_AFI: {"default_metric": "{{ default_metric }}"}, + }, + }, }, { "name": "distance", @@ -234,7 +252,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp additional-paths select install", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"additional_paths": {"install": True}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"additional_paths": {"install": True}}}, + }, }, }, { @@ -246,7 +266,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp additional-paths select receive", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"additional_paths": {"receive": True}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"additional_paths": {"receive": True}}}, + }, }, }, { @@ -258,7 +280,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp additional-paths select send", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"additional_paths": {"send": True}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"additional_paths": {"send": True}}}, + }, }, }, { @@ -316,7 +340,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "bgp nexthop trigger delay {{ bgp.nexthop.trigger.delay|string }}", "result": { "address_family": { - UNIQUE_AFI: {"bgp": {"nexthop": {"trigger": {"delay": "{{ delay }}"}}}}, + UNIQUE_AFI: { + "bgp": {"nexthop": {"trigger": {"delay": "{{ delay }}"}}}, + }, }, }, }, @@ -330,7 +356,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): ), "setval": "bgp nexthop trigger delay enable", "result": { - "address_family": {UNIQUE_AFI: {"bgp": {"nexthop": {"trigger": {"enable": True}}}}}, + "address_family": { + UNIQUE_AFI: {"bgp": {"nexthop": {"trigger": {"enable": True}}}}, + }, }, }, { @@ -342,7 +370,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "bgp redistribute-internal", - "result": {"address_family": {UNIQUE_AFI: {"bgp": {"redistribute_internal": True}}}}, + "result": { + "address_family": {UNIQUE_AFI: {"bgp": {"redistribute_internal": True}}}, + }, }, { "name": "bgp.route_map", @@ -365,7 +395,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "bgp scan-time {{ bgp.scan_time }}", - "result": {"address_family": {UNIQUE_AFI: {"bgp": {"scan_time": "{{ scan_time }}"}}}}, + "result": { + "address_family": { + UNIQUE_AFI: {"bgp": {"scan_time": "{{ scan_time }}"}}, + }, + }, }, { "name": "bgp.soft_reconfig_backup", @@ -376,7 +410,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "bgp soft-reconfig-backup", - "result": {"address_family": {UNIQUE_AFI: {"bgp": {"soft_reconfig_backup": True}}}}, + "result": { + "address_family": {UNIQUE_AFI: {"bgp": {"soft_reconfig_backup": True}}}, + }, }, { "name": "bgp.update_group", @@ -429,7 +465,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "bgp slow-peer detection", "result": { "address_family": { - UNIQUE_AFI: {"bgp": {"slow_peer_options": {"detection": {"enable": True}}}}, + UNIQUE_AFI: { + "bgp": {"slow_peer_options": {"detection": {"enable": True}}}, + }, }, }, }, @@ -447,7 +485,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "address_family": { UNIQUE_AFI: { "bgp": { - "slow_peer_options": {"detection": {"threshold": "{{ threshold }}"}}, + "slow_peer_options": { + "detection": {"threshold": "{{ threshold }}"}, + }, }, }, }, @@ -464,7 +504,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "bgp": {"slow_peer_options": {"split_update_group": {"dynamic": True}}}, + "bgp": { + "slow_peer_options": { + "split_update_group": {"dynamic": True}, + }, + }, }, }, }, @@ -480,7 +524,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "bgp": {"slow_peer_options": {"split_update_group": {"permanent": True}}}, + "bgp": { + "slow_peer_options": { + "split_update_group": {"permanent": True}, + }, + }, }, }, }, @@ -543,7 +591,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' ' + remote_as|string) if remote_as is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"remote_as": "{{ number }}"}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"remote_as": "{{ number }}"}}, + }, }, }, }, @@ -692,7 +742,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"advertises": {"best-external": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"advertises": {"best-external": True}}, + }, }, }, }, @@ -792,7 +844,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' aigp') if aigp.enable|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"aigp": {"enable": True}}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"aigp": {"enable": True}}}, + }, }, }, }, @@ -848,7 +902,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' aigp send med') if aigp.send.med|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"aigp": {"send": {"med": True}}}}}, + UNIQUE_AFI: { + "neighbors": { + UNIQUE_NEIB_ADD: {"aigp": {"send": {"med": True}}}, + }, + }, }, }, }, @@ -863,7 +921,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' allow-policy') if allow_policy|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"allow_policy": True}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"allow_policy": True}}, + }, }, }, }, @@ -881,7 +941,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"allowas_in": "{{ allowas_in }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"allowas_in": "{{ allowas_in }}"}, + }, }, }, }, @@ -973,7 +1035,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"cluster_id": "{{ cluster_id }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"cluster_id": "{{ cluster_id }}"}, + }, }, }, }, @@ -989,7 +1053,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"default_originate": {"set": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"default_originate": {"set": True}}, + }, }, }, }, @@ -1031,7 +1097,7 @@ class Bgp_address_familyTemplate(NetworkTemplate): "neighbors": { UNIQUE_NEIB_ADD: { "neighbor_address": UNIQUE_NEIB_ADD, - "description": "{{ description }}", + "description": "'{{ description }}'", }, }, }, @@ -1260,7 +1326,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' ' + inherit) if inherit is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"inherit": "{{ inherit }}"}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"inherit": "{{ inherit }}"}}, + }, }, }, }, @@ -1276,7 +1344,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "neighbor {{ neighbor_address }} internal-vpn-client", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"internal_vpn_client": True}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"internal_vpn_client": True}}, + }, }, }, }, @@ -1354,7 +1424,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' next-hop-self') if nexthop_self.set|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"set": True}}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"set": True}}}, + }, }, }, }, @@ -1369,7 +1441,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' next-hop-self all') if nexthop_self.all|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"all": True}}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"nexthop_self": {"all": True}}}, + }, }, }, }, @@ -1385,7 +1459,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"set": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"set": True}}, + }, }, }, }, @@ -1402,7 +1478,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"allpaths": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"next_hop_unchanged": {"allpaths": True}}, + }, }, }, }, @@ -1460,7 +1538,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "path_attribute": { "discard": { "type": "{{ type }}", - "range": {"start": "{{ start }}", "end": "{{ end }}"}, + "range": { + "start": "{{ start }}", + "end": "{{ end }}", + }, "in": "{{ not not in }}", }, }, @@ -1493,7 +1574,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "path_attribute": { "treat_as_withdraw": { "type": "{{ type }}", - "range": {"start": "{{ start }}", "end": "{{ end }}"}, + "range": { + "start": "{{ start }}", + "end": "{{ end }}", + }, "in": "{{ not not in }}", }, }, @@ -1581,7 +1665,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"remove_private_as": {"set": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"remove_private_as": {"set": True}}, + }, }, }, }, @@ -1598,7 +1684,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"remove_private_as": {"all": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"remove_private_as": {"all": True}}, + }, }, }, }, @@ -1615,7 +1703,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"remove_private_as": {"replace_as": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"remove_private_as": {"replace_as": True}}, + }, }, }, }, @@ -1675,7 +1765,11 @@ class Bgp_address_familyTemplate(NetworkTemplate): "setval": "{{ ('neighbor ' + neighbor_address + ' send-community') if send_community.set|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"set": True}}}}, + UNIQUE_AFI: { + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"set": True}}, + }, + }, }, }, }, @@ -1692,7 +1786,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"both": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"both": True}}, + }, }, }, }, @@ -1710,7 +1806,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"extended": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"extended": True}}, + }, }, }, }, @@ -1728,7 +1826,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"send_community": {"standard": True}}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"send_community": {"standard": True}}, + }, }, }, }, @@ -1840,7 +1940,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' soft-reconfiguration inbound') if soft_reconfiguration|d(False) else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"soft_reconfiguration": True}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"soft_reconfiguration": True}}, + }, }, }, }, @@ -1986,7 +2088,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"ttl_security": "{{ ttl_security }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"ttl_security": "{{ ttl_security }}"}, + }, }, }, }, @@ -2005,7 +2109,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "result": { "address_family": { UNIQUE_AFI: { - "neighbors": {UNIQUE_NEIB_ADD: {"unsuppress_map": "{{ unsuppress_map }}"}}, + "neighbors": { + UNIQUE_NEIB_ADD: {"unsuppress_map": "{{ unsuppress_map }}"}, + }, }, }, }, @@ -2047,7 +2153,9 @@ class Bgp_address_familyTemplate(NetworkTemplate): "{{ (' ' + weight|string) if weight is defined else '' }}", "result": { "address_family": { - UNIQUE_AFI: {"neighbors": {UNIQUE_NEIB_ADD: {"weight": "{{ weight }}"}}}, + UNIQUE_AFI: { + "neighbors": {UNIQUE_NEIB_ADD: {"weight": "{{ weight }}"}}, + }, }, }, }, @@ -2130,7 +2238,10 @@ class Bgp_address_familyTemplate(NetworkTemplate): "name": "{{ context }}", "user": { "name": "{{ user }}", - "access": {"acl": "{{ acl }}", "ipv6": "{{ aclv6 }}"}, + "access": { + "acl": "{{ acl }}", + "ipv6": "{{ aclv6 }}", + }, "auth": {"md5": "{{ md5 }}", "sha": "{{ sha }}"}, "priv": { "des56": "{{ des56 }}", @@ -2663,7 +2774,12 @@ class Bgp_address_familyTemplate(NetworkTemplate): "address_family": { UNIQUE_AFI: { "redistribute": [ - {"vrf": {"name": "{{ name }}", "global": "{{ not not global }}"}}, + { + "vrf": { + "name": "{{ name }}", + "global": "{{ not not global }}", + }, + }, ], }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py index 39fd548bc..2ce959fcd 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/bgp_global.py @@ -447,7 +447,7 @@ class Bgp_globalTemplate(NetworkTemplate): re.VERBOSE, ), "setval": "description {{ route_server_context.description }}", - "result": {"route_server_context": {"description": "{{ description }}"}}, + "result": {"route_server_context": {"description": "'{{ description }}'"}}, }, { "name": "synchronization", @@ -476,6 +476,36 @@ class Bgp_globalTemplate(NetworkTemplate): }, }, { + "name": "template.peer_policy", + "getval": re.compile( + r""" + \stemplate\speer-policy + (\s(?P<peer_policy>\S+)) + $""", + re.VERBOSE, + ), + "setval": "template peer-policy" + "{{ (' ' + template.peer_policy) if template.peer_policy is defined else '' }}", + "result": { + "template": {"peer_policy": "{{ peer_policy }}"}, + }, + }, + { + "name": "template.peer_session", + "getval": re.compile( + r""" + \stemplate\speer-session + (\s(?P<peer_session>\S+)) + $""", + re.VERBOSE, + ), + "setval": "template peer-session" + "{{ (' ' + template.peer_session) if template.peer_session is defined else '' }}", + "result": { + "template": {"peer_session": "{{ peer_session }}"}, + }, + }, + { "name": "timers", "getval": re.compile( r""" @@ -745,6 +775,21 @@ class Bgp_globalTemplate(NetworkTemplate): }, }, { + "name": "bgp.default.ipv4_unicast", + "getval": re.compile(r"""\sno\sbgp\sdefault\sipv4\-unicast""", re.VERBOSE), + "setval": "bgp default ipv4-unicast", + "result": {"bgp": {"default": {"ipv4_unicast": False}}}, + }, + { + "name": "bgp.default.route_target.filter", + "getval": re.compile( + r"""\sno\sbgp\sdefault\sroute\-target\sfilter""", + re.VERBOSE, + ), + "setval": "bgp default route-target filter", + "result": {"bgp": {"default": {"route_target": {"filter": False}}}}, + }, + { "name": "bgp.deterministic_med", "getval": re.compile(r"""\s(bgp\sdeterministic-med)""", re.VERBOSE), "setval": "bgp deterministic-med", @@ -1064,7 +1109,9 @@ class Bgp_globalTemplate(NetworkTemplate): "setval": "bgp nopeerup-delay nsf-switchover {{ bgp.nopeerup_delay_options.nsf_switchover|string }}", "result": { "bgp": { - "nopeerup_delay_options": {"nsf_switchover": "{{ nsf_switchover }}"}, + "nopeerup_delay_options": { + "nsf_switchover": "{{ nsf_switchover }}", + }, }, }, }, @@ -1080,7 +1127,9 @@ class Bgp_globalTemplate(NetworkTemplate): "setval": "bgp nopeerup-delay user-initiated {{ bgp.nopeerup_delay_options.user_initiated|string }}", "result": { "bgp": { - "nopeerup_delay_options": {"user_initiated": "{{ user_initiated }}"}, + "nopeerup_delay_options": { + "user_initiated": "{{ user_initiated }}", + }, }, }, }, @@ -1433,7 +1482,7 @@ class Bgp_globalTemplate(NetworkTemplate): "neighbors": { "{{ neighbor_address }}": { "neighbor_address": "{{ neighbor_address }}", - "description": "{{ description }}", + "description": "'{{ description }}'", }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py index 084945143..6cd1eb84c 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/interfaces.py @@ -53,7 +53,7 @@ class InterfacesTemplate(NetworkTemplate): "setval": "description {{ description }}", "result": { '{{ name }}': { - 'description': '{{ description }}', + 'description': "'{{ description }}'", }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py index d57a8ded8..bd337befa 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/l3_interfaces.py @@ -66,6 +66,23 @@ class L3_interfacesTemplate(NetworkTemplate): # fmt: off PARSERS = [ { + "name": "autostate", + "getval": re.compile(r"""\s+no\s+autostate$""", re.VERBOSE), + "setval": "autostate", + "result": {"{{ name }}": {"autostate": False}}, + }, + { + "name": "mac_address", + "getval": re.compile( + r"""^mac-address + (\s(?P<mac_address>\S+)) + $""", + re.VERBOSE, + ), + "setval": "mac-address {{ mac_address }}", + "result": {"{{ name }}": {"mac_address": "{{ mac_address }}"}}, + }, + { "name": "name", "getval": re.compile( r"""^interface @@ -146,6 +163,33 @@ class L3_interfacesTemplate(NetworkTemplate): }, }, { + "name": "ipv4.source_interface", + "getval": re.compile( + r"""\s+ip\sunnumbered + (\s(?P<name>\S+)) + (\s(?P<poll>poll))? + (\s(?P<point_to_point>point-to-point))? + $""", + re.VERBOSE, + ), + "setval": "ip unnumbered {{ ipv4.source_interface.name }}" + "{{ ' poll' if ipv4.source_interface.poll|d(False) else ''}}" + "{{ ' point-to-point' if ipv4.source_interface.point_to_point|d(False) else ''}}", + "result": { + "{{ name }}": { + "ipv4": [ + { + "source_interface": { + "name": "{{ True if name is defined }}", + "poll": "{{ True if poll is defined }}", + "point_to_point": "{{ True if point_to_point is defined }}", + }, + }, + ], + }, + }, + }, + { "name": "ipv6.address", "getval": re.compile( r"""\s+ipv6\saddress @@ -227,5 +271,17 @@ class L3_interfacesTemplate(NetworkTemplate): }, }, }, + { + "name": "ipv6.enable", + "getval": re.compile(r"""\s+ipv6\s+enable$""", re.VERBOSE), + "setval": "ipv6 enable", + "result": { + "{{ name }}": { + "ipv6": [ + {"enable": True}, + ], + }, + }, + }, ] # fmt: on diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py index 74b380cc5..80548254e 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/ospfv2.py @@ -721,9 +721,9 @@ class Ospfv2Template(NetworkTemplate): $""", re.VERBOSE, ), - "setval": "distance {{ admin_distance.distance }} " - "{{ ( admin_distance.address + ' ' + admin_distance.wildcard_bits ) if admin_distance.address is defined else '' }}" - "{{ ' ' + admin_distance.acl if admin_distance.acl is defined else '' }}", + "setval": "distance {{ distance.admin_distance.distance }} " + "{{ ( distance.admin_distance.address + ' ' + distance.admin_distance.wildcard_bits ) if distance.admin_distance.address is defined else '' }}" + "{{ ' ' + distance.admin_distance.acl if distance.admin_distance.acl is defined else '' }}", "result": { "processes": { "{{ pid }}": { diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py index 43d163c5d..f19e58e27 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/prefix_lists.py @@ -80,7 +80,7 @@ class Prefix_listsTemplate(NetworkTemplate): "{{ afi + name }}": { "name": "{{ name }}", "afi": "{{ 'ipv4' if afi is defined and afi=='ip' else 'ipv6' }}", - "description": "{{ description }}", + "description": "'{{ description }}'", }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py index 1e569ccca..580987069 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/route_maps.py @@ -39,11 +39,15 @@ def _tmplt_route_map_match(config_data): cmd += " best {best}".format(**config_data["match"]["additional_paths"]) if config_data["match"]["additional_paths"].get("best_range"): cmd += " best-range" - if config_data["match"]["additional_paths"]["best_range"].get("lower_limit"): + if config_data["match"]["additional_paths"]["best_range"].get( + "lower_limit", + ): cmd += " lower-limit {lower_limit}".format( **config_data["match"]["additional_paths"]["best_range"], ) - if config_data["match"]["additional_paths"]["best_range"].get("upper_limit"): + if config_data["match"]["additional_paths"]["best_range"].get( + "upper_limit", + ): cmd += " upper-limit {upper_limit}".format( **config_data["match"]["additional_paths"]["best_range"], ) @@ -231,7 +235,10 @@ def _tmplt_route_map_match_ip(config_data): config_data["match"]["ip"]["address"]["prefix_lists"], ) elif config_data["match"]["ip"]["address"].get("acls"): - cmd = construct_cmd_from_list(cmd, config_data["match"]["ip"]["address"]["acls"]) + cmd = construct_cmd_from_list( + cmd, + config_data["match"]["ip"]["address"]["acls"], + ) if config_data["match"]["ip"].get("flowspec"): cmd += " flowspec" if config_data["match"]["ip"]["flowspec"].get("dest_pfx"): @@ -245,7 +252,10 @@ def _tmplt_route_map_match_ip(config_data): config_data["match"]["ip"]["flowspec"]["prefix_lists"], ) elif config_data["match"]["ip"]["flowspec"].get("acls"): - cmd = construct_cmd_from_list(cmd, config_data["match"]["ip"]["flowspec"]["acls"]) + cmd = construct_cmd_from_list( + cmd, + config_data["match"]["ip"]["flowspec"]["acls"], + ) if config_data["match"]["ip"].get("next_hop"): cmd += " next-hop" if config_data["match"]["ip"]["next_hop"].get("prefix_lists"): @@ -255,7 +265,10 @@ def _tmplt_route_map_match_ip(config_data): config_data["match"]["ip"]["next_hop"]["prefix_lists"], ) elif config_data["match"]["ip"]["next_hop"].get("acls"): - cmd = construct_cmd_from_list(cmd, config_data["match"]["ip"]["next_hop"]["acls"]) + cmd = construct_cmd_from_list( + cmd, + config_data["match"]["ip"]["next_hop"]["acls"], + ) if config_data["match"]["ip"].get("redistribution_source"): cmd += " redistribution-source" if config_data["match"]["ip"]["redistribution_source"].get("prefix_lists"): @@ -411,7 +424,9 @@ def _tmplt_route_map_set(config_data): cmd += " additive" command.append(cmd) if set["extcommunity"].get("soo"): - command.append("set extcommunity soo {soo}".format(**set["extcommunity"])) + command.append( + "set extcommunity soo {soo}".format(**set["extcommunity"]), + ) if set["extcommunity"].get("vpn_distinguisher"): cmd = "set extcommunity vpn-distinguisher" if set["extcommunity"]["vpn_distinguisher"].get("range"): @@ -419,7 +434,9 @@ def _tmplt_route_map_set(config_data): **set["extcommunity"]["vpn_distinguisher"]["range"], ) elif set["extcommunity"]["vpn_distinguisher"].get("address"): - cmd += " {address}".format(**set["extcommunity"]["vpn_distinguisher"]) + cmd += " {address}".format( + **set["extcommunity"]["vpn_distinguisher"], + ) if set["extcommunity"]["vpn_distinguisher"].get("additive"): cmd += " additive" command.append(cmd) @@ -525,7 +542,10 @@ def _tmplt_route_map_set_ip(config_data): command.append("{0} dynamic dhcp".format(cmd)) if set_ip["next_hop"].get("encapsulate"): command.append( - "{0} encapsulate l3vpn {encapsulate}".format(cmd, **set_ip["next_hop"]), + "{0} encapsulate l3vpn {encapsulate}".format( + cmd, + **set_ip["next_hop"], + ), ) if set_ip["next_hop"].get("peer_address"): command.append("{0} peer-address".format(cmd)) @@ -649,7 +669,10 @@ class Route_mapsTemplate(NetworkTemplate): "{{ route_map }}": { "route_map": "{{ route_map }}", "{{ action|d() + '_' + sequence|d() }}": { - "entries": {"action": "{{ action }}", "sequence": "{{ sequence }}"}, + "entries": { + "action": "{{ action }}", + "sequence": "{{ sequence }}", + }, }, }, }, @@ -691,7 +714,7 @@ class Route_mapsTemplate(NetworkTemplate): "result": { "{{ route_map }}": { "{{ action|d() + '_' + sequence|d() }}": { - "entries": {"description": "{{ description }}"}, + "entries": {"description": "'{{ description }}'"}, }, }, }, diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py index 5107612eb..45cabaae9 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/snmp_server.py @@ -283,8 +283,7 @@ class Snmp_serverTemplate(NetworkTemplate): (\sread\s(?P<read>\S+))? (\swrite\s(?P<write>\S+))? (\snotify\s(?P<notify>\S+))? - (\saccess\s(?P<acl_v4>\S+))? - (\saccess\sipv6\s(?P<acl_v6>\S+))? + (\saccess(\sipv6\s(?P<acl_v6>\S+))?(\s(?P<acl_v4>\S+|\d+))?)? """, re.VERBOSE, ), "setval": "snmp-server group " @@ -296,8 +295,9 @@ class Snmp_serverTemplate(NetworkTemplate): "{{ (' read ' + read) if read is defined else '' }}" "{{ (' write ' + write) if write is defined else '' }}" "{{ (' notify ' + notify) if notify is defined else '' }}" - "{{ (' access ' + acl_v4) if acl_v4 is defined else '' }}" - "{{ (' access ipv6 ' + acl_v6) if acl_v6 is defined else '' }}", + "{{ (' access') if acl_v6 is defined or acl_v4 is defined else '' }}" + "{{ (' ipv6 ' + acl_v6) if acl_v6 is defined else '' }}" + "{{ (' ' + acl_v4|string) if acl_v4 is defined else '' }}", "result": { "groups": [ { @@ -398,8 +398,7 @@ class Snmp_serverTemplate(NetworkTemplate): (\sudp-port\s(?P<udp_port>\d+))? (\s(?P<version>v1|v3|v2c))? (\s(?P<version_option>encrypted))? - (\saccess\sipv6\s(?P<acl_v6>\S+))? - (\saccess\s(?P<acl_v4>\S+|\d+))? + (\saccess(\sipv6\s(?P<acl_v6>\S+))?(\s(?P<acl_v4>\S+|\d+))?)? (\svrf\s(?P<vrf>\S+))? """, re.VERBOSE, ), diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py new file mode 100644 index 000000000..24907c868 --- /dev/null +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/rm_templates/vlans.py @@ -0,0 +1,131 @@ +# -*- coding: utf-8 -*- +# Copyright 2024 Red Hat +# 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 + +""" +The Vlans parser templates file. This contains +a list of parser definitions and associated functions that +facilitates both facts gathering and native command generation for +the given network resource. +""" + +import re + +from ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.network_template import ( + NetworkTemplate, +) + + +def vlan_associated_config(config): + cmd = "" + if len(config.get("private_vlan", {}).get("associated")) > 1: + for vlan in config.get("private_vlan", {}).get("associated"): + cmd += str(vlan) + "," + cmd = cmd[:-1] + else: + cmd = config.get("private_vlan", {}).get("associated")[0] + return "private-vlan association " + cmd + + +class VlansTemplate(NetworkTemplate): + def __init__(self, lines=None, module=None): + super(VlansTemplate, self).__init__( + lines=lines, + tmplt=self, + module=module, + ) + + # fmt: off + PARSERS = [ + { + "name": "vlan_configuration", + "getval": re.compile( + r""" + ^vlan\sconfiguration\s(?P<vlan_id>\d+) + $""", re.VERBOSE, + ), + "setval": "vlan configuration {{ vlan_id|string }}", + "result": { + "{{ vlan_id }}": { + "vlan_id": "{{ vlan_id }}", + }, + }, + "shared": True, + }, + { + "name": "member", + "getval": re.compile( + r""" + \s*member + (\sevpn-instance\s(?P<inst_vlan_id>\d+))? + (\svni\s(?P<vni>\d+))? + $""", re.VERBOSE, + ), + "setval": "member" + "{{ (' evpn-instance ' + member.evi|string) if member.evi is defined else '' }}" + "{{ (' vni ' + member.vni|string) if member.vni is defined else '' }}", + "result": { + "{{ vlan_id }}": { + "member": { + "evi": "{{ inst_vlan_id }}", + "vni": "{{ vni }}", + }, + }, + }, + }, + { + "name": "vlans", + "getval": "", + "setval": "vlan {{ vlan_id|string }}", + "result": {}, + }, + { + "name": "name", + "getval": "", + "setval": "name {{ name|string }}", + "result": {}, + }, + { + "name": "state", + "getval": "", + "setval": "state {{ state }}", + "result": {}, + }, + { + "name": "mtu", + "getval": "", + "setval": "mtu {{ mtu|string }}", + "result": {}, + }, + { + "name": "remote_span", + "getval": "", + "setval": "remote-span", + "result": {}, + }, + { + "name": "private_vlan.type", + "getval": "", + "setval": "private-vlan {{ private_vlan.type if private_vlan.type is defined }}", + "result": {}, + }, + { + "name": "private_vlan.associated", + "getval": "", + "setval": vlan_associated_config, + "result": {}, + }, + { + "name": "shutdown", + "getval": "", + "setval": "shutdown", + "result": {}, + }, + ] + # fmt: on diff --git a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py index f3038f7f2..1deea535b 100644 --- a/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py +++ b/ansible_collections/cisco/ios/plugins/module_utils/network/ios/utils/utils.py @@ -219,31 +219,19 @@ def validate_ipv4(value, module): address = value.split("/") if len(address) != 2: module.fail_json( - msg="address format is <ipv4 address>/<mask>, got invalid format {0}".format(value), + msg="address format is <ipv4 address>/<mask>, got invalid format {0}".format( + value, + ), ) if not is_masklen(address[1]): module.fail_json( - msg="invalid value for mask: {0}, mask should be in range 0-32".format(address[1]), + msg="invalid value for mask: {0}, mask should be in range 0-32".format( + address[1], + ), ) -def validate_ipv6(value, module): - if value: - address = value.split("/") - if len(address) != 2: - module.fail_json( - msg="address format is <ipv6 address>/<mask>, got invalid format {0}".format(value), - ) - else: - if not 0 <= int(address[1]) <= 128: - module.fail_json( - msg="invalid value for mask: {0}, mask should be in range 0-128".format( - address[1], - ), - ) - - def validate_n_expand_ipv4(module, want): # Check if input IPV4 is valid IP and expand IPV4 with its subnet mask ip_addr_want = want.get("address") diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_acls.py b/ansible_collections/cisco/ios/plugins/modules/ios_acls.py index f81e0e7ab..4636ecb5d 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_acls.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_acls.py @@ -471,6 +471,11 @@ options: - Remarks entry used as the only key in as the list option will produce non ace specific remarks, these remarks would be pushed at the end of all the aces for an acl. + - Remarks is treated a block, for every single remarks updated for + an ace all the remarks are negated and added back to maintain the + order of remarks mentioned. + - As the appliance deletes all the remarks once the ace is updated, + the set of remarks would be re-applied that is an expected behavior. elements: str type: list sequence: @@ -1944,6 +1949,347 @@ EXAMPLES = """ # ip access-list extended 150 # 10 deny tcp 198.51.100.0 0.0.0.255 eq telnet 198.51.110.0 0.0.0.255 eq telnet syn dscp ef ttl eq 10 +# Using overridden - example remarks specific on multiple sequence + +# Before state: +# ------------- +# +# vios#show running-config | section access-list +# ip access-list extended TEST +# 10 remark FIRST REMARK BEFORE SEQUENCE 10 +# 10 remark ============ +# 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# 20 remark FIRST REMARK BEFORE SEQUENCE 20 +# 20 remark ============ +# 20 remark ALLOW HOST FROM SEQUENCE 20 +# 20 permit ip host 1.1.1.1 any +# 30 remark FIRST REMARK BEFORE SEQUENCE 30 +# 30 remark ============ +# 30 remark ALLOW HOST FROM SEQUENCE 30 +# 30 permit ip host 2.2.2.2 any +# 40 remark FIRST REMARK BEFORE SEQUENCE 40 +# 40 remark ============ +# 40 remark ALLOW NEW HOST FROM SEQUENCE 40 +# 40 permit ip host 3.3.3.3 any +# remark Remark not specific to sequence +# remark ============ +# remark End Remarks +# ip access-list extended test_acl +# 10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 +# ip access-list extended 110 +# 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 +# ip access-list extended 123 +# 10 deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 +# 20 deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 +# ipv6 access-list R1_TRAFFIC +# sequence 10 deny tcp any eq www any eq telnet ack dscp af11 + +- name: Override remarks and ace configurations + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 192.168.0.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30 updated" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks 1" + state: overridden + +# Task Output +# ----------- +# +# before: +# - acls: +# - aces: +# - destination: +# address: 192.0.3.0 +# wildcard_bits: 0.0.0.255 +# dscp: ef +# grant: deny +# protocol: icmp +# protocol_options: +# icmp: +# echo: true +# sequence: 10 +# source: +# address: 192.0.2.0 +# wildcard_bits: 0.0.0.255 +# ttl: +# eq: 10 +# acl_type: extended +# name: '110' +# - aces: +# - destination: +# address: 198.51.101.0 +# port_protocol: +# eq: telnet +# wildcard_bits: 0.0.0.255 +# grant: deny +# protocol: tcp +# protocol_options: +# tcp: +# ack: true +# sequence: 10 +# source: +# address: 198.51.100.0 +# wildcard_bits: 0.0.0.255 +# tos: +# service_value: 12 +# - destination: +# address: 192.0.4.0 +# port_protocol: +# eq: www +# wildcard_bits: 0.0.0.255 +# dscp: ef +# grant: deny +# protocol: tcp +# protocol_options: +# tcp: +# ack: true +# sequence: 20 +# source: +# address: 192.0.3.0 +# wildcard_bits: 0.0.0.255 +# ttl: +# lt: 20 +# acl_type: extended +# name: '123' +# - aces: +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 20 +# - ============ +# - ALLOW HOST FROM SEQUENCE 20 +# sequence: 20 +# source: +# host: 1.1.1.1 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 30 +# - ============ +# - ALLOW HOST FROM SEQUENCE 30 +# sequence: 30 +# source: +# host: 2.2.2.2 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 40 +# - ============ +# - ALLOW NEW HOST FROM SEQUENCE 40 +# sequence: 40 +# source: +# host: 3.3.3.3 +# - remarks: +# - FIRST REMARK BEFORE SEQUENCE 10 +# - ============ +# - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# sequence: 10 +# - remarks: +# - Remark not specific to sequence +# - ============ +# - End Remarks +# acl_type: extended +# name: TEST +# - aces: +# - destination: +# address: 192.0.3.0 +# port_protocol: +# eq: www +# wildcard_bits: 0.0.0.255 +# grant: deny +# option: +# traceroute: true +# protocol: tcp +# protocol_options: +# tcp: +# fin: true +# sequence: 10 +# source: +# address: 192.0.2.0 +# wildcard_bits: 0.0.0.255 +# ttl: +# eq: 10 +# acl_type: extended +# name: test_acl +# afi: ipv4 +# - acls: +# - aces: +# - destination: +# any: true +# port_protocol: +# eq: telnet +# dscp: af11 +# grant: deny +# protocol: tcp +# protocol_options: +# tcp: +# ack: true +# sequence: 10 +# source: +# any: true +# port_protocol: +# eq: www +# name: R1_TRAFFIC +# afi: ipv6 +# commands: +# - no ipv6 access-list R1_TRAFFIC +# - ip access-list extended TEST +# - no 10 # removes all remarks and ace entry for sequence 10 +# - no 20 permit ip host 1.1.1.1 any # removing the ace automatically removes the remarks +# - no 30 remark # just remove remarks for sequence 30 +# - no remark # remove all remarks at end of acl, that has no sequence +# - 10 remark FIRST REMARK BEFORE SEQUENCE 10 +# - 10 remark ============ +# - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# - 10 permit ip host 1.1.1.1 any +# - 20 remark FIRST REMARK BEFORE SEQUENCE 20 +# - 20 remark ============ +# - 20 remark ALLOW HOST FROM SEQUENCE 20 +# - 20 permit ip host 192.168.0.1 any +# - 30 remark FIRST REMARK BEFORE SEQUENCE 30 +# - 30 remark ============ +# - 30 remark ALLOW HOST FROM SEQUENCE 30 updated +# - remark Remark not specific to sequence +# - remark ============ +# - remark End Remarks 1 +# - no ip access-list extended 110 +# - no ip access-list extended 123 +# - no ip access-list extended test_acl +# after: +# - acls: +# - aces: +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 10 +# - ============ +# - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# sequence: 10 +# source: +# host: 1.1.1.1 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 20 +# - ============ +# - ALLOW HOST FROM SEQUENCE 20 +# sequence: 20 +# source: +# host: 192.168.0.1 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 30 +# - ============ +# - ALLOW HOST FROM SEQUENCE 30 updated +# sequence: 30 +# source: +# host: 2.2.2.2 +# - destination: +# any: true +# grant: permit +# protocol: ip +# remarks: +# - FIRST REMARK BEFORE SEQUENCE 40 +# - ============ +# - ALLOW NEW HOST FROM SEQUENCE 40 +# sequence: 40 +# source: +# host: 3.3.3.3 +# - remarks: +# - Remark not specific to sequence +# - ============ +# - End Remarks 1 +# acl_type: extended +# name: TEST +# afi: ipv4 + +# After state: +# ------------- +# +# foo#show running-config | section access-list +# ip access-list extended TEST +# 10 remark FIRST REMARK BEFORE SEQUENCE 10 +# 10 remark ============ +# 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE +# 10 permit ip host 1.1.1.1 any +# 20 remark FIRST REMARK BEFORE SEQUENCE 20 +# 20 remark ============ +# 20 remark ALLOW HOST FROM SEQUENCE 20 +# 20 permit ip host 192.168.0.1 any +# 30 remark FIRST REMARK BEFORE SEQUENCE 30 +# 30 remark ============ +# 30 remark ALLOW HOST FROM SEQUENCE 30 updated +# 30 permit ip host 2.2.2.2 any +# 40 remark FIRST REMARK BEFORE SEQUENCE 40 +# 40 remark ============ +# 40 remark ALLOW NEW HOST FROM SEQUENCE 40 +# 40 permit ip host 3.3.3.3 any +# remark Remark not specific to sequence +# remark ============ +# remark End Remarks 1 # Using deleted - delete ACL(s) diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_bgp.py b/ansible_collections/cisco/ios/plugins/modules/ios_bgp.py deleted file mode 100644 index b01f99428..000000000 --- a/ansible_collections/cisco/ios/plugins/modules/ios_bgp.py +++ /dev/null @@ -1,504 +0,0 @@ -#!/usr/bin/python -# -# 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 = """ -module: ios_bgp -author: Nilashish Chakraborty (@NilashishC) -short_description: Module to configure BGP protocol settings. -description: - - This module provides configuration management of global BGP parameters on devices - running Cisco IOS -version_added: 1.0.0 -deprecated: - alternative: ios_bgp_global - why: Newer and updated modules released with more functionality - removed_at_date: "2023-08-24" -notes: - - Tested against Cisco IOS Version 15.6(3)M2 -options: - config: - description: - - Specifies the BGP related configuration. - type: dict - suboptions: - bgp_as: - description: - - Specifies the BGP Autonomous System (AS) number to configure on the device. - type: int - required: true - router_id: - description: - - Configures the BGP routing process router-id value. - type: str - default: - log_neighbor_changes: - description: - - Enable/disable logging neighbor up/down and reset reason. - type: bool - neighbors: - description: - - Specifies BGP neighbor related configurations. - type: list - elements: dict - suboptions: - neighbor: - description: - - Neighbor router address. - required: true - type: str - remote_as: - description: - - Remote AS of the BGP neighbor to configure. - type: int - required: true - update_source: - description: - - Source of the routing updates. - type: str - password: - description: - - Password to authenticate the BGP peer connection. - type: str - enabled: - description: - - Administratively shutdown or enable a neighbor. - type: bool - description: - description: - - Neighbor specific description. - type: str - ebgp_multihop: - description: - - Specifies the maximum hop count for EBGP neighbors not on directly connected - networks. - - The range is from 1 to 255. - type: int - peer_group: - description: - - Name of the peer group that the neighbor is a member of. - type: str - timers: - description: - - Specifies BGP neighbor timer related configurations. - type: dict - suboptions: - keepalive: - description: - - Frequency (in seconds) with which the device sends keepalive messages - to its peer. - - The range is from 0 to 65535. - type: int - required: true - holdtime: - description: - - Interval (in seconds) after not receiving a keepalive message that - IOS declares a peer dead. - - The range is from 0 to 65535. - type: int - required: true - min_neighbor_holdtime: - description: - - Interval (in seconds) specifying the minimum acceptable hold-time - from a BGP neighbor. - - The minimum acceptable hold-time must be less than, or equal to, - the interval specified in the holdtime argument. - - The range is from 0 to 65535. - type: int - local_as: - description: - - The local AS number for the neighbor. - type: int - networks: - description: - - Specify Networks to announce via BGP. - - For operation replace, this option is mutually exclusive with networks option - under address_family. - - For operation replace, if the device already has an address family activated, - this option is not allowed. - type: list - elements: dict - suboptions: - prefix: - description: - - Network ID to announce via BGP. - required: true - type: str - masklen: - description: - - Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.). - type: int - route_map: - description: - - Route map to modify the attributes. - type: str - address_family: - description: - - Specifies BGP address family related configurations. - type: list - elements: dict - suboptions: - afi: - description: - - Type of address family to configure. - choices: - - ipv4 - - ipv6 - required: true - type: str - safi: - description: - - Specifies the type of cast for the address family. - choices: - - flowspec - - unicast - - multicast - - labeled-unicast - default: unicast - type: str - synchronization: - description: - - Enable/disable IGP synchronization. - type: bool - auto_summary: - description: - - Enable/disable automatic network number summarization. - type: bool - redistribute: - description: - - Specifies the redistribute information from another routing protocol. - type: list - elements: dict - suboptions: - protocol: - description: - - Specifies the protocol for configuring redistribute information. - choices: - - ospf - - ospfv3 - - eigrp - - isis - - static - - connected - - odr - - lisp - - mobile - - rip - required: true - type: str - id: - description: - - Identifier for the routing protocol for configuring redistribute - information. - - Valid for protocols 'ospf', 'ospfv3' and 'eigrp'. - type: str - metric: - description: - - Specifies the metric for redistributed routes. - type: int - route_map: - description: - - Specifies the route map reference. - type: str - networks: - description: - - Specify Networks to announce via BGP. - - For operation replace, this option is mutually exclusive with root level - networks option. - type: list - elements: dict - suboptions: - prefix: - description: - - Network ID to announce via BGP. - required: true - type: str - masklen: - description: - - Subnet mask length for the Network to announce(e.g, 8, 16, 24, etc.). - type: int - route_map: - description: - - Route map to modify the attributes. - type: str - neighbors: - description: - - Specifies BGP neighbor related configurations in Address Family configuration - mode. - type: list - elements: dict - suboptions: - neighbor: - description: - - Neighbor router address. - required: true - type: str - advertisement_interval: - description: - - Minimum interval between sending BGP routing updates for this neighbor. - type: int - route_reflector_client: - description: - - Specify a neighbor as a route reflector client. - type: bool - route_server_client: - description: - - Specify a neighbor as a route server client. - type: bool - activate: - description: - - Enable the Address Family for this Neighbor. - type: bool - remove_private_as: - description: - - Remove the private AS number from outbound updates. - type: bool - next_hop_self: - description: - - Enable/disable the next hop calculation for this neighbor. - type: bool - next_hop_unchanged: - description: - - Propagate next hop unchanged for iBGP paths to this neighbor. - type: bool - maximum_prefix: - description: - - Maximum number of prefixes to accept from this peer. - - The range is from 1 to 2147483647. - type: int - prefix_list_in: - description: - - Name of ip prefix-list to apply to incoming prefixes. - type: str - prefix_list_out: - description: - - Name of ip prefix-list to apply to outgoing prefixes. - type: str - operation: - description: - - Specifies the operation to be performed on the BGP process configured on the - device. - - In case of merge, the input configuration will be merged with the existing BGP - configuration on the device. - - In case of replace, if there is a diff between the existing configuration and - the input configuration, the existing configuration will be replaced by the - input configuration for every option that has the diff. - - In case of override, all the existing BGP configuration will be removed from - the device and replaced with the input configuration. - - In case of delete the existing BGP configuration will be removed from the device. - default: merge - type: str - choices: - - merge - - replace - - override - - delete - -""" - -EXAMPLES = """ -- name: Configure global bgp as 64496 - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - router_id: 192.0.2.1 - log_neighbor_changes: true - neighbors: - - neighbor: 203.0.113.5 - remote_as: 64511 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 198.51.100.2 - remote_as: 64498 - networks: - - prefix: 198.51.100.0 - route_map: RMAP_1 - - prefix: 192.0.2.0 - masklen: 23 - address_family: - - afi: ipv4 - safi: unicast - redistribute: - - protocol: ospf - id: 223 - metric: 10 - operation: merge - -- name: Configure BGP neighbors - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - password: ansible - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - operation: merge - -- name: Configure root-level networks for BGP - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - operation: merge - -- name: Configure BGP neighbors under address family mode - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: unicast - neighbors: - - neighbor: 203.0.113.10 - activate: true - maximum_prefix: 250 - advertisement_interval: 120 - - neighbor: 192.0.2.15 - activate: true - route_reflector_client: true - operation: merge - -- name: Remove bgp as 64496 from config - cisco.ios.ios_bgp: - config: - bgp_as: 64496 - operation: delete -""" - -RETURN = """ -commands: - description: The list of configuration mode commands to send to the device - returned: always - type: list - sample: - - router bgp 64496 - - bgp router-id 192.0.2.1 - - bgp log-neighbor-changes - - neighbor 203.0.113.5 remote-as 64511 - - neighbor 203.0.113.5 timers 300 360 360 - - neighbor 198.51.100.2 remote-as 64498 - - network 198.51.100.0 route-map RMAP_1 - - network 192.0.2.0 mask 255.255.254.0 - - address-family ipv4 - - redistribute ospf 223 metric 70 - - exit-address-family -""" -from ansible.module_utils._text import to_text - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.process import ( - REDISTRIBUTE_PROTOCOLS, -) -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.module import ( - NetworkModule, -) - - -def main(): - """main entry point for module execution""" - network_spec = {"prefix": dict(required=True), "masklen": dict(type="int"), "route_map": dict()} - redistribute_spec = { - "protocol": dict(choices=REDISTRIBUTE_PROTOCOLS, required=True), - "id": dict(), - "metric": dict(type="int"), - "route_map": dict(), - } - timer_spec = { - "keepalive": dict(type="int", required=True), - "holdtime": dict(type="int", required=True), - "min_neighbor_holdtime": dict(type="int"), - } - neighbor_spec = { - "neighbor": dict(required=True), - "remote_as": dict(type="int", required=True), - "local_as": dict(type="int"), - "update_source": dict(), - "password": dict(no_log=True), - "enabled": dict(type="bool"), - "description": dict(), - "ebgp_multihop": dict(type="int"), - "timers": dict(type="dict", options=timer_spec), - "peer_group": dict(), - } - af_neighbor_spec = { - "neighbor": dict(required=True), - "activate": dict(type="bool"), - "advertisement_interval": dict(type="int"), - "remove_private_as": dict(type="bool"), - "next_hop_self": dict(type="bool"), - "next_hop_unchanged": dict(type="bool"), - "route_reflector_client": dict(type="bool"), - "route_server_client": dict(type="bool"), - "maximum_prefix": dict(type="int"), - "prefix_list_in": dict(), - "prefix_list_out": dict(), - } - address_family_spec = { - "afi": dict(choices=["ipv4", "ipv6"], required=True), - "safi": dict( - choices=["flowspec", "labeled-unicast", "multicast", "unicast"], - default="unicast", - ), - "auto_summary": dict(type="bool"), - "synchronization": dict(type="bool"), - "networks": dict(type="list", elements="dict", options=network_spec), - "redistribute": dict(type="list", elements="dict", options=redistribute_spec), - "neighbors": dict(type="list", elements="dict", options=af_neighbor_spec), - } - config_spec = { - "bgp_as": dict(type="int", required=True), - "router_id": dict(), - "log_neighbor_changes": dict(type="bool"), - "neighbors": dict(type="list", elements="dict", options=neighbor_spec), - "address_family": dict(type="list", elements="dict", options=address_family_spec), - "networks": dict(type="list", elements="dict", options=network_spec), - } - argument_spec = { - "config": dict(type="dict", options=config_spec), - "operation": dict(default="merge", choices=["merge", "replace", "override", "delete"]), - } - module = NetworkModule(argument_spec=argument_spec, supports_check_mode=True) - try: - result = module.edit_config(config_filter="| section ^router bgp") - except Exception as exc: - module.fail_json(msg=to_text(exc)) - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py index 14589f20f..e9f770631 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_address_family.py @@ -22,7 +22,7 @@ author: - Sagar Paul (@KB-perByte) - Sumit Jaiswal (@justjais) notes: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) - The module examples uses callback plugin (stdout_callback = yaml) to generate task diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py index 9aa33c87c..55ab21341 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_bgp_global.py @@ -22,7 +22,7 @@ author: - Sumit Jaiswal (@justjais) - Sagar Paul (@KB-perByte) notes: - - Tested against Cisco IOSXE Version 17.3 on CML. + - Tested against Cisco IOS-XE Version 17.3 on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) - The module examples uses callback plugin (stdout_callback = yaml) to generate task @@ -274,6 +274,22 @@ options: - Set the bgp consistency checker - Please refer vendor documentation for valid values type: int + default: + description: Configure BGP defaults + type: dict + suboptions: + ipv4_unicast: + description: Activate ipv4-unicast for a peer by default + type: bool + default: true + route_target: + description: Control behavior based on Route-Target attributes + type: dict + suboptions: + filter: + description: Control automatic VPN Route-Target filtering + type: bool + default: true dampening: description: Enable route-flap dampening type: dict @@ -1795,8 +1811,6 @@ options: template: description: - Enter template command mode - - This option is DEPRECATED as is not valid within the scope of module, - this attribute will be removed after 2024-06-01. type: dict suboptions: peer_policy: @@ -1883,6 +1897,10 @@ EXAMPLES = """ reuse_route_val: 1 suppress_route_val: 1 max_suppress: 1 + default: + ipv4_unicast: false + route_target: + filter: true graceful_shutdown: neighbors: time: 50 @@ -1926,6 +1944,7 @@ EXAMPLES = """ # - timers bgp 100 200 150 # - bgp advertise-best-external # - bgp bestpath compare-routerid +# - no bgp default ipv4-unicast # - bgp dampening 1 1 1 1 # - bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 # - bgp log-neighbor-changes @@ -1948,6 +1967,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: false +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -1987,6 +2010,7 @@ EXAMPLES = """ # # vios#sh running-config | section ^router bgp # router bgp 65000 +# no bgp default ipv4-unicast # bgp log-neighbor-changes # bgp nopeerup-delay post-boot 10 # bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 @@ -2059,6 +2083,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -2106,6 +2134,10 @@ EXAMPLES = """ # bestpath_options: # med: # confed: true +# default: +# ipv4_unicast: true +# route_target: +# filter: true # log_neighbor_changes: true # nopeerup_delay_options: # cold_boot: 20 @@ -2172,6 +2204,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -2247,6 +2283,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 @@ -2318,6 +2358,10 @@ EXAMPLES = """ # advertise_best_external: true # bestpath_options: # compare_routerid: true +# default: +# ipv4_unicast: true +# route_target: +# filter: true # dampening: # max_suppress: 1 # penalty_half_time: 1 @@ -2394,6 +2438,10 @@ EXAMPLES = """ # penalty_half_time: 1 # reuse_route_val: 1 # suppress_route_val: 1 +# default: +# ipv4_unicast: true +# route_target: +# filter: true # graceful_shutdown: # community: '100' # local_preference: 100 diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py index c2b8b330e..2b232e3f1 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_evi.py @@ -21,7 +21,7 @@ description: This module provides declarative management of L2VPN EVPN EVI on Ci version_added: 5.3.0 author: Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) options: diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py index 0ffe52b90..9070df49d 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_evpn_global.py @@ -21,7 +21,7 @@ description: This module provides declarative management of L2VPN EVPN on Cisco version_added: 5.3.0 author: Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) options: diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py b/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py index 0f6924124..f8bf73f80 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_l3_interfaces.py @@ -40,6 +40,14 @@ options: - Full name of the interface excluding any logical unit number, i.e. GigabitEthernet0/1. type: str required: true + autostate: + description: + - Enable autostate determination for VLAN. + type: bool + mac_address: + description: + - Manually set interface MAC address. + type: str ipv4: description: - IPv4 address to be set for the Layer-3 interface mentioned in I(name) option. @@ -87,6 +95,19 @@ options: pool: description: IP Address auto-configured from a local DHCP pool. type: str + source_interface: + description: Enable IP processing without an explicit address + type: dict + suboptions: + name: + description: Interface name + type: str + poll: + description: Enable IP connected host polling + type: bool + point_to_point: + description: Enable point-to-point connection + type: bool ipv6: description: - IPv6 address to be set for the Layer-3 interface mentioned in I(name) option. @@ -119,6 +140,9 @@ options: rapid_commit: description: Enable Rapid-Commit. type: bool + enable: + description: Enable IPv6 on interface + type: bool anycast: description: Configure as an anycast type: bool @@ -229,6 +253,13 @@ EXAMPLES = """ - name: GigabitEthernet3.100 ipv4: - address: 192.168.0.3/24 + - name: Vlan901 + autostate: false + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true state: merged # Task Output @@ -253,6 +284,10 @@ EXAMPLES = """ # - ipv6 address fd5d:12c9:2201:1::1/64 # - interface GigabitEthernet3.100 # - ip address 192.168.0.3 255.255.255.0 +# - interface Vlan901 +# - ip unnumbered Loopback1 +# - ipv6 enable +# - no autostate # after: # - ipv4: # - dhcp: @@ -269,6 +304,13 @@ EXAMPLES = """ # - address: 192.168.0.3/24 # - name: GigabitEthernet4 # - name: Loopback999 +# ipv4: +# - source_interface: +# name: Loopback1 +# ipv6: +# - enable: true +# autostate: false +# - name: Vlan901 # After state: # ------------ @@ -299,6 +341,11 @@ EXAMPLES = """ # no ip address # shutdown # negotiation auto +# interface Vlan901 +# ip unnumbered Loopback1 +# ipv6 enable +# no autostate + # Using replaced diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py b/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py index 4572afe42..01267865f 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_linkagg.py @@ -265,11 +265,11 @@ def parse_mode(module, config, group, member): def parse_members(module, config, group): members = [] for line in config.strip().split("!"): - l = line.strip() - if l.startswith("interface"): - match_group = re.findall("channel-group {0} mode".format(group), l, re.M) + lineStrip = line.strip() + if lineStrip.startswith("interface"): + match_group = re.findall("channel-group {0} mode".format(group), lineStrip, re.M) if match_group: - match = re.search("interface (\\S+)", l, re.M) + match = re.search("interface (\\S+)", lineStrip, re.M) if match: members.append(match.group(1)) return members @@ -291,8 +291,8 @@ def map_config_to_obj(module): objs = list() config = get_config(module) for line in config.split("\n"): - l = line.strip() - match = re.search("interface Port-channel(\\S+)", l, re.M) + lStrip = line.strip() + match = re.search("interface Port-channel(\\S+)", lStrip, re.M) if match: obj = {} group = match.group(1) diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_ntp.py b/ansible_collections/cisco/ios/plugins/modules/ios_ntp.py deleted file mode 100644 index 065054411..000000000 --- a/ansible_collections/cisco/ios/plugins/modules/ios_ntp.py +++ /dev/null @@ -1,357 +0,0 @@ -#!/usr/bin/python -# -# 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 = """ -module: ios_ntp -extends_documentation_fragment: - - cisco.ios.ios -short_description: (deprecated, removed after 2024-01-01) Manages core NTP configuration. -description: - - Manages core NTP configuration. -version_added: 1.0.0 -deprecated: - alternative: ios_ntp_global - why: Updated module released with more functionality. - removed_at_date: "2024-01-01" -author: - - Federico Olivieri (@Federico87) - - Joanie Sylvain (@JoanieAda) -options: - server: - description: - - Network address of NTP server. - type: str - source_int: - description: - - Source interface for NTP packets. - type: str - acl: - description: - - ACL for peer/server access restricition. - type: str - logging: - description: - - Enable NTP logs. Data type boolean. - type: bool - default: false - auth: - description: - - Enable NTP authentication. Data type boolean. - type: bool - default: false - auth_key: - description: - - md5 NTP authentication key of tye 7. - type: str - key_id: - description: - - auth_key id. Data type string - type: str - state: - description: - - Manage the state of the resource. - default: present - choices: - - present - - absent - type: str - vrf: - description: - - VRF configuration for NTP servers - type: str -""" - -EXAMPLES = """ -# Set new NTP server and source interface -- name: Example ntp play - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - logging: false - state: present - -# Remove NTP ACL and logging -- name: Example ntp play absent - cisco.ios.ios_ntp: - acl: NTP_ACL - logging: true - state: absent - -# Set NTP authentication -- name: Example ntp play auth - cisco.ios.ios_ntp: - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present - -# Set new NTP configuration -- name: Example ntp play auth - cisco.ios.ios_ntp: - server: 10.0.255.10 - source_int: Loopback0 - acl: NTP_ACL - logging: true - vrf: mgmt - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: present -""" - -RETURN = """ -commands: - description: command sent to the device - returned: always - type: list - sample: ["no ntp server 10.0.255.10", "no ntp source Loopback0"] -""" - -import re - -from ansible.module_utils.basic import AnsibleModule - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.ios import ( - get_config, - load_config, -) - - -def parse_server(line, dest): - if dest == "server": - vrf, server = None, None - match = re.search( - "(ntp\\sserver\\s)(vrf\\s\\w+\\s)?(\\d+\\.\\d+\\.\\d+\\.\\d+)", - line, - re.M, - ) - - if match and match.group(2) and match.group(3): - vrf = match.group(2) - server = match.group(3) - return vrf, server - - if match and match.group(3): - server = match.group(3) - return vrf, server - - -def parse_source_int(line, dest): - if dest == "source": - match = re.search("(ntp\\ssource\\s)(\\S+)", line, re.M) - if match: - source = match.group(2) - return source - - -def parse_acl(line, dest): - if dest == "access-group": - match = re.search("ntp\\saccess-group\\s(?:peer|serve)(?:\\s+)(\\S+)", line, re.M) - if match: - acl = match.group(1) - return acl - - -def parse_logging(line, dest): - if dest == "logging": - logging = dest - return logging - - -def parse_auth_key(line, dest): - if dest == "authentication-key": - match = re.search("(ntp\\sauthentication-key\\s\\d+\\smd5\\s)(\\w+)", line, re.M) - if match: - auth_key = match.group(2) - return auth_key - - -def parse_key_id(line, dest): - if dest == "trusted-key": - match = re.search("(ntp\\strusted-key\\s)(\\d+)", line, re.M) - if match: - auth_key = match.group(2) - return auth_key - - -def parse_auth(dest): - if dest == "authenticate": - return dest - - -def map_config_to_obj(module): - obj_dict = dict() - obj = list() - server_list = list() - config = get_config(module, flags=["| include ntp"]) - for line in config.splitlines(): - match = re.search("ntp\\s(\\S+)", line, re.M) - - if match: - dest = match.group(1) - server = parse_server(line, dest) - source_int = parse_source_int(line, dest) - acl = parse_acl(line, dest) - logging = parse_logging(line, dest) - auth = parse_auth(dest) - auth_key = parse_auth_key(line, dest) - key_id = parse_key_id(line, dest) - - if server: - if server[0] is None: - server_list.append((server[0], server[1])) - else: - server_list.append((server[0].split()[1], server[1])) - if source_int: - obj_dict["source_int"] = source_int - if acl: - obj_dict["acl"] = acl - if logging: - obj_dict["logging"] = True - if auth: - obj_dict["auth"] = True - if auth_key: - obj_dict["auth_key"] = auth_key - if key_id: - obj_dict["key_id"] = key_id - obj_dict["server"] = server_list - obj.append(obj_dict) - return obj - - -def map_params_to_obj(module): - obj = list() - - obj.append( - { - "state": module.params["state"], - "server": module.params["server"], - "source_int": module.params["source_int"], - "logging": module.params["logging"], - "acl": module.params["acl"], - "auth": module.params["auth"], - "auth_key": module.params["auth_key"], - "key_id": module.params["key_id"], - "vrf": module.params["vrf"], - }, - ) - - return obj - - -def map_obj_to_commands(want, have, module): - commands = list() - - server_have = have[0].get("server", None) - source_int_have = have[0].get("source_int", None) - acl_have = have[0].get("acl", None) - logging_have = have[0].get("logging", None) - auth_have = have[0].get("auth", None) - auth_key_have = have[0].get("auth_key", None) - key_id_have = have[0].get("key_id", None) - - for w in want: - server = w["server"] - source_int = w["source_int"] - acl = w["acl"] - logging = w["logging"] - state = w["state"] - auth = w["auth"] - auth_key = w["auth_key"] - key_id = w["key_id"] - vrf = w["vrf"] - if vrf == "": - vrf = None - - if state == "absent": - if server_have and (vrf, server) in server_have: - if vrf is not None: - commands.append("no ntp server vrf {0} {1}".format(vrf, server)) - else: - commands.append("no ntp server {0}".format(server)) - if source_int and source_int_have: - commands.append("no ntp source {0}".format(source_int)) - if acl and acl_have: - commands.append("no ntp access-group peer {0}".format(acl)) - if logging is True and logging_have: - commands.append("no ntp logging") - if auth is True and auth_have: - commands.append("no ntp authenticate") - if key_id and key_id_have: - commands.append("no ntp trusted-key {0}".format(key_id)) - if auth_key and auth_key_have: - if key_id and key_id_have: - commands.append( - "no ntp authentication-key {0} md5 {1} 7".format(key_id, auth_key), - ) - elif state == "present": - if server is not None and (vrf, server) not in server_have: - if vrf is not None: - commands.append("ntp server vrf {0} {1}".format(vrf, server)) - else: - commands.append("ntp server {0}".format(server)) - if source_int is not None and source_int != source_int_have: - commands.append("ntp source {0}".format(source_int)) - if acl is not None and acl != acl_have: - commands.append("ntp access-group peer {0}".format(acl)) - if logging is not None and logging != logging_have and logging is not False: - commands.append("ntp logging") - if auth is not None and auth != auth_have and auth is not False: - commands.append("ntp authenticate") - if key_id is not None and key_id != key_id_have: - commands.append("ntp trusted-key {0}".format(key_id)) - if auth_key is not None and auth_key != auth_key_have: - if key_id is not None: - commands.append("ntp authentication-key {0} md5 {1} 7".format(key_id, auth_key)) - return commands - - -def main(): - argument_spec = dict( - server=dict(), - source_int=dict(), - acl=dict(), - logging=dict(type="bool", default=False), - auth=dict(type="bool", default=False), - auth_key=dict(no_log=True), - key_id=dict(), - state=dict(choices=["absent", "present"], default="present"), - vrf=dict(), - ) - module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=True) - result = {"changed": False} - warnings = list() - if warnings: - result["warnings"] = warnings - want = map_params_to_obj(module) - have = map_config_to_obj(module) - commands = map_obj_to_commands(want, have, module) - result["commands"] = commands - if commands: - if not module.check_mode: - load_config(module, commands) - result["changed"] = True - module.exit_json(**result) - - -if __name__ == "__main__": - main() diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_user.py b/ansible_collections/cisco/ios/plugins/modules/ios_user.py index 50f2f3455..931ed0e71 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_user.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_user.py @@ -220,6 +220,17 @@ extends_documentation_fragment: """ EXAMPLES = """ +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username testuser privilege 15 password 0 password + +# Present state create a new user play: +# ------------------------------------- + - name: Create a new user cisco.ios.ios_user: name: ansible @@ -227,6 +238,37 @@ EXAMPLES = """ sshkey: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}" state: present +# Task Output +# ----------- + +# commands: +# - ip ssh pubkey-chain +# - username ansible +# - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora +# - exit +# - exit +# - username ansible nopassword + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username testuser privilege 15 password 0 password +# username ansible nopassword +# username ansible +# key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username testuser privilege 15 password 0 password + +# Present state create a new user with multiple keys play: +# -------------------------------------------------------- + - name: Create a new user with multiple keys cisco.ios.ios_user: name: ansible @@ -235,18 +277,109 @@ EXAMPLES = """ - "{{ lookup('file', '~/path/to/public_key') }}" state: present +# Task Output +# ----------- + +# commands: +# - ip ssh pubkey-chain +# - username ansible +# - key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora +# - key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora +# - exit +# - exit + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username testuser privilege 15 password 0 password +# username ansible +# key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora +# key-hash ssh-rsa 1985673DCF7FA9A0F374BB97DC2ABB27 test@fedora + +# Using Purge: true + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username testuser privilege 15 password 0 password +# username ansible nopassword +# username ansible +# key-hash ssh-rsa 2ABB27BBC33ED53EF7D55037952ABB27 test@fedora + +# Purge all users except admin play: +# ---------------------------------- + - name: Remove all users except admin cisco.ios.ios_user: purge: true +# Task Output +# ----------- + +# commands: +# - no username testuser +# - no username ansible +# - ip ssh pubkey-chain +# - no username ansible +# - exit + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password + +# Using Purge: true + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username testuser privilege 15 password 0 password1 +# username testuser1 privilege 15 password 0 password2 +# username ansible nopassword + +# Purge all users except admin and these listed users play: +# --------------------------------------------------------- + - name: Remove all users except admin and these listed users cisco.ios.ios_user: aggregate: + - name: testuser - name: testuser1 - - name: testuser2 - - name: testuser3 purge: true +# Task Output +# ----------- + +# commands: +# - no username ansible + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username testuser privilege 15 password 0 password1 +# username testuser1 privilege 15 password 0 password2 + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username netop password 0 password1 +# username netend password 0 password2 + +# Present state set multiple users to privilege level 15 play: +# ------------------------------------------------------------ + - name: Set multiple users to privilege level 15 cisco.ios.ios_user: aggregate: @@ -255,38 +388,135 @@ EXAMPLES = """ privilege: 15 state: present -- name: Set user view/role - cisco.ios.ios_user: - name: netop - view: network-operator - state: present +# Task Output +# ----------- + +# commands: +# - username netop privilege 15 +# - username netend privilege 15 + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 password1 +# username netend privilege 15 password 0 password2 + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 oldpassword + +# Present state Change Password for User netop play: +# -------------------------------------------- - name: Change Password for User netop cisco.ios.ios_user: name: netop - configured_password: "{{ new_password }}" + configured_password: "newpassword" + password_type: password update_password: always state: present -- name: Aggregate of users +# Task Output +# ----------- + +# commands: +# - username netop password newpassword + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 newpassword + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username netop privilege 15 password 0 password +# username netend privilege 15 password 0 password + +# Present state set user view/role for users play: +# -------------------------------------------- + +- name: Set user view/role for users cisco.ios.ios_user: aggregate: - - name: ansibletest2 - - name: ansibletest3 + - name: netop + - name: netend view: network-admin + state: present -- name: Add a user specifying password type - cisco.ios.ios_user: - name: ansibletest4 - configured_password: "{{ new_password }}" - password_type: password +# Task Output +# ----------- + +# commands: +# - username netop view network-admin +# - username netend view network-admin + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username netop privilege 15 view network-admin password 0 password +# username netend privilege 15 view network-admin password 0 password + +# Using state: present + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password + +# Present state create a new user with hashed password play: +# -------------------------------------------------------------- -- name: Add a user with MD5 hashed password +- name: Create a new user with hashed password cisco.ios.ios_user: name: ansibletest5 hashed_password: - type: 5 - value: $3$8JcDilcYgFZi.yz4ApaqkHG2.8/ + type: 9 + value: "thiswillbereplacedwithhashedpassword" + state: present + +# Task Output +# ----------- + +# commands: +# - username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password +# username ansibletest5 secret 9 thiswillbereplacedwithhashedpassword + +# Using state: absent + +# Before state: +# ------------- + +# router-ios#show running-config | section ^username +# username admin privilege 15 password 0 password +# username ansibletest1 password 0 password +# username ansibletest2 secret 9 thiswillbereplacedwithhashedpassword +# username ansibletest3 password 5 thistoowillbereplacedwithhashedpassword + +# Absent state remove multiple users play: +# ---------------------------------------- - name: Delete users with aggregate cisco.ios.ios_user: @@ -295,6 +525,20 @@ EXAMPLES = """ - name: ansibletest2 - name: ansibletest3 state: absent + +# Task Output +# ----------- + +# commands: +# - no username ansibletest1 +# - no username ansibletest2 +# - no username ansibletest3 + +# After state: +# ------------ + +# router-ios#show running-config | section username +# username admin privilege 15 password 0 password """ RETURN = """ @@ -339,6 +583,18 @@ def user_del_cmd(username): } +def add_ssh(command, want, x=None): + command.append("ip ssh pubkey-chain") + if x: + command.append("username %s" % want["name"]) + for item in x: + command.append("key-hash %s" % item) + command.append("exit") + else: + command.append("no username %s" % want["name"]) + command.append("exit") + + def sshkey_fingerprint(sshkey): # IOS will accept a MD5 fingerprint of the public key # and is easier to configure in a single line @@ -366,19 +622,10 @@ def map_obj_to_commands(updates, module): def add(command, want, x): command.append("username %s %s" % (want["name"], x)) - def add_hashed_password(command, want, x): - command.append("username %s secret %s %s" % (want["name"], x.get("type"), x.get("value"))) - - def add_ssh(command, want, x=None): - command.append("ip ssh pubkey-chain") - if x: - command.append("username %s" % want["name"]) - for item in x: - command.append("key-hash %s" % item) - command.append("exit") - else: - command.append("no username %s" % want["name"]) - command.append("exit") + def add_hashed_password(command, want, x, password_type): + command.append( + "username %s %s %s %s" % (want["name"], password_type, x.get("type"), x.get("value")), + ) for update in updates: want, have = update @@ -402,7 +649,7 @@ def map_obj_to_commands(updates, module): ) add(commands, want, "%s %s" % (password_type, want["configured_password"])) if needs_update(want, have, "hashed_password"): - add_hashed_password(commands, want, want["hashed_password"]) + add_hashed_password(commands, want, want["hashed_password"], password_type) if needs_update(want, have, "nopassword"): if want["nopassword"]: add(commands, want, "nopassword") @@ -451,6 +698,7 @@ def map_config_to_obj(module): regex = "username %s .+$" % user cfg = re.findall(regex, data, re.M) cfg = "\n".join(cfg) + ssh_key_list = parse_sshkey(data, user) obj = { "name": user, "state": "present", @@ -458,7 +706,9 @@ def map_config_to_obj(module): "configured_password": None, "hashed_password": None, "password_type": parse_password_type(cfg), - "sshkey": parse_sshkey(data, user), + "sshkey": ssh_key_list, + "is_only_ssh_user": False if cfg.strip() and ssh_key_list else True, + "is_only_normal_user": True if cfg.strip() and ssh_key_list == [] else False, "privilege": parse_privilege(cfg), "view": parse_view(cfg), } @@ -536,6 +786,14 @@ def update_objects(want, have): return updates +def find_set_difference(list1, list2, key): + want_users = [x[key] for x in list1] + have_users = [x[key] for x in list2] + setdifference = set(have_users).difference(want_users) + result = [item for item in list2 if item[key] in setdifference] + return result + + def main(): """main entry point for module execution""" hashed_password_spec = dict( @@ -581,13 +839,19 @@ def main(): result = {"changed": False, "warnings": warnings} want = map_params_to_obj(module) have = map_config_to_obj(module) + commands = map_obj_to_commands(update_objects(want, have), module) if module.params["purge"]: - want_users = [x["name"] for x in want] - have_users = [x["name"] for x in have] - for item in set(have_users).difference(want_users): - if item != "admin": - commands.append(user_del_cmd(item)) + setdifference = find_set_difference(want, have, "name") + for item in setdifference: + if item["name"] != "admin": + if item["is_only_ssh_user"]: + add_ssh(commands, item) + if item["is_only_normal_user"]: + commands.append(user_del_cmd(item["name"])) + if item["is_only_normal_user"] is False and item["is_only_ssh_user"] is False: + add_ssh(commands, item) + commands.append(user_del_cmd(item["name"])) result["commands"] = commands if commands: if not module.check_mode: diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py b/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py index 1dd3228ce..de9a0212a 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_vlans.py @@ -30,9 +30,12 @@ description: This module provides declarative management of VLANs on Cisco IOS network devices. version_added: 1.0.0 -author: Sumit Jaiswal (@justjais) +author: + - Sumit Jaiswal (@justjais) + - Sagar Paul (@KB-perByte) + - Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOSl2 device with Version 15.2 on VIRL. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - Starting from v2.5.0, this module will fail when run against Cisco IOS devices that do not support VLANs. The offline states (C(rendered) and C(parsed)) will work as expected. - This module works with connection C(network_cli). @@ -118,10 +121,6 @@ options: transforms it into Ansible structured data as per the resource module's argspec and the value is then returned in the I(parsed) key within the result. type: str - configuration: - description: - When set to true, deals with vlan configuration CLIs - type: bool state: description: - The state the configuration should be left in @@ -137,8 +136,8 @@ options: - The state I(parsed) reads the configuration from C(running_config) option and transforms it into JSON format as per the resource module parameters and the value is returned in the I(parsed) key within the result. The value of C(running_config) - option should be the same format as the output of command I(show running-config - | include ip route|ipv6 route) executed on device. For state I(parsed) active + option should be the same format as the output of commands I(show vlan) and I(show + running-config | sec ^vlan configuration .+) executed on device. For state I(parsed) active connection to remote host is not required. type: str choices: @@ -148,6 +147,7 @@ options: - deleted - rendered - gathered + - purged - parsed default: merged """ @@ -224,7 +224,7 @@ EXAMPLES = """ # ------------------------------------------------------------------------------ # 10 -# Using merged (configuration: True) +# Using merged # Before state: # ------------- @@ -246,7 +246,6 @@ EXAMPLES = """ - vlan_id: 901 member: vni: 50901 - configuration: true state: merged # After state: @@ -325,7 +324,7 @@ EXAMPLES = """ # 1005 trnet 101005 1500 - - - ibm - 0 0 -# Using overridden (configuration: True) +# Using overridden # Before state: # ------------- @@ -351,7 +350,6 @@ EXAMPLES = """ member: vni: 10101 evi: 101 - configuration: true state: overridden # After state: @@ -523,7 +521,7 @@ EXAMPLES = """ # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 -# Using deleted (configuration: True) +# Using deleted # Before state: # ------------- @@ -542,13 +540,13 @@ EXAMPLES = """ cisco.ios.ios_vlans: config: - vlan_id: 101 - configuration: true state: deleted # After state: # ------------- # # Leaf-01#show run nve | sec ^vlan configuration +# vlan configuration 101 # vlan configuration 102 # member evpn-instance 102 vni 10102 # vlan configuration 201 @@ -613,7 +611,7 @@ EXAMPLES = """ # 1004 fdnet 101004 1500 - - - ieee - 0 0 # 1005 trnet 101005 1500 - - - ibm - 0 0 -# Using Deleted without any config passed (configuration: True) +# Using Deleted without any config passed # "(NOTE: This will delete all of configured vlans attributes)" # Before state: @@ -633,7 +631,6 @@ EXAMPLES = """ - name: Delete attributes of ALL VLANs cisco.ios.ios_vlans: - configuration: true state: deleted # After state: @@ -647,7 +644,7 @@ EXAMPLES = """ # no vlan configuration 901 # no vlan configuration 902 -# Using Gathered (configuration: True) +# Using gathered, vlan configuration only # Before state: # ------------- @@ -666,8 +663,6 @@ EXAMPLES = """ - name: Gather listed vlans with provided configurations cisco.ios.ios_vlans: - config: - configuration: true state: gathered # Module Execution Result: @@ -757,9 +752,9 @@ EXAMPLES = """ # "shutdown" # ] -# Using Rendered (configuration: True) +# Using Rendered -- name: Render the commands for provided configuration +- name: Render the commands for provided configuration cisco.ios.ios_vlans: config: - vlan_id: 101 @@ -876,7 +871,7 @@ EXAMPLES = """ # } # ] -# Using Parsed (configuration: True) +# Using Parsed Vlan configuration only # File: parsed.cfg # ---------------- @@ -891,7 +886,6 @@ EXAMPLES = """ - name: Parse the commands for provided configuration cisco.ios.ios_vlans: running_config: "{{ lookup('file', './parsed.cfg') }}" - configuration: true state: parsed # Module Execution Result: @@ -919,29 +913,177 @@ EXAMPLES = """ # "vlan_id": 901 # } # ] + +# Using Parsed, Vlan and vlan configuration + +# File: parsed.cfg +# ---------------- +# +# VLAN Name Status Ports +# ---- -------------------------------- --------- ------------------------------- +# 1 default active Gi0/1, Gi0/2 +# 101 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 +# Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 +# Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 +# Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 +# Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 +# 150 VLAN0150 active +# 888 a_very_long_vlan_name_a_very_long_vlan_name +# active +# 1002 fddi-default act/unsup +# 1003 trcrf-default act/unsup +# 1004 fddinet-default act/unsup +# 1005 trbrf-default act/unsup +# +# VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 +# ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ +# 1 enet 100001 1500 - - - - - 0 0 +# 101 enet 100101 610 - - - - - 0 0 +# 150 enet 100150 1500 - - - - - 0 0 +# 888 enet 100888 1500 - - - - - 0 0 +# 1002 fddi 101002 1500 - - - - - 0 0 +# 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 +# 1004 fdnet 101004 1500 - - - ieee - 0 0 +# 1005 trbrf 101005 4472 - - 15 ibm - 0 0 +# +# +# VLAN AREHops STEHops Backup CRF +# ---- ------- ------- ---------- +# 1003 7 7 off +# +# Remote SPAN VLANs +# ------------------------------------------------------------------------------ +# 150 +# +# Primary Secondary Type Ports +# ------- --------- ----------------- ------------------------------------------ +# +# vlan configuration 101 +# member evpn-instance 101 vni 10101 +# vlan configuration 102 +# member evpn-instance 102 vni 10102 +# vlan configuration 901 +# member vni 50901 + +- name: Parse the commands for provided configuration + cisco.ios.ios_vlans: + running_config: "{{ lookup('file', './parsed.cfg') }}" + state: parsed + +# Module Execution Result: +# ------------------------ +# +# "parsed": [ +# { +# "name": "default", +# "vlan_id": 1, +# "state": "active", +# "shutdown": "disabled", +# "mtu": 1500, +# }, +# { +# "name": "RemoteIsInMyName", +# "vlan_id": 101, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 610, +# "member": {"evi": 101, "vni": 10101}, +# }, +# { +# "name": "VLAN0150", +# "vlan_id": 150, +# "state": "active", +# "shutdown": "disabled", +# "mtu": 1500, +# "remote_span": True, +# }, +# { +# "name": "a_very_long_vlan_name_a_very_long_vlan_name", +# "vlan_id": 888, +# "state": "active", +# "shutdown": "disabled", +# "mtu": 1500, +# }, +# { +# "name": "fddi-default", +# "vlan_id": 1002, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 1500, +# }, +# { +# "name": "trcrf-default", +# "vlan_id": 1003, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 4472, +# }, +# { +# "name": "fddinet-default", +# "vlan_id": 1004, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 1500, +# }, +# { +# "name": "trbrf-default", +# "vlan_id": 1005, +# "state": "active", +# "shutdown": "enabled", +# "mtu": 4472, +# }, +# {"vlan_id": 102, "member": {"evi": 102, "vni": 10102}}, +# {"vlan_id": 901, "member": {"vni": 50901}}, +# ] """ RETURN = """ before: - description: The configuration as structured data prior to module invocation. - returned: always - type: list + description: The configuration prior to the module execution. + returned: when I(state) is C(merged), C(replaced), C(overridden), C(deleted) or C(purged) + type: dict sample: > - The configuration returned will always be in the same format - of the parameters above. + This output will always be in the same format as the + module argspec. after: - description: The configuration as structured data after module completion. + description: The resulting configuration after module execution. returned: when changed - type: list + type: dict sample: > - The configuration returned will always be in the same format - of the parameters above. + This output will always be in the same format as the + module argspec. commands: description: The set of commands pushed to the remote device. - returned: always + returned: when I(state) is C(merged), C(replaced), C(overridden), C(deleted) or C(purged) + type: list + sample: + - vlan configuration 202 + - state active + - remote-span +rendered: + description: The provided configuration in the task rendered in device-native format (offline). + returned: when I(state) is C(rendered) type: list - sample: ['vlan 20', 'name vlan_20', 'mtu 600', 'remote-span'] + sample: + - vlan configuration 202 + - member evpn-instance 202 vni 10202 + - vlan 200 +gathered: + description: Facts about the network resource gathered from the remote device as structured data. + returned: when I(state) is C(gathered) + type: list + sample: > + This output will always be in the same format as the + module argspec. +parsed: + description: The device native config provided in I(running_config) option parsed into structured data as per module argspec. + returned: when I(state) is C(parsed) + type: list + sample: > + This output will always be in the same format as the + module argspec. """ + from ansible.module_utils.basic import AnsibleModule from ansible_collections.cisco.ios.plugins.module_utils.network.ios.argspec.vlans.vlans import ( @@ -966,19 +1108,17 @@ def main(): :returns: the result form module invocation """ - required_if = [ - ("state", "merged", ("config",)), - ("state", "replaced", ("config",)), - ("state", "overridden", ("config",)), - ("state", "rendered", ("config",)), - ("state", "parsed", ("running_config",)), - ] - mutually_exclusive = [("config", "running_config")] - module = AnsibleModule( argument_spec=VlansArgs.argument_spec, - required_if=required_if, - mutually_exclusive=mutually_exclusive, + mutually_exclusive=[["config", "running_config"]], + required_if=[ + ["state", "merged", ["config"]], + ["state", "replaced", ["config"]], + ["state", "overridden", ["config"]], + ["state", "rendered", ["config"]], + ["state", "purged", ["config"]], + ["state", "parsed", ["running_config"]], + ], supports_check_mode=True, ) diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py b/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py index 27c6641eb..ff6814ba1 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_vrf.py @@ -58,6 +58,61 @@ options: description: - The list of address families with MDT parameters to be configured on the remote IOS device. type: list + suboptions: + afi: + description: Address family identifier. + type: str + choices: + ["ipv4", "ipv6"] + mdt: + description: MDT parameters. + type: dict + suboptions: + auto_discovery: + description: Auto-discovery parameters. + type: dict + suboptions: + vxlan: + description: Vxlan parameters. + type: dict + suboptions: + enable: + description: Enable VXLAN. + type: bool + inter_as: + description: Enable inter-as. + type: bool + default: + description: Parameters for default option. + type: dict + suboptions: + vxlan_mcast_group: + description: VXLAN multicast group value. + type: str + data: + description: Parameters for data option. + type: dict + suboptions: + vxlan_mcast_group: + description: VXLAN multicast group value. + type: str + threshold: + description: Threshold value. + type: int + overlay: + description: Parameters for overlay option. + type: dict + suboptions: + use_bgp: + description: parameters for BGP option. + type: dict + suboptions: + enable: + description: Enable use BGP. + type: bool + spt_only: + description: Enable SPT only. + type: bool elements: dict rd: description: @@ -832,12 +887,58 @@ def check_declarative_intent_params(want, module, result): def main(): """main entry point for module execution""" + address_family_spec = dict( + afi=dict(type="str", choices=["ipv4", "ipv6"]), + mdt=dict( + type="dict", + options=dict( + overlay=dict( + type="dict", + options=dict( + use_bgp=dict( + type="dict", + options=dict( + enable=dict(type="bool"), + spt_only=dict(type="bool"), + ), + ), + ), + ), + auto_discovery=dict( + type="dict", + options=dict( + vxlan=dict( + type="dict", + options=dict( + enable=dict(type="bool"), + inter_as=dict(type="bool"), + ), + ), + ), + ), + default=dict( + type="dict", + options=dict( + vxlan_mcast_group=dict(type="str"), + ), + ), + data=dict( + type="dict", + options=dict( + vxlan_mcast_group=dict(type="str"), + threshold=dict(type="int"), + ), + ), + ), + ), + ) + argument_spec = dict( vrfs=dict(type="list", elements="raw"), - name=dict(), - description=dict(), - address_family=dict(type="list", elements="dict"), - rd=dict(), + name=dict(type="str"), + description=dict(type="str"), + address_family=dict(type="list", elements="dict", options=address_family_spec), + rd=dict(type="str"), route_export=dict(type="list", elements="str"), route_import=dict(type="list", elements="str"), route_both=dict(type="list", elements="str"), diff --git a/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py b/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py index b2c5933e7..3cf933b13 100644 --- a/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py +++ b/ansible_collections/cisco/ios/plugins/modules/ios_vxlan_vtep.py @@ -21,7 +21,7 @@ description: This module provides declarative management of VXLAN VTEP interface version_added: 5.3.0 author: Padmini Priyadarshini Sivaraj (@PadminiSivaraj) notes: - - Tested against Cisco IOS device with Version 17.13.01 on Cat9k on CML. + - Tested against Cisco IOS-XE device with Version 17.13.01 on Cat9k on CML. - This module works with connection C(network_cli). See U(https://docs.ansible.com/ansible/latest/network/user_guide/platform_ios.html) options: diff --git a/ansible_collections/cisco/ios/plugins/terminal/ios.py b/ansible_collections/cisco/ios/plugins/terminal/ios.py index 3be46ebfa..2ef4f2d7c 100644 --- a/ansible_collections/cisco/ios/plugins/terminal/ios.py +++ b/ansible_collections/cisco/ios/plugins/terminal/ios.py @@ -41,6 +41,7 @@ class TerminalModule(TerminalBase): terminal_stderr_re = [ re.compile(rb"% ?Error"), # re.compile(rb"^% \w+", re.M), + re.compile(rb"ERROR:", re.IGNORECASE), re.compile(rb"% ?Bad secret"), re.compile(rb"[\r\n%] Bad passwords"), re.compile(rb"invalid input", re.I), diff --git a/ansible_collections/cisco/ios/test-requirements.txt b/ansible_collections/cisco/ios/test-requirements.txt index 94ff7c9e3..5a90586f2 100644 --- a/ansible_collections/cisco/ios/test-requirements.txt +++ b/ansible_collections/cisco/ios/test-requirements.txt @@ -1,9 +1,9 @@ # For ansible-tox-linters -black==23.3.0 ; python_version >= '3.7' +black==23.3.0 flake8 yamllint # Unit test runner -pytest-ansible ; python_version >= '3.9' -git+https://github.com/ansible-community/pytest-ansible-units.git ; python_version < '3.9' +pytest-ansible pytest-xdist +pytest-cov diff --git a/ansible_collections/cisco/ios/tests/config.yml b/ansible_collections/cisco/ios/tests/config.yml index 41f529264..c26ea5966 100644 --- a/ansible_collections/cisco/ios/tests/config.yml +++ b/ansible_collections/cisco/ios/tests/config.yml @@ -1,3 +1,3 @@ --- modules: - python_requires: ">=3.6" + python_requires: ">=3.9" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml index 7fd5aa1e3..16053c325 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/_populate_config.yaml @@ -1,10 +1,15 @@ --- - name: Populate configuration vars: - lines: - "ip access-list extended test_acl\ndeny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10\nip access-list extended 110\n\ - deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10\nip access-list extended 123\ndeny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255\ - \ eq telnet ack tos 12\ndeny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20\nipv6 access-list R1_TRAFFIC\ndeny tcp any eq www any\ - \ eq telnet ack dscp af11\n" + lines: | + ip access-list extended test_acl + deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 + ip access-list extended 110 + deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + ip access-list extended 123 + deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 + deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 + ipv6 access-list R1_TRAFFIC + deny tcp any eq www any eq telnet ack dscp af11 ansible.netcommon.cli_config: config: "{{ lines }}" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml new file mode 100644 index 000000000..856b5e6ad --- /dev/null +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/remarks_states.yaml @@ -0,0 +1,134 @@ +--- +- ansible.builtin.debug: + msg: START ios_acls round trip integration tests on connection={{ ansible_connection }} + +- ansible.builtin.include_tasks: _remove_config.yaml + +- ansible.builtin.include_tasks: _populate_config.yaml + +- block: + - name: Apply the configuration with remarks + register: base_config + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks" + state: merged + + - ansible.builtin.assert: + that: + - base_config.changed == true + - base_config.commands|symmetric_difference(remarks_check.commands) == [] + - base_config.before|symmetric_difference(remarks_check.before) == [] + - base_config.after|symmetric_difference(remarks_check.after) == [] + + - name: Apply enhanced configuration + register: base_config_overridden + cisco.ios.ios_acls: + config: + - afi: ipv4 + acls: + - name: TEST + acl_type: extended + aces: + - sequence: 10 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 10" + - "============" + - "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE" + grant: permit + protocol: ip + source: + host: 1.1.1.1 + destination: + any: true + - sequence: 20 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 20" + - "============" + - "ALLOW HOST FROM SEQUENCE 20" + grant: permit + protocol: ip + source: + host: 192.168.0.1 + destination: + any: true + - sequence: 30 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 30" + - "============" + - "ALLOW HOST FROM SEQUENCE 30 updated" + grant: permit + protocol: ip + source: + host: 2.2.2.2 + destination: + any: true + - sequence: 40 + remarks: + - "FIRST REMARK BEFORE SEQUENCE 40" + - "============" + - "ALLOW NEW HOST FROM SEQUENCE 40" + grant: permit + protocol: ip + source: + host: 3.3.3.3 + destination: + any: true + - remarks: + - "Remark not specific to sequence" + - "============" + - "End Remarks updated" + - "04j" + state: overridden + + - ansible.builtin.assert: + that: + - base_config_overridden.commands|symmetric_difference(remarks_check_override.commands) == [] + always: + - ansible.builtin.include_tasks: _remove_config.yaml diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml index f4faca3ba..aae010b64 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/tests/cli/replaced.yaml @@ -87,5 +87,40 @@ that: - result.commands|length == 0 - result['changed'] == false + + - ansible.builtin.include_tasks: _remove_config.yaml + + - ansible.builtin.include_tasks: _populate_config.yaml + + - name: Replaces device configuration of ACL with provided configuration + register: result + cisco.ios.ios_acls: &id002 + config: + - afi: ipv4 + acls: + - name: test_acl + acl_type: standard + aces: + - grant: deny + sequence: 10 + source: + address: 198.51.100.0 + wildcard_bits: 0.0.0.255 + state: replaced + + - ansible.builtin.assert: + that: + - result.commands|length == 3 + - result.changed == true + - result.commands|symmetric_difference(replaced_changetype.commands) == [] + + - name: Replaces device configuration of ACL with provided configuration (idempotent) + register: result + cisco.ios.ios_acls: *id002 + - name: Assert that task was idempotent + ansible.builtin.assert: + that: + - result.commands|length == 0 + - result['changed'] == false always: - ansible.builtin.include_tasks: _remove_config.yaml diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml index 2d324ebe1..8460ae2f5 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_acls/vars/main.yaml @@ -36,6 +36,11 @@ replaced: - ip access-list extended 150 - 20 deny tcp 198.51.100.0 0.0.0.255 eq telnet 198.51.110.0 0.0.0.255 eq telnet syn dscp ef ttl eq 10 +replaced_changetype: + commands: + - no ip access-list extended test_acl + - ip access-list standard test_acl + - 10 deny 198.51.100.0 0.0.0.255 overridden: commands: - no ipv6 access-list R1_TRAFFIC @@ -391,3 +396,289 @@ rtt: - no ip access-list extended 150 - ipv6 access-list R1_TRAFFIC - deny tcp any eq www any eq telnet ack dscp af11 sequence 10 +remarks_check: + commands: + - ip access-list extended TEST + - 10 remark FIRST REMARK BEFORE SEQUENCE 10 + - 10 remark ============ + - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + - 20 remark FIRST REMARK BEFORE SEQUENCE 20 + - 20 remark ============ + - 20 remark ALLOW HOST FROM SEQUENCE 20 + - 20 permit ip host 1.1.1.1 any + - 30 remark FIRST REMARK BEFORE SEQUENCE 30 + - 30 remark ============ + - 30 remark ALLOW HOST FROM SEQUENCE 30 + - 30 permit ip host 2.2.2.2 any + - 40 remark FIRST REMARK BEFORE SEQUENCE 40 + - 40 remark ============ + - 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + - 40 permit ip host 3.3.3.3 any + - remark Remark not specific to sequence + - remark ============ + - remark End Remarks + before: + - acls: + - aces: + - destination: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: icmp + protocol_options: + icmp: + echo: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: "110" + - aces: + - destination: + address: 198.51.101.0 + port_protocol: + eq: telnet + wildcard_bits: 0.0.0.255 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + address: 198.51.100.0 + wildcard_bits: 0.0.0.255 + tos: + service_value: 12 + - destination: + address: 192.0.4.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 20 + source: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + ttl: + lt: 20 + acl_type: extended + name: "123" + - aces: + - destination: + address: 192.0.3.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + grant: deny + option: + traceroute: true + protocol: tcp + protocol_options: + tcp: + fin: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: test_acl + afi: ipv4 + - acls: + - aces: + - destination: + any: true + port_protocol: + eq: telnet + dscp: af11 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + any: true + port_protocol: + eq: www + name: R1_TRAFFIC + afi: ipv6 + after: + - acls: + - aces: + - destination: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: icmp + protocol_options: + icmp: + echo: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: "110" + - aces: + - destination: + address: 198.51.101.0 + port_protocol: + eq: telnet + wildcard_bits: 0.0.0.255 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + address: 198.51.100.0 + wildcard_bits: 0.0.0.255 + tos: + service_value: 12 + - destination: + address: 192.0.4.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + dscp: ef + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 20 + source: + address: 192.0.3.0 + wildcard_bits: 0.0.0.255 + ttl: + lt: 20 + acl_type: extended + name: "123" + - aces: + - destination: + any: true + grant: permit + protocol: ip + remarks: + - FIRST REMARK BEFORE SEQUENCE 20 + - ============ + - ALLOW HOST FROM SEQUENCE 20 + sequence: 20 + source: + host: 1.1.1.1 + - destination: + any: true + grant: permit + protocol: ip + remarks: + - FIRST REMARK BEFORE SEQUENCE 30 + - ============ + - ALLOW HOST FROM SEQUENCE 30 + sequence: 30 + source: + host: 2.2.2.2 + - destination: + any: true + grant: permit + protocol: ip + remarks: + - FIRST REMARK BEFORE SEQUENCE 40 + - ============ + - ALLOW NEW HOST FROM SEQUENCE 40 + sequence: 40 + source: + host: 3.3.3.3 + - remarks: + - FIRST REMARK BEFORE SEQUENCE 10 + - ============ + - REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + sequence: 10 + - remarks: + - Remark not specific to sequence + - ============ + - End Remarks + acl_type: extended + name: TEST + - aces: + - destination: + address: 192.0.3.0 + port_protocol: + eq: www + wildcard_bits: 0.0.0.255 + grant: deny + option: + traceroute: true + protocol: tcp + protocol_options: + tcp: + fin: true + sequence: 10 + source: + address: 192.0.2.0 + wildcard_bits: 0.0.0.255 + ttl: + eq: 10 + acl_type: extended + name: test_acl + afi: ipv4 + - acls: + - aces: + - destination: + any: true + port_protocol: + eq: telnet + dscp: af11 + grant: deny + protocol: tcp + protocol_options: + tcp: + ack: true + sequence: 10 + source: + any: true + port_protocol: + eq: www + name: R1_TRAFFIC + afi: ipv6 +remarks_check_override: + commands: + - no ipv6 access-list R1_TRAFFIC + - ip access-list extended TEST + - no 10 + - no 20 permit ip host 1.1.1.1 any + - no 30 remark + - no remark + - 10 remark FIRST REMARK BEFORE SEQUENCE 10 + - 10 remark ============ + - 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + - 10 permit ip host 1.1.1.1 any + - 20 remark FIRST REMARK BEFORE SEQUENCE 20 + - 20 remark ============ + - 20 remark ALLOW HOST FROM SEQUENCE 20 + - 20 permit ip host 192.168.0.1 any + - 30 remark FIRST REMARK BEFORE SEQUENCE 30 + - 30 remark ============ + - 30 remark ALLOW HOST FROM SEQUENCE 30 updated + - remark Remark not specific to sequence + - remark ============ + - remark End Remarks updated + - remark 04j + - no ip access-list extended 110 + - no ip access-list extended 123 + - no ip access-list extended test_acl diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml deleted file mode 100644 index ab3ad91bc..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/meta/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_ios_tests diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml deleted file mode 100644 index 2b6056023..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/cli.yaml +++ /dev/null @@ -1,17 +0,0 @@ ---- -- name: Collect all CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml deleted file mode 100644 index 2269ecb54..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tasks/main.yaml +++ /dev/null @@ -1,5 +0,0 @@ ---- -- name: Main task for bgp module - ansible.builtin.include_tasks: cli.yaml - tags: - - network_cli diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml deleted file mode 100644 index 752f9ff4f..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp/tests/cli/basic.yaml +++ /dev/null @@ -1,490 +0,0 @@ ---- -- ansible.builtin.debug: msg="START ios cli/ios_bgp.yaml on connection={{ ansible_connection }}" - -- name: Clear existing BGP configuration - ignore_errors: true - cisco.ios.ios_bgp: - operation: delete - -- block: - - name: Add fake configuration with 'bgp' string - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL - - ip access-list extended BGP_ACL - - permit tcp any any eq bgp - - - name: Try delete fake BGP configuration - register: result - cisco.ios.ios_bgp: - operation: delete - - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Clean fake configuration with 'bgp' string - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL - - - name: Add fake bgp-like configuration - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL_2 - - ip access-list extended BGP_ACL_2 - - remark router bgp 64496 - - remark neighbor 192.0.2.10 remote-as 64496 - - remark neighbor 192.0.2.10 shutdown - - remark address-family ipv4 - - remark neighbor 192.0.2.10 activate - - remark exit-address-family - - permit tcp any any eq bgp - - - name: Try delete fake bgp-like configuration - register: result - cisco.ios.ios_bgp: - operation: delete - - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Clean fake bgp-like configuration - cisco.ios.ios_config: - match: none - replace: block - lines: - - no ip access-list extended BGP_ACL_2 - - - name: Configure BGP with as 64496 and a router-id - register: result - cisco.ios.ios_bgp: &id001 - operation: merge - config: - bgp_as: 64496 - router_id: 192.0.2.2 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'bgp router-id 192.0.2.2' in result.commands" - - - name: Configure BGP with as 64496 and a router-id (idempotent) - register: result - cisco.ios.ios_bgp: *id001 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure BGP neighbors - register: result - cisco.ios.ios_bgp: &id002 - operation: merge - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.10 - remote_as: 64496 - password: ansible - description: IBGP_NBR_1 - ebgp_multihop: 100 - timers: - keepalive: 300 - holdtime: 360 - min_neighbor_holdtime: 360 - - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'neighbor 192.0.2.10 remote-as 64496' in result.commands" - - "'neighbor 192.0.2.10 description IBGP_NBR_1' in result.commands" - - "'neighbor 192.0.2.10 ebgp-multihop 100' in result.commands" - - "'neighbor 192.0.2.10 timers 300 360 360' in result.commands" - - "'neighbor 192.0.2.15 remote-as 64496' in result.commands" - - "'neighbor 192.0.2.15 description IBGP_NBR_2' in result.commands" - - "'neighbor 192.0.2.15 ebgp-multihop 150' in result.commands" - - - name: Configure BGP neighbors (idempotent) - register: result - cisco.ios.ios_bgp: *id002 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure BGP neighbors with operation replace - register: result - cisco.ios.ios_bgp: &id003 - operation: replace - config: - bgp_as: 64496 - neighbors: - - neighbor: 192.0.2.15 - remote_as: 64496 - description: IBGP_NBR_2 - ebgp_multihop: 150 - - - neighbor: 203.0.113.10 - remote_as: 64511 - description: EBGP_NBR_1 - local_as: 64497 - - - neighbor: 10.10.20.20 - remote_as: 65012 - description: BGP_NBR_2 - ebgp_multihop: 100 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'neighbor 203.0.113.10 remote-as 64511' in result.commands" - - "'neighbor 203.0.113.10 description EBGP_NBR_1' in result.commands" - - "'neighbor 203.0.113.10 local-as 64497' in result.commands" - - "'neighbor 10.10.20.20 remote-as 65012' in result.commands" - - "'neighbor 10.10.20.20 description BGP_NBR_2' in result.commands" - - "'no neighbor 192.0.2.10' in result.commands" - - - name: Configure BGP neighbors with operation replace (idempotent) - register: result - cisco.ios.ios_bgp: *id003 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure root-level networks for BGP - register: result - cisco.ios.ios_bgp: &id004 - operation: merge - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - - prefix: 203.0.113.32 - masklen: 27 - route_map: RMAP_2 - - - ansible.builtin.assert: - that: - - result.changed == True - - "'router bgp 64496' in result.commands" - - "'network 203.0.113.0 mask 255.255.255.224 route-map RMAP_1' in result.commands" - - "'network 203.0.113.32 mask 255.255.255.224 route-map RMAP_2' in result.commands" - - - name: Configure root-level networks for BGP (idempotent) - register: result - cisco.ios.ios_bgp: *id004 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure root-level networks for BGP with operation replace - register: result - cisco.ios.ios_bgp: &id005 - operation: replace - config: - bgp_as: 64496 - networks: - - prefix: 203.0.113.0 - masklen: 27 - route_map: RMAP_1 - - - prefix: 198.51.100.16 - masklen: 28 - - - ansible.builtin.assert: - that: - - result.changed == True - - "'router bgp 64496' in result.commands" - - "'network 198.51.100.16 mask 255.255.255.240' in result.commands" - - "'no network 203.0.113.32 mask 255.255.255.224 route-map RMAP_2' in result.commands" - - - name: Configure root-level networks for BGP with operation replace (idempotent) - register: result - cisco.ios.ios_bgp: *id005 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure BGP neighbors under address family mode - register: result - cisco.ios.ios_bgp: &id006 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: unicast - neighbors: - - neighbor: 203.0.113.10 - activate: true - maximum_prefix: 250 - advertisement_interval: 120 - - - neighbor: 192.0.2.15 - activate: true - route_reflector_client: true - - - neighbor: 10.10.20.20 - activate: true - prefix_list_in: incoming-prefixes - prefix_list_out: outgoing-prefixes - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4' in result.commands" - - "'neighbor 203.0.113.10 activate' in result.commands" - - "'neighbor 203.0.113.10 maximum-prefix 250' in result.commands" - - "'neighbor 203.0.113.10 advertisement-interval 120' in result.commands" - - "'neighbor 192.0.2.15 activate' in result.commands" - - "'neighbor 192.0.2.15 route-reflector-client' in result.commands" - - "'neighbor 10.10.20.20 activate' in result.commands" - - "'neighbor 10.10.20.20 prefix-list incoming-prefixes in' in result.commands" - - "'neighbor 10.10.20.20 prefix-list outgoing-prefixes out' in result.commands" - - - name: Configure BGP neighbors under address family mode (idempotent) - register: result - cisco.ios.ios_bgp: *id006 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure networks under address family - register: result - cisco.ios.ios_bgp: &id007 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - networks: - - prefix: 198.51.100.48 - masklen: 28 - route_map: RMAP_1 - - - prefix: 192.0.2.64 - masklen: 27 - - - prefix: 203.0.113.160 - masklen: 27 - route_map: RMAP_2 - - - afi: ipv4 - safi: unicast - networks: - - prefix: 198.51.100.64 - masklen: 28 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4 multicast' in result.commands" - - "'network 198.51.100.48 mask 255.255.255.240 route-map RMAP_1' in result.commands" - - "'network 192.0.2.64 mask 255.255.255.224' in result.commands" - - "'network 203.0.113.160 mask 255.255.255.224 route-map RMAP_2' in result.commands" - - "'exit-address-family' in result.commands" - - "'address-family ipv4' in result.commands" - - "'network 198.51.100.64 mask 255.255.255.240' in result.commands" - - "'exit-address-family' in result.commands" - - - name: Configure networks under address family (idempotent) - register: result - cisco.ios.ios_bgp: *id007 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure networks under address family with operation replace - register: result - cisco.ios.ios_bgp: &id008 - operation: replace - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - networks: - - prefix: 198.51.100.80 - masklen: 28 - - - prefix: 192.0.2.64 - masklen: 27 - - - prefix: 203.0.113.192 - masklen: 27 - - - afi: ipv4 - safi: unicast - networks: - - prefix: 198.51.100.64 - masklen: 28 - - - ansible.builtin.assert: - that: - - result.changed == true - - '"router bgp 64496" in result.commands' - - '"address-family ipv4 multicast" in result.commands' - - '"network 198.51.100.80 mask 255.255.255.240" in result.commands' - - '"network 203.0.113.192 mask 255.255.255.224" in result.commands' - - '"no network 198.51.100.48 mask 255.255.255.240 route-map RMAP_1" in result.commands' - - '"no network 203.0.113.160 mask 255.255.255.224 route-map RMAP_2" in result.commands' - - '"exit-address-family" in result.commands' - - - name: Configure networks under address family with operation replace (idempotent) - register: result - cisco.ios.ios_bgp: *id008 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Configure redistribute information under address family mode - register: result - cisco.ios.ios_bgp: &id009 - operation: merge - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - redistribute: - - protocol: ospf - id: 112 - metric: 64 - - - protocol: eigrp - id: 233 - metric: 256 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4 multicast' in result.commands" - - "'redistribute ospf 112 metric 64' in result.commands" - - "'redistribute eigrp 233 metric 256' in result.commands" - - "'exit-address-family' in result.commands" - - - name: Configure redistribute information under address family mode (idempotent) - register: result - cisco.ios.ios_bgp: *id009 - - ansible.builtin.assert: - that: - - result.changed == false - - - name: Get the IOS version - cisco.ios.ios_facts: - gather_subset: all - - - name: Configure redistribute information under address family mode with operation replace - register: result - cisco.ios.ios_bgp: &id010 - operation: replace - config: - bgp_as: 64496 - address_family: - - afi: ipv4 - safi: multicast - redistribute: - - protocol: ospf - id: 112 - metric: 64 - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64496' in result.commands" - - "'address-family ipv4 multicast' in result.commands" - - "'no redistribute eigrp 233' in result.commands" - - "'exit-address-family' in result.commands" - - - name: Configure redistribute information under address family mode with operation replace (idempotent) - register: result - when: ansible_net_version != "15.6(2)T" - cisco.ios.ios_bgp: *id010 - - ansible.builtin.assert: - that: - - result.changed == false - when: ansible_net_version != "15.6(2)T" - - - name: Override all the existing BGP configuration - register: result - cisco.ios.ios_bgp: - operation: override - config: - bgp_as: 64497 - router_id: 192.0.2.10 - log_neighbor_changes: true - - - ansible.builtin.assert: - that: - - result.changed == true - - "'no router bgp 64496' in result.commands" - - "'router bgp 64497' in result.commands" - - "'bgp router-id 192.0.2.10' in result.commands" - - "'bgp log-neighbor-changes' in result.commands" - - - name: Configure BGP neighbors with classful boundary - register: result - cisco.ios.ios_bgp: &id011 - config: - bgp_as: 64497 - log_neighbor_changes: true - networks: - - prefix: 198.51.100.0 - masklen: 23 - - - prefix: 201.0.113.32 - masklen: 24 - operation: merge - - - ansible.builtin.assert: - that: - - result.changed == true - - "'router bgp 64497' in result.commands" - - "'network 198.51.100.0 mask 255.255.254.0' in result.commands" - - "'network 201.0.113.32' in result.commands" - - - name: Configure BGP neighbors with classful boundary (idempotent) - register: result - cisco.ios.ios_bgp: *id011 - - ansible.builtin.assert: - that: - - result.changed == false - always: - - name: Teardown - register: result - cisco.ios.ios_bgp: &id012 - operation: delete - - - ansible.builtin.assert: - that: - - result.changed == true - - "'no router bgp 64497' in result.commands" - - - name: Teardown again (idempotent) - register: result - cisco.ios.ios_bgp: *id012 - - ansible.builtin.assert: - that: - - result.changed == false - -- ansible.builtin.debug: msg="END ios cli/ios_bgp.yaml on connection={{ ansible_connection }}" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml index bd992e88a..c7647d008 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/deleted.yaml @@ -26,6 +26,7 @@ - name: Delete provided BGP global (idempotent) register: result cisco.ios.ios_bgp_global: *id001 + - name: Assert that the previous task was idempotent ansible.builtin.assert: that: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml index 1404b4e91..6c126ccfd 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/tests/cli/merged.yaml @@ -11,14 +11,12 @@ config: as_number: 65000 bgp: - advertise_best_external: true bestpath: - compare_routerid: true - dampening: - penalty_half_time: 1 - reuse_route_val: 1 - suppress_route_val: 1 - max_suppress: 1 + default: + ipv4_unicast: false + route_target: + filter: false graceful_shutdown: neighbors: time: 50 @@ -33,20 +31,6 @@ remote_as: 100 shutdown: set: false - aigp: - send: - cost_community: - id: 100 - poi: - igp_cost: true - transitive: true - route_map: - name: test-route - out: true - redistribute: - - connected: - metric: 10 - set: true timers: keepalive: 100 holdtime: 200 diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml index 07638f98e..93fadcf29 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_bgp_global/vars/main.yaml @@ -5,29 +5,24 @@ merged: commands: - router bgp 65000 - timers bgp 100 200 150 - - bgp advertise-best-external - bgp bestpath compare-routerid - - bgp dampening 1 1 1 1 + - no bgp default ipv4-unicast + - no bgp default route-target filter - bgp graceful-shutdown all neighbors 50 local-preference 100 community 100 - bgp log-neighbor-changes - bgp nopeerup-delay post-boot 10 - neighbor 198.0.2.1 remote-as 100 - neighbor 198.0.2.1 description merge neighbor - - neighbor 198.0.2.1 aigp send cost-community 100 poi igp-cost transitive - - neighbor 198.0.2.1 route-map test-route out - - redistribute connected metric 10 after: as_number: "65000" bgp: - advertise_best_external: true bestpath_options: compare_routerid: true - dampening: - max_suppress: 1 - penalty_half_time: 1 - reuse_route_val: 1 - suppress_route_val: 1 + default: + ipv4_unicast: false + route_target: + filter: false graceful_shutdown: community: "100" local_preference: 100 @@ -37,23 +32,9 @@ merged: nopeerup_delay_options: post_boot: 10 neighbors: - - aigp: - send: - cost_community: - id: 100 - poi: - igp_cost: true - transitive: true - description: merge neighbor + - description: merge neighbor neighbor_address: 198.0.2.1 remote_as: "100" - route_maps: - - name: test-route - out: true - redistribute: - - connected: - metric: 10 - set: true timers: holdtime: 200 keepalive: 100 @@ -63,6 +44,10 @@ gathered: after: as_number: "65000" bgp: + default: + ipv4_unicast: true + route_target: + filter: true advertise_best_external: true bestpath_options: compare_routerid: true @@ -119,6 +104,10 @@ replaced: after: as_number: "65000" bgp: + default: + ipv4_unicast: true + route_target: + filter: true advertise_best_external: true bestpath_options: med: @@ -143,6 +132,10 @@ parsed: after: as_number: "65000" bgp: + default: + ipv4_unicast: true + route_target: + filter: true advertise_best_external: true bestpath_options: compare_routerid: true @@ -213,6 +206,11 @@ deleted: after: as_number: "65000" + bgp: + default: + ipv4_unicast: true + route_target: + filter: true rtt: commands: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml index ba8a1fd23..44d57ed9b 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_facts/tests/cli/all_facts.yaml @@ -20,8 +20,10 @@ - result.ansible_facts.ansible_net_memtotal_mb > 1 - ansible.builtin.assert: - that: "{{ item.value.spacetotal_kb }} > {{ item.value.spacefree_kb }}" + that: "{{ my_var.value.spacetotal_kb }} > {{ my_var.value.spacefree_kb }}" loop: "{{ lookup('dict', result.ansible_facts.ansible_net_filesystems_info, wantlist=True) }}" + loop_control: + loop_var: my_var - ansible.builtin.set_fact: supported_network_resources: @@ -34,6 +36,9 @@ - lldp_global - lldp_interfaces - l3_interfaces + - evpn_global + - evpn_evi + - vxlan_vtep - logging_global - acl_interfaces - static_routes diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml index c73dd0b11..3db4a1fb6 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/tests/cli/merged.yaml @@ -14,7 +14,7 @@ enabled: true - name: GigabitEthernet3 - description: Configured and Merged by Ansible-Network + description: 04j enabled: false state: merged diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml index 84b8afb22..bf89b4b37 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_interfaces/vars/main.yaml @@ -20,7 +20,7 @@ merged: - interface GigabitEthernet2 - description Configured and Merged by Ansible-Network - interface GigabitEthernet3 - - description Configured and Merged by Ansible-Network + - description 04j - shutdown after: - enabled: true @@ -30,7 +30,7 @@ merged: enabled: true name: GigabitEthernet2 speed: "1000" - - description: Configured and Merged by Ansible-Network + - description: 04j enabled: false name: GigabitEthernet3 speed: "1000" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml index 06228ea7f..75217f5e5 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/tests/cli/merged.yaml @@ -23,6 +23,21 @@ - address: 198.51.100.2/24 ipv6: - address: 2001:db8:0:3::/64 + - name: Vlan101 + ipv4: + - address: 198.51.100.2/24 + mac_address: dead:beef:abcd + - name: Vlan901 + autostate: false + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true + - name: Vlan902 + autostate: true + ipv6: + - enable: true state: merged - name: L3_interface merged - assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml index 44ca9b85e..73996896e 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_l3_interfaces/vars/main.yaml @@ -19,6 +19,12 @@ merged: - ip address 198.51.100.1 255.255.255.0 secondary - ip address 198.51.100.2 255.255.255.0 - ipv6 address 2001:db8:0:3::/64 + - interface Vlan901 + - no autostate + - ip unnumbered Loopback1 + - ipv6 enable + - interface Vlan902 + - ipv6 enable after: - name: Loopback888 - ipv4: @@ -40,6 +46,21 @@ merged: - address: 2001:DB8:0:3::/64 name: GigabitEthernet3 - name: GigabitEthernet4 + - name: Vlan101 + ipv4: + - address: 198.51.100.2/24 + mac_address: dead:beef:abcd + - name: Vlan901 + ipv4: + - source_interface: + name: Loopback1 + ipv6: + - enable: true + autostate: false + - name: Vlan902 + ipv6: + - enable: true + autostate: true replaced: before: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml deleted file mode 100644 index 5f709c5aa..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/defaults/main.yaml +++ /dev/null @@ -1,2 +0,0 @@ ---- -testcase: "*" diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml deleted file mode 100644 index ab3ad91bc..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/meta/main.yml +++ /dev/null @@ -1,3 +0,0 @@ ---- -dependencies: - - prepare_ios_tests diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml deleted file mode 100644 index cd8c04990..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/cli.yaml +++ /dev/null @@ -1,18 +0,0 @@ ---- -- name: Collect all CLI test cases - ansible.builtin.find: - paths: "{{ role_path }}/tests/cli" - patterns: "{{ testcase }}.yaml" - register: test_cases - delegate_to: localhost - -- name: Set test_items - ansible.builtin.set_fact: - test_items: "{{ test_cases.files | map(attribute='path') | list }}" - -- name: Run test cases (connection=ansible.netcommon.network_cli) - ansible.builtin.include_tasks: "{{ test_case_to_run }}" - with_items: "{{ test_items }}" - loop_control: - loop_var: test_case_to_run - tags: network_cli diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml deleted file mode 100644 index 3d2666f3e..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tasks/main.yaml +++ /dev/null @@ -1,3 +0,0 @@ ---- -- name: Main task for ntp module - ansible.builtin.include_tasks: cli.yaml diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml deleted file mode 100644 index 92063dfb5..000000000 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_ntp/tests/cli/ntp_configuration.yaml +++ /dev/null @@ -1,87 +0,0 @@ ---- -- ansible.builtin.debug: msg="START connection={{ ansible_connection }} ios_ntp sanity test" - -- name: Remove ntp (if set) - ignore_errors: true - cisco.ios.ios_ntp: &id007 - server: 10.75.32.5 - source_int: "{{ test_interface }}" - acl: NTP_ACL - logging: true - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - state: absent - -- block: - - name: Configure ntp - register: result - cisco.ios.ios_ntp: &id001 - server: 10.75.32.5 - source_int: "{{ test_interface }}" - state: present - - - ansible.builtin.assert: &id002 - that: - - result.changed == true - - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id001 - - ansible.builtin.assert: &id004 - that: - - result.changed == false - - - name: Load ACL ntp_acl into device - register: result - cisco.ios.ios_config: - lines: - - 10 permit ip host 192.0.2.1 any log - parents: ip access-list extended NTP_ACL - - - ansible.builtin.assert: *id002 - - name: Configure ntp - register: result - cisco.ios.ios_ntp: &id003 - acl: NTP_ACL - logging: true - state: present - - - ansible.builtin.assert: *id002 - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id003 - - ansible.builtin.assert: *id004 - - name: Configure ntp with different values - register: result - cisco.ios.ios_ntp: &id005 - key_id: 10 - auth_key: 15435A030726242723273C21181319000A - auth: true - vrf: my_mgmt_vrf - state: present - - - ansible.builtin.assert: *id002 - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id005 - - ansible.builtin.assert: *id004 - - name: Remove part of configuration - register: result - cisco.ios.ios_ntp: &id006 - acl: NTP_ACL - logging: true - state: absent - - - ansible.builtin.assert: *id002 - - name: Idempotent check - register: result - cisco.ios.ios_ntp: *id006 - - ansible.builtin.assert: *id004 - always: - - name: Remove ntp configuration - cisco.ios.ios_ntp: *id007 - - name: Remove ntp_acl from device - cisco.ios.ios_config: - lines: - - no ip access-list extended NTP_ACL diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml index 7d5606c1e..6c795ee2d 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_user/tests/cli/basic.yaml @@ -4,15 +4,10 @@ cisco.ios.ios_user: aggregate: - name: ansibletest1 - - name: ansibletest2 - - name: ansibletest3 - - name: ansibletest4 - - name: ansibletest5 - - name: ansibletest6 state: absent @@ -36,7 +31,6 @@ cisco.ios.ios_user: aggregate: - name: ansibletest2 - - name: ansibletest3 state: present view: network-admin @@ -66,7 +60,6 @@ cisco.ios.ios_user: aggregate: - name: ansibletest2 - - name: ansibletest3 state: present view: network-admin @@ -111,7 +104,7 @@ name: ansibleuser6 hashed_password: type: 5 - value: $3$8JcDilcYgFZi.yz4ApaqkHG2.8/ + value: $1$SpMm$eALjeyED.WSZs0naLNv22/ state: present - ansible.builtin.assert: @@ -125,16 +118,13 @@ cisco.ios.ios_user: aggregate: - name: ansibletest1 - - name: ansibletest2 - - name: ansibletest3 - - - name: ansibletest4 - - - name: ansibletest5 - - - name: ansibletest6 + - name: ansibleuser4 + - name: ansibleuser5 + - name: ansibleuser6 + - name: ansibleuser7 + - name: ssh_user state: absent - ansible.builtin.assert: @@ -143,3 +133,54 @@ - '"no username ansibletest1" in result.commands[0]["command"]' - '"no username ansibletest2" in result.commands[1]["command"]' - '"no username ansibletest3" in result.commands[2]["command"]' + +- name: Add user to check purge + become: true + register: result + cisco.ios.ios_user: + name: ansibletest1 + privilege: 15 + role: network-operator + state: present + +- name: Create user with hashed_password 9 + become: true + register: result + cisco.ios.ios_user: + name: ansibleuser6 + hashed_password: + type: 9 + value: $9$B/6NVV7joWJ9w.$XueHQxIOZk0GhNC3lxUFioUeowJrtLmXxouXfTuoNpc + state: present + +- ansible.builtin.assert: + that: + - result.changed == true + - "'username ansibleuser6 secret' in result.commands[0]" + +- name: Ensure SSH key is not world readable + ansible.builtin.file: + path: "{{ role_path }}/files/test_rsa" + mode: 384 + +- name: Create user with sshkey to check purge + cisco.ios.ios_user: + name: ssh_user + privilege: 15 + state: present + sshkey: "{{ lookup('file', 'files/test_rsa.pub') }}" + +- name: Reset connection with {{ ansible_user }} + ansible.builtin.meta: reset_connection + +- name: check if purge removes ssh_user + become: true + register: result_purge + cisco.ios.ios_user: + aggregate: + - name: cisco + purge: true + +- ansible.builtin.assert: + that: + - result.changed == true diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml index d1c517a03..9f740fd90 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_populate_config_vlan_config.yaml @@ -13,5 +13,4 @@ - vlan_id: 901 member: vni: 50901 - configuration: true state: merged diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml index f78bb0c56..591d6c6e9 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/_remove_config_vlan_config.yaml @@ -8,5 +8,4 @@ - vlan_id: 202 - vlan_id: 901 - vlan_id: 902 - configuration: true state: deleted diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml index 21249d763..ae7215669 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/deleted_vlan_config.yaml @@ -10,7 +10,6 @@ - name: Delete vlans attributes for all configured vlans register: result cisco.ios.ios_vlans: &id001 - configuration: true state: deleted - name: Assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml index 576adee2f..6e0fc136e 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/gathered_vlan_config.yaml @@ -11,7 +11,6 @@ register: result cisco.ios.ios_vlans: config: - configuration: true state: gathered - name: Assert diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml index 6efce0fc0..5af123bcd 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/merged_vlan_config.yaml @@ -17,7 +17,6 @@ - vlan_id: 902 member: vni: 50902 - configuration: true state: merged - name: Assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml index 52944e5ce..a739c6117 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/overridden_vlan_config.yaml @@ -19,7 +19,6 @@ member: vni: 10101 evi: 101 - configuration: true state: overridden - name: Assert that correct set of commands were generated diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml index 7d8311711..3234569ce 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/parsed_vlan_config.yaml @@ -8,7 +8,6 @@ register: result cisco.ios.ios_vlans: running_config: "{{ lookup('file', '_parsed_vlan_config.cfg') }}" - configuration: true state: parsed - ansible.builtin.assert: diff --git a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml index 63cc24a29..1b3a0f093 100644 --- a/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml +++ b/ansible_collections/cisco/ios/tests/integration/targets/ios_vlans/tests/cli/rendered_vlan_config.yaml @@ -19,7 +19,6 @@ - vlan_id: 901 member: vni: 50901 - configuration: true state: rendered - ansible.builtin.assert: diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt deleted file mode 100644 index 9dadf1b54..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.10.txt +++ /dev/null @@ -1,24 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py compile-2.6!skip -plugins/modules/ios_route_maps.py import-2.6!skip -plugins/modules/ios_logging_global.py import-2.6!skip -plugins/modules/ios_prefix_lists.py import-2.6!skip -plugins/modules/ios_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_global/evpn_global.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py import-2.6!skip diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt deleted file mode 100644 index 2847c9344..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.11.txt +++ /dev/null @@ -1,24 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/ios_route_maps.py import-2.6!skip -plugins/modules/ios_logging_global.py import-2.6!skip -plugins/modules/ios_prefix_lists.py import-2.6!skip -plugins/modules/ios_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_global/evpn_global.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py import-2.6!skip diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt deleted file mode 100644 index d7ff17ca8..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.13.txt +++ /dev/null @@ -1 +0,0 @@ -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt index d7ff17ca8..d7ff17ca8 100644 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.12.txt +++ b/ansible_collections/cisco/ios/tests/sanity/ignore-2.18.txt diff --git a/ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt b/ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt deleted file mode 100644 index 11aba94e9..000000000 --- a/ansible_collections/cisco/ios/tests/sanity/ignore-2.9.txt +++ /dev/null @@ -1,32 +0,0 @@ -plugins/modules/ios_bgp.py validate-modules:deprecation-mismatch -plugins/modules/ios_bgp.py validate-modules:invalid-documentation -plugins/modules/ios_lldp.py validate-modules:deprecation-mismatch -plugins/modules/ios_lldp.py validate-modules:invalid-documentation -plugins/modules/ios_ntp.py validate-modules:deprecation-mismatch -plugins/modules/ios_ntp.py validate-modules:invalid-documentation -plugins/modules/ios_linkagg.py validate-modules:deprecation-mismatch -plugins/modules/ios_linkagg.py validate-modules:invalid-documentation -plugins/action/ios.py action-plugin-docs # base class for deprecated network platform modules using `connection: local` -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py compile-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py compile-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py compile-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py compile-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py compile-2.6!skip -plugins/modules/ios_route_maps.py import-2.6!skip -plugins/modules/ios_logging_global.py import-2.6!skip -plugins/modules/ios_ntp_global.py import-2.6!skip -plugins/modules/ios_prefix_lists.py import-2.6!skip -plugins/modules/ios_bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_global/bgp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/bgp_address_family/bgp_address_family.py import-2.6!skip -plugins/module_utils/network/ios/config/ospf_interfaces/ospf_interfaces.py import-2.6!skip -plugins/module_utils/network/ios/config/ospfv3/ospfv3.py import-2.6!skip -plugins/module_utils/network/ios/config/route_maps/route_maps.py import-2.6!skip -plugins/module_utils/network/ios/config/logging_global/logging_global.py import-2.6!skip -plugins/module_utils/network/ios/config/prefix_lists/prefix_lists.py import-2.6!skip -plugins/module_utils/network/ios/config/ntp_global/ntp_global.py import-2.6!skip -plugins/module_utils/network/ios/config/vxlan_vtep/vxlan_vtep.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_global/evpn_global.py import-2.6!skip -plugins/module_utils/network/ios/config/evpn_evi/evpn_evi.py import-2.6!skip diff --git a/ansible_collections/cisco/ios/tests/unit/compat/__init__.py b/ansible_collections/cisco/ios/tests/unit/compat/__init__.py deleted file mode 100644 index e69de29bb..000000000 --- a/ansible_collections/cisco/ios/tests/unit/compat/__init__.py +++ /dev/null diff --git a/ansible_collections/cisco/ios/tests/unit/compat/mock.py b/ansible_collections/cisco/ios/tests/unit/compat/mock.py deleted file mode 100644 index e25e8381b..000000000 --- a/ansible_collections/cisco/ios/tests/unit/compat/mock.py +++ /dev/null @@ -1,28 +0,0 @@ -# pylint: skip-file -# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> -# -# 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 - -""" -Compat module for Python3.x's unittest.mock module -""" -from unittest.mock import * diff --git a/ansible_collections/cisco/ios/tests/unit/compat/unittest.py b/ansible_collections/cisco/ios/tests/unit/compat/unittest.py deleted file mode 100644 index df4266ec9..000000000 --- a/ansible_collections/cisco/ios/tests/unit/compat/unittest.py +++ /dev/null @@ -1,41 +0,0 @@ -# (c) 2014, Toshio Kuratomi <tkuratomi@ansible.com> -# -# 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 - -""" -Compat module for Python2.7's unittest module -""" - -import sys - - -# Allow wildcard import because we really do want to import all of -# unittests's symbols into this compat shim -# pylint: disable=wildcard-import,unused-wildcard-import -if sys.version_info < (2, 7): - try: - # Need unittest2 on python2.6 - from unittest2 import * - except ImportError: - print("You need unittest2 installed on python2.6.x to run tests") -else: - from unittest import * diff --git a/ansible_collections/cisco/ios/tests/unit/mock/path.py b/ansible_collections/cisco/ios/tests/unit/mock/path.py index ce2eb1fe0..7d287a5fb 100644 --- a/ansible_collections/cisco/ios/tests/unit/mock/path.py +++ b/ansible_collections/cisco/ios/tests/unit/mock/path.py @@ -2,9 +2,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type -from ansible.utils.path import unfrackpath +from unittest.mock import MagicMock -from ansible_collections.cisco.ios.tests.unit.compat.mock import MagicMock +from ansible.utils.path import unfrackpath -mock_unfrackpath_noop = MagicMock(spec_set=unfrackpath, side_effect=lambda x, *args, **kwargs: x) +mock_unfrackpath_noop = MagicMock( + spec_set=unfrackpath, + side_effect=lambda x, *args, **kwargs: x, +) diff --git a/ansible_collections/cisco/ios/tests/unit/mock/procenv.py b/ansible_collections/cisco/ios/tests/unit/mock/procenv.py index 111c319c2..e6e09464b 100644 --- a/ansible_collections/cisco/ios/tests/unit/mock/procenv.py +++ b/ansible_collections/cisco/ios/tests/unit/mock/procenv.py @@ -27,12 +27,11 @@ import sys from contextlib import contextmanager from io import BytesIO, StringIO +from unittest import TestCase from ansible.module_utils._text import to_bytes from ansible.module_utils.six import PY3 -from ansible_collections.cisco.ios.tests.unit.compat import unittest - @contextmanager def swap_stdin_and_argv(stdin_data="", argv_data=tuple()): @@ -78,10 +77,13 @@ def swap_stdout(): sys.stdout = old_stdout -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self, module_args=None): if module_args is None: - module_args = {"_ansible_remote_tmp": "/tmp", "_ansible_keep_remote_files": False} + module_args = { + "_ansible_remote_tmp": "/tmp", + "_ansible_keep_remote_files": False, + } args = json.dumps(dict(ANSIBLE_MODULE_ARGS=module_args)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces index 9888c8e22..e2ee95fbd 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/fixtures/ios_facts_show_interfaces @@ -1,4 +1,4 @@ -GigabitEthernet0/0 is up, line protocol is up +GigabitEthernet0/0/0.1012 is up, line protocol is up Hardware is iGbE, address is 5e00.0003.0000 (bia 5e00.0003.0000) Description: OOB Management Internet address is 10.8.38.66/24 @@ -27,6 +27,35 @@ GigabitEthernet0/0 is up, line protocol is up 0 babbles, 0 late collision, 0 deferred 1 lost carrier, 0 no carrier, 0 pause output 0 output buffer failures, 0 output buffers swapped out +GigabitEthernet0/0 is up, line protocol is up + Hardware is iGbE, address is 5e00.0008.0000 (bia 5e00.0008.0000) + Description: OOB Management + Internet address is 10.8.38.66/24 + MTU 1500 bytes, BW 1000000 Kbit/sec, DLY 10 usec, + reliability 253/255, txload 1/255, rxload 1/255 + Encapsulation ARPA, loopback not set + Keepalive set (10 sec) + Full Duplex, Auto Speed, link type is auto, media type is RJ45 + output flow-control is unsupported, input flow-control is unsupported + ARP type: ARPA, ARP Timeout 04:00:00 + Last input 00:00:00, output 00:00:00, output hang never + Last clearing of "show interface" counters never + Input queue: 0/75/0/0 (size/max/drops/flushes); Total output drops: 0 + Queueing strategy: fifo + Output queue: 0/40 (size/max) + 5 minute input rate 3000 bits/sec, 2 packets/sec + 5 minute output rate 2000 bits/sec, 2 packets/sec + 8463791 packets input, 1445150230 bytes, 0 no buffer + Received 0 broadcasts (0 IP multicasts) + 0 runts, 0 giants, 0 throttles + 0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored + 0 watchdog, 0 multicast, 0 pause input + 3521571 packets output, 348781823 bytes, 0 underruns + 0 output errors, 0 collisions, 1 interface resets + 4150764 unknown protocol drops + 0 babbles, 0 late collision, 0 deferred + 1 lost carrier, 0 no carrier, 0 pause output + 0 output buffer failures, 0 output buffers swapped out GigabitEthernet1 is up, line protocol is up Hardware is CSR vNIC, address is 5e00.0006.0000 (bia 5e00.0006.0000) Description: OOB Management diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py index 6bc99691c..3c8567797 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acl_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_acl_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py index 33c4a1ddb..36d96365a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_acls.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_acls -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -91,7 +90,10 @@ class TestIosAclsModule(TestIosModule): aces=[ dict( grant="deny", - source=dict(address="192.0.2.0", wildcard_bits="0.0.0.255"), + source=dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + ), ), ], ), @@ -137,7 +139,9 @@ class TestIosAclsModule(TestIosModule): protocol_options=dict(tcp=dict(ack="True")), sequence="200", source=dict(object_group="test_network_og"), - destination=dict(object_group="test_network_og"), + destination=dict( + object_group="test_network_og", + ), dscp="ef", ttl=dict(eq=10), ), @@ -223,7 +227,10 @@ class TestIosAclsModule(TestIosModule): { "aces": [ { - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "grant": "permit", "protocol": "tcp", "sequence": 10, @@ -233,14 +240,20 @@ class TestIosAclsModule(TestIosModule): }, }, { - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "grant": "permit", "protocol": "tcp", "sequence": 20, "source": {"host": "10.160.114.111"}, }, { - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "grant": "permit", "protocol": "tcp", "sequence": 30, @@ -361,7 +374,9 @@ class TestIosAclsModule(TestIosModule): "grant": "permit", "protocol": "ipv6", "sequence": 10, - "source": {"address": "2001:ABAD:BEEF:1221::/64"}, + "source": { + "address": "2001:ABAD:BEEF:1221::/64", + }, }, { "destination": { @@ -380,7 +395,10 @@ class TestIosAclsModule(TestIosModule): "aces": [ {"remarks": ["empty remark 1"], "sequence": 10}, {"remarks": ["empty remark 2"], "sequence": 20}, - {"remarks": ["empty remark never ends"], "sequence": 30}, + { + "remarks": ["empty remark never ends"], + "sequence": 30, + }, ], "name": "empty_ipv6_acl", }, @@ -402,7 +420,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 40, "source": {"any": True}, }, - {"remarks": ["I am new set of ipv6 ace"], "sequence": 50}, + { + "remarks": ["I am new set of ipv6 ace"], + "sequence": 50, + }, { "destination": {"any": True}, "grant": "permit", @@ -422,64 +443,58 @@ class TestIosAclsModule(TestIosModule): ) result = self.execute_module(changed=True) commands = [ - "ip access-list extended mytest", - "remark I am a test ace", - "remark I am right after the test ace", - "remark I third the test ace", - "100 permit ip host 100.100.100.100 any", - "remark I am the next test ace", - "remark I am the next ace to the next ace", - "110 permit ip host 10.40.150.0 any", - "remark I am the peace ace", - "remark Peace out", "ip access-list extended 199", "10 permit ip 10.40.150.0 0.0.0.255 any", "20 permit ip any 10.40.150.0 0.0.0.255", + "ip access-list standard 42", + "10 permit 10.182.250.0 0.0.0.255", + "ip access-list extended empty_ip_ex_acl", + "remark empty remark 1", + "remark empty remark 2", + "remark empty remark never ends", "ip access-list extended NET-MGMT-VTY", "10 permit tcp 10.57.66.243 0.0.0.7 any eq 22", "20 permit tcp host 10.160.114.111 any eq 22", "30 permit tcp host 10.160.115.22 any eq 22", "40 deny ip any any log", - "ip access-list extended empty_ip_ex_acl", - "remark empty remark 1", - "remark empty remark 2", - "remark empty remark never ends", + "ip access-list extended mytest", + "100 remark I am a test ace", + "100 remark I am right after the test ace", + "100 remark I third the test ace", + "100 permit ip host 100.100.100.100 any", + "110 remark I am the next test ace", + "110 remark I am the next ace to the next ace", + "110 permit ip host 10.40.150.0 any", + "remark I am the peace ace", + "remark Peace out", "ip access-list extended TEST", - "remark FIRST REMARK BEFORE LINE 10", - "remark ============", - "remark ALLOW HOST FROM BUILDING 10", + "10 remark FIRST REMARK BEFORE LINE 10", + "10 remark ============", + "10 remark ALLOW HOST FROM BUILDING 10", "10 permit ip host 1.1.1.1 any", - "remark FIRST REMARK BEFORE LINE 20", - "remark ============", - "remark ALLOW HOST FROM BUILDING 20", + "20 remark FIRST REMARK BEFORE LINE 20", + "20 remark ============", + "20 remark ALLOW HOST FROM BUILDING 20", "20 permit ip host 2.2.2.2 any", - "remark FIRST REMARK BEFORE LINE 30", - "remark ============", - "remark ALLOW NEW HOST FROM BUILDING 10", + "30 remark FIRST REMARK BEFORE LINE 30", + "30 remark ============", + "30 remark ALLOW NEW HOST FROM BUILDING 10", "30 permit ip host 3.3.3.3 any", "remark FIRST REMARK AT END OF ACL", "remark SECOND REMARK AT END OF ACL", - "ip access-list standard 42", - "10 permit 10.182.250.0 0.0.0.255", "ipv6 access-list R1_TRAFFIC", "permit ipv6 2001:ABAD:BEEF:1221::/64 any sequence 10", "deny tcp host 2001:ABAD:BEEF:2345::1 host 2001:ABAD:BEEF:1212::1 eq www sequence 20", "ipv6 access-list empty_ipv6_acl", - "remark empty remark 1", - " sequence 10", - "remark empty remark 2", - " sequence 20", - "remark empty remark never ends", - " sequence 30", + "10 remark empty remark 1", + "20 remark empty remark 2", + "30 remark empty remark never ends", "ipv6 access-list ipv6_acl", - "remark I am a ipv6 ace", - " sequence 10", - "remark I am test", - " sequence 20", + "10 remark I am a ipv6 ace", + "20 remark I am test", "permit tcp any any sequence 30", "permit udp any any sequence 40", - "remark I am new set of ipv6 ace", - " sequence 50", + "50 remark I am new set of ipv6 ace", "permit icmp any any sequence 60", ] self.assertEqual(sorted(result["commands"]), sorted(commands)) @@ -518,7 +533,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "deny", "protocol": "tcp", - "source": {"any": True, "port_protocol": {"eq": "www"}}, + "source": { + "any": True, + "port_protocol": {"eq": "www"}, + }, "destination": { "any": True, "port_protocol": {"eq": "telnet"}, @@ -536,7 +554,6 @@ class TestIosAclsModule(TestIosModule): ) result = self.execute_module(changed=False) self.assertEqual(sorted(result["commands"]), []) - # self.execute_module(changed=False, commands=[], sort=True) def test_ios_acls_replaced(self): self.execute_show_command.return_value = dedent( @@ -550,11 +567,23 @@ class TestIosAclsModule(TestIosModule): ip access-list standard test_acl remark remark check 1 remark some random remark 2 + ip access-list standard testRobustReplace + 10 remark Remarks for 10 + 10 permit 192.168.1.0 0.0.0.255 + 20 remark Remarks for 20 + 20 permit 0.0.0.0 255.0.0.0 + 30 remark Remarks for 30 + 30 permit 172.16.0.0 0.15.255.255 + 40 remark Remarks for 40 + 40 permit 192.0.2.0 0.0.0.255 + 50 remark Remarks for 50 + 50 permit 198.51.100.0 0.0.0.255 """, ) self.execute_show_command_name.return_value = dedent( """\ Standard IP access list test_acl + Standard IP access list testRobustReplace """, ) set_module_args( @@ -588,6 +617,21 @@ class TestIosAclsModule(TestIosModule): acl_type="standard", aces=[dict(remarks=["Another remark here"])], ), + dict( + name="testRobustReplace", + acl_type="standard", + aces=[ + dict( + sequence=10, + grant="permit", + remarks=["Remarks for 10"], + source=dict( + address="192.168.1.0", + wildcard_bits="0.0.0.255", + ), + ), + ], + ), ], ), ], @@ -599,9 +643,17 @@ class TestIosAclsModule(TestIosModule): "ip access-list extended replace_acl", "deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos min-monetary-cost", "ip access-list standard test_acl", - "no remark remark check 1", - "no remark some random remark 2", + "no remark", "remark Another remark here", + "ip access-list standard testRobustReplace", + "no 20 remark", + "no 20 permit 0.0.0.0 255.0.0.0", + "no 30 remark", + "no 30 permit 172.16.0.0 0.15.255.255", + "no 40 remark", + "no 40 permit 192.0.2.0 0.0.0.255", + "no 50 remark", + "no 50 permit 198.51.100.0 0.0.0.255", ] self.assertEqual(sorted(result["commands"]), sorted(commands)) @@ -620,9 +672,21 @@ class TestIosAclsModule(TestIosModule): ip access-list extended test-idem 10 permit ip host 10.153.14.21 any 20 permit ip host 10.153.14.22 any + ip access-list standard test-acl-no-seq + permit 10.0.0.0 0.255.255.255 + permit 172.31.16.0 0.0.7.255 + """, + ) + self.execute_show_command_name.return_value = dedent( + """\ + Standard IP access list test_acl + Standard IP access list test-acl-no-seq + Extended IP access list 110 + Extended IP access list test-idem + Extended IP access list test_pre + IPv6 access list R1_TRAFFIC """, ) - self.execute_show_command_name.return_value = dedent("") set_module_args( dict( config=[ @@ -641,7 +705,10 @@ class TestIosAclsModule(TestIosModule): "address": "198.51.100.0", "wildcard_bits": "0.0.0.255", }, - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "log": {"set": True, "user_cookie": "testLog"}, }, { @@ -706,6 +773,26 @@ class TestIosAclsModule(TestIosModule): }, ], }, + { + "name": "test-acl-no-seq", + "acl_type": "standard", + "aces": [ + { + "grant": "permit", + "source": { + "address": "10.0.0.0", + "wildcard_bits": "0.255.255.255", + }, + }, + { + "grant": "permit", + "source": { + "address": "172.31.16.0", + "wildcard_bits": "0.0.7.255", + }, + }, + ], + }, ], }, { @@ -718,7 +805,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "deny", "protocol": "tcp", - "source": {"any": True, "port_protocol": {"eq": "www"}}, + "source": { + "any": True, + "port_protocol": {"eq": "www"}, + }, "destination": { "any": True, "port_protocol": {"eq": "telnet"}, @@ -737,6 +827,64 @@ class TestIosAclsModule(TestIosModule): result = self.execute_module(changed=False) self.assertEqual(sorted(result["commands"]), []) + def test_ios_acls_replaced_changetype(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list extended 110 + 10 permit tcp 198.51.100.0 0.0.0.255 any eq 22 log (tag = testLog) + 20 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + 30 deny icmp object-group test_network_og any dscp ef ttl eq 10 + ip access-list standard test_acl + remark remark check 1 + remark some random remark 2 + """, + ) + self.execute_show_command_name.return_value = dedent( + """\ + Standard IP access list test_acl + """, + ) + set_module_args( + dict( + config=[ + dict( + afi="ipv4", + acls=[ + dict( + name="110", + acl_type="standard", + aces=[ + dict( + grant="deny", + source=dict( + address="198.51.100.0", + wildcard_bits="0.0.0.255", + ), + ), + ], + ), + dict( + name="test_acl", + acl_type="standard", + aces=[dict(remarks=["Another remark here"])], + ), + ], + ), + ], + state="replaced", + ), + ) + result = self.execute_module(changed=True) + commands = [ + "no ip access-list extended 110", + "ip access-list standard 110", + "deny 198.51.100.0 0.0.0.255", + "ip access-list standard test_acl", + "no remark", + "remark Another remark here", + ] + self.assertEqual(sorted(result["commands"]), sorted(commands)) + def test_ios_acls_overridden(self): self.execute_show_command.return_value = dedent( """\ @@ -831,7 +979,10 @@ class TestIosAclsModule(TestIosModule): "address": "198.51.100.0", "wildcard_bits": "0.0.0.255", }, - "destination": {"any": True, "port_protocol": {"eq": "22"}}, + "destination": { + "any": True, + "port_protocol": {"eq": "22"}, + }, "log": {"set": True, "user_cookie": "testLog"}, }, { @@ -874,7 +1025,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "deny", "protocol": "tcp", - "source": {"any": True, "port_protocol": {"eq": "www"}}, + "source": { + "any": True, + "port_protocol": {"eq": "www"}, + }, "destination": { "any": True, "port_protocol": {"eq": "telnet"}, @@ -909,7 +1063,10 @@ class TestIosAclsModule(TestIosModule): self.execute_show_command_name.return_value = dedent("") set_module_args(dict(config=[dict(afi="ipv4")], state="deleted")) result = self.execute_module(changed=True) - commands = ["no ip access-list extended 110", "no ip access-list standard test_acl"] + commands = [ + "no ip access-list extended 110", + "no ip access-list standard test_acl", + ] self.assertEqual(sorted(result["commands"]), sorted(commands)) def test_ios_acls_deleted_acl_based(self): @@ -938,7 +1095,10 @@ class TestIosAclsModule(TestIosModule): grant="deny", protocol_options=dict(icmp=dict(echo="True")), sequence="10", - source=dict(address="192.0.2.0", wildcard_bits="0.0.0.255"), + source=dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + ), destination=dict( address="192.0.3.0", wildcard_bits="0.0.0.255", @@ -960,7 +1120,10 @@ class TestIosAclsModule(TestIosModule): grant="deny", protocol_options=dict(tcp=dict(ack="True")), sequence="10", - source=dict(any="True", port_protocol=dict(eq="www")), + source=dict( + any="True", + port_protocol=dict(eq="www"), + ), destination=dict( any="True", port_protocol=dict(eq="telnet"), @@ -994,9 +1157,15 @@ class TestIosAclsModule(TestIosModule): dict( grant="deny", sequence="10", - remarks=["check for remark", "remark for acl 110"], + remarks=[ + "check for remark", + "remark for acl 110", + ], protocol_options=dict(tcp=dict(syn="True")), - source=dict(address="192.0.2.0", wildcard_bits="0.0.0.255"), + source=dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + ), destination=dict( address="192.0.3.0", wildcard_bits="0.0.0.255", @@ -1015,9 +1184,9 @@ class TestIosAclsModule(TestIosModule): ) commands = [ "ip access-list extended 110", + "10 remark check for remark", + "10 remark remark for acl 110", "10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www syn dscp ef ttl eq 10", - "remark check for remark", - "remark remark for acl 110", ] result = self.execute_module(changed=False) self.assertEqual(sorted(result["rendered"]), sorted(commands)) @@ -1046,7 +1215,9 @@ class TestIosAclsModule(TestIosModule): "source": {"any": True, "port_protocol": {"eq": "www"}}, "destination": { "any": True, - "port_protocol": {"range": {"start": 10, "end": 20}}, + "port_protocol": { + "range": {"start": 10, "end": 20}, + }, }, "dscp": "af11", "protocol_options": {"tcp": {"ack": True}}, @@ -1077,11 +1248,13 @@ class TestIosAclsModule(TestIosModule): def test_ios_acls_parsed_matches(self): self.execute_show_command_name.return_value = dedent("") set_module_args( - dict( - running_config="""ip access-list standard R1_TRAFFIC\n10 permit 10.11.12.13 (2 matches)\n - 40 permit 128.0.0.0, wildcard bits 63.255.255.255 (2 matches)\n60 permit 134.107.136.0, wildcard bits 0.0.0.255 (1 match)""", - state="parsed", - ), + { + "running_config": """ip access-list standard R1_TRAFFIC + 10 permit 10.11.12.13 + 40 permit 128.0.0.0 63.255.255.255 + 60 permit 134.107.136.0 0.0.0.255""", + "state": "parsed", + }, ) result = self.execute_module(changed=False) parsed_list = [ @@ -1092,16 +1265,26 @@ class TestIosAclsModule(TestIosModule): "name": "R1_TRAFFIC", "acl_type": "standard", "aces": [ - {"sequence": 10, "grant": "permit", "source": {"host": "10.11.12.13"}}, + { + "sequence": 10, + "grant": "permit", + "source": {"host": "10.11.12.13"}, + }, { "sequence": 40, "grant": "permit", - "protocol_options": {"protocol_number": 128}, + "source": { + "address": "128.0.0.0", + "wildcard_bits": "63.255.255.255", + }, }, { "sequence": 60, "grant": "permit", - "protocol_options": {"protocol_number": 134}, + "source": { + "address": "134.107.136.0", + "wildcard_bits": "0.0.0.255", + }, }, ], }, @@ -1246,9 +1429,8 @@ class TestIosAclsModule(TestIosModule): "permit 433 198.51.101.0 0.0.0.255 198.51.102.0 0.0.0.255 eq telnet log check tos max-throughput", "permit 198.51.105.0 0.0.0.255 198.51.106.0 0.0.0.255 time-range 20 tos max-throughput", "ip access-list standard test_acl", + "no remark", "remark Another remark here", - "no remark remark check 1", - "no remark some random remark 2", ] self.assertEqual(sorted(result["commands"]), sorted(commands)) @@ -1446,6 +1628,11 @@ class TestIosAclsModule(TestIosModule): dict( running_config=dedent( """\ + ip access-list standard 99 + 10 remark standalone remarks + 20 permit 192.15.0.1 + 30 permit 192.15.0.2 + 40 permit 192.15.0.3 ip access-list standard 2 30 permit 172.16.1.11 20 permit 172.16.1.10 @@ -1543,7 +1730,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 70, "grant": "permit", "protocol": "tcp", - "source": {"address": "10.1.1.0", "wildcard_bits": "0.0.0.255"}, + "source": { + "address": "10.1.1.0", + "wildcard_bits": "0.0.0.255", + }, "destination": { "address": "172.16.1.0", "port_protocol": {"eq": "telnet"}, @@ -1557,9 +1747,43 @@ class TestIosAclsModule(TestIosModule): "name": "2", "acl_type": "standard", "aces": [ - {"sequence": 30, "grant": "permit", "source": {"host": "172.16.1.11"}}, - {"sequence": 20, "grant": "permit", "source": {"host": "172.16.1.10"}}, - {"sequence": 10, "grant": "permit", "source": {"host": "172.16.1.2"}}, + { + "sequence": 30, + "grant": "permit", + "source": {"host": "172.16.1.11"}, + }, + { + "sequence": 20, + "grant": "permit", + "source": {"host": "172.16.1.10"}, + }, + { + "sequence": 10, + "grant": "permit", + "source": {"host": "172.16.1.2"}, + }, + ], + }, + { + "name": "99", + "acl_type": "standard", + "aces": [ + { + "sequence": 20, + "grant": "permit", + "source": {"host": "192.15.0.1"}, + }, + { + "sequence": 30, + "grant": "permit", + "source": {"host": "192.15.0.2"}, + }, + { + "sequence": 40, + "grant": "permit", + "source": {"host": "192.15.0.3"}, + }, + {"sequence": 10, "remarks": ["standalone remarks"]}, ], }, { @@ -1570,7 +1794,10 @@ class TestIosAclsModule(TestIosModule): "sequence": 10, "grant": "permit", "protocol": "icmp", - "source": {"address": "10.1.1.0", "wildcard_bits": "0.0.0.255"}, + "source": { + "address": "10.1.1.0", + "wildcard_bits": "0.0.0.255", + }, "destination": { "address": "172.16.1.0", "wildcard_bits": "0.0.0.255", @@ -1594,7 +1821,10 @@ class TestIosAclsModule(TestIosModule): "grant": "permit", "protocol": "tcp", "source": {"host": "10.1.1.1"}, - "destination": {"host": "10.5.5.5", "port_protocol": {"eq": "www"}}, + "destination": { + "host": "10.5.5.5", + "port_protocol": {"eq": "www"}, + }, }, { "sequence": 30, @@ -1710,6 +1940,28 @@ class TestIosAclsModule(TestIosModule): ], }, { + "name": "99", + "acl_type": "standard", + "aces": [ + { + "sequence": 20, + "grant": "permit", + "source": {"host": "192.15.0.1"}, + }, + { + "sequence": 30, + "grant": "permit", + "source": {"host": "192.15.0.2"}, + }, + { + "sequence": 40, + "grant": "permit", + "source": {"host": "192.15.0.3"}, + }, + {"sequence": 10, "remarks": ["standalone remarks"]}, + ], + }, + { "name": "2", "acl_type": "standard", "aces": [ @@ -1806,6 +2058,11 @@ class TestIosAclsModule(TestIosModule): "50 permit ip any 10.1.1.0 0.0.0.255", "60 permit tcp any host 10.1.1.1 eq telnet", "70 permit tcp 10.1.1.0 0.0.0.255 172.16.1.0 0.0.0.255 eq telnet time-range EVERYOTHERDAY", + "ip access-list standard 99", + "20 permit host 192.15.0.1", + "30 permit host 192.15.0.2", + "40 permit host 192.15.0.3", + "10 remark standalone remarks", "ip access-list standard 2", "30 permit host 172.16.1.11", "20 permit host 172.16.1.10", @@ -1820,3 +2077,196 @@ class TestIosAclsModule(TestIosModule): ] result = self.execute_module(changed=False) self.assertEqual(sorted(result["rendered"]), sorted(commands)) + + def test_ios_acls_overridden_sticky_remarks(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list standard test123 + 10 remark TEST + 10 permit 8.8.8.8 + 20 remark TEST + 20 permit 8.8.4.4 + """, + ) + self.execute_show_command_name.return_value = dedent("") + + set_module_args( + dict( + config=[ + dict( + afi="ipv4", + acls=[ + dict( + name="test123", + acl_type="standard", + aces=[ + dict( + grant="permit", + source=dict( + address="8.8.128.0", + wildcard_bits="0.0.0.63", + ), + remarks=["TEST", "TEST 2"], + sequence=10, + ), + dict( + grant="permit", + source=dict( + host="8.8.4.4", + ), + remarks=["TEST"], + sequence=20, + ), + ], + ), + ], + ), + ], + state="overridden", + ), + ) + result = self.execute_module(changed=True) + commands = [ + "ip access-list standard test123", + "no 10 remark", + "no 10 permit host 8.8.8.8", + "10 remark TEST", + "10 remark TEST 2", + "10 permit 8.8.128.0 0.0.0.63", + ] + self.assertEqual(sorted(result["commands"]), sorted(commands)) + + def test_ios_acls_overridden_remarks_complex(self): + self.execute_show_command.return_value = dedent( + """\ + ip access-list extended TEST + 10 remark FIRST REMARK BEFORE SEQUENCE 10 + 10 remark ============ + 10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE + 20 remark FIRST REMARK BEFORE SEQUENCE 20 + 20 remark ============ + 20 remark ALLOW HOST FROM SEQUENCE 20 + 20 permit ip host 1.1.1.1 any + 30 remark FIRST REMARK BEFORE SEQUENCE 30 + 30 remark ============ + 30 remark ALLOW HOST FROM SEQUENCE 30 + 30 permit ip host 2.2.2.2 any + 40 remark FIRST REMARK BEFORE SEQUENCE 40 + 40 remark ============ + 40 remark ALLOW NEW HOST FROM SEQUENCE 40 + 40 permit ip host 3.3.3.3 any + remark Remark not specific to sequence + remark ============ + remark End Remarks + ip access-list extended test_acl + 10 deny tcp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 eq www fin option traceroute ttl eq 10 + ip access-list extended 110 + 10 deny icmp 192.0.2.0 0.0.0.255 192.0.3.0 0.0.0.255 echo dscp ef ttl eq 10 + ip access-list extended 123 + 10 deny tcp 198.51.100.0 0.0.0.255 198.51.101.0 0.0.0.255 eq telnet ack tos 12 + 20 deny tcp 192.0.3.0 0.0.0.255 192.0.4.0 0.0.0.255 eq www ack dscp ef ttl lt 20 + ipv6 access-list R1_TRAFFIC + sequence 10 deny tcp any eq www any eq telnet ack dscp af11 + """, + ) + self.execute_show_command_name.return_value = dedent("") + set_module_args( + dict( + config=[ + { + "afi": "ipv4", + "acls": [ + { + "name": "TEST", + "acl_type": "extended", + "aces": [ + { + "sequence": 10, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 10", + "============", + "REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "1.1.1.1"}, + "destination": {"any": True}, + }, + { + "sequence": 20, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 20", + "============", + "ALLOW HOST FROM SEQUENCE 20", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "192.168.0.1"}, + "destination": {"any": True}, + }, + { + "sequence": 30, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 30", + "============", + "ALLOW HOST FROM SEQUENCE 30 updated", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "2.2.2.2"}, + "destination": {"any": True}, + }, + { + "sequence": 40, + "remarks": [ + "FIRST REMARK BEFORE SEQUENCE 40", + "============", + "ALLOW NEW HOST FROM SEQUENCE 40", + ], + "grant": "permit", + "protocol": "ip", + "source": {"host": "3.3.3.3"}, + "destination": {"any": True}, + }, + { + "remarks": [ + "Remark not specific to sequence", + "============", + "End Remarks 1", + ], + }, + ], + }, + ], + }, + ], + state="overridden", + ), + ) + result = self.execute_module(changed=True) + commands = [ + "no ipv6 access-list R1_TRAFFIC", + "ip access-list extended TEST", + "no 10", # removes all remarks and ace entry for sequence 10 + "no 20 permit ip host 1.1.1.1 any", # removing the ace automatically removes the remarks + "no 30 remark", # just remove remarks for sequence 30 + "no remark", # remove all remarks at end of acl, that has no sequence + "10 remark FIRST REMARK BEFORE SEQUENCE 10", + "10 remark ============", + "10 remark REMARKS FOR SEQUENCE 10 NO FOLLOWING ACE", + "10 permit ip host 1.1.1.1 any", + "20 remark FIRST REMARK BEFORE SEQUENCE 20", + "20 remark ============", + "20 remark ALLOW HOST FROM SEQUENCE 20", + "20 permit ip host 192.168.0.1 any", + "30 remark FIRST REMARK BEFORE SEQUENCE 30", + "30 remark ============", + "30 remark ALLOW HOST FROM SEQUENCE 30 updated", + "remark Remark not specific to sequence", + "remark ============", + "remark End Remarks 1", + "no ip access-list extended 110", + "no ip access-list extended 123", + "no ip access-list extended test_acl", + ] + self.assertEqual(sorted(result["commands"]), sorted(commands)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py index 85e2736f0..b114d1817 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_banner.py @@ -18,9 +18,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_banner -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -77,7 +77,11 @@ class TestIosBannerModule(TestIosModule): def test_ios_banner_create_delimiter(self): for banner_type in ("login", "motd", "exec", "incoming", "slip-ppp"): set_module_args( - dict(banner=banner_type, text="test\nbanner\nstring", multiline_delimiter="c"), + dict( + banner=banner_type, + text="test\nbanner\nstring", + multiline_delimiter="c", + ), ) commands = ["banner {0} c\ntest\nbanner\nstring\nc".format(banner_type)] self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py deleted file mode 100644 index 0145a3c6a..000000000 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp.py +++ /dev/null @@ -1,344 +0,0 @@ -# -# (c) 2019, Ansible by Red Hat, 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 - -from ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.cli.config.bgp.process import ( - Provider, -) -from ansible_collections.cisco.ios.plugins.modules import ios_bgp - -from .ios_module import TestIosModule, load_fixture - - -class TestIosBgpModule(TestIosModule): - module = ios_bgp - - def setUp(self): - super(TestIosBgpModule, self).setUp() - self._bgp_config = load_fixture("ios_bgp_config.cfg") - - def test_ios_bgp(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - router_id="192.0.2.2", - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, ["router bgp 64496", "bgp router-id 192.0.2.2", "exit"]) - - def test_ios_bgp_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - router_id="192.0.2.1", - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_remove(self): - obj = Provider( - params=dict( - config=dict(bgp_as=64496, networks=None, address_family=None), - operation="delete", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, ["no router bgp 64496"]) - - def test_ios_bgp_neighbor(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - neighbors=[dict(neighbor="192.51.100.2", remote_as=64496)], - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - commands, - ["router bgp 64496", "neighbor 192.51.100.2 remote-as 64496", "exit"], - ) - - def test_ios_bgp_neighbor_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - neighbors=[ - dict( - neighbor="192.51.100.1", - remote_as=64496, - timers=dict(keepalive=120, holdtime=360, min_neighbor_holdtime=360), - ), - ], - networks=None, - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_network(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - networks=[dict(prefix="192.0.1.0", masklen=23, route_map="RMAP_1")], - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual( - sorted(commands), - sorted( - [ - "router bgp 64496", - "network 192.0.1.0 mask 255.255.254.0 route-map RMAP_1", - "exit", - ], - ), - ) - - def test_ios_bgp_network_idempotent(self): - obj = Provider( - params=dict( - config=dict( - bgp_as=64496, - networks=[ - dict(prefix="192.0.2.0", masklen=23, route_map="RMAP_1"), - dict(prefix="198.51.100.0", masklen=25, route_map="RMAP_2"), - ], - address_family=None, - ), - operation="merge", - ), - ) - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_address_family_redistribute(self): - rd_1 = dict(protocol="ospf", id="233", metric=90, route_map=None) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="unicast", redistribute=[rd_1])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4", - "redistribute ospf 233 metric 90", - "exit-address-family", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_address_family_redistribute_idempotent(self): - rd_1 = dict(protocol="eigrp", metric=10, route_map="RMAP_3", id=None) - rd_2 = dict(protocol="static", metric=100, id=None, route_map=None) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="unicast", redistribute=[rd_1, rd_2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_address_family_neighbors(self): - af_nbr_1 = dict(neighbor="192.51.100.1", maximum_prefix=35, activate=True) - af_nbr_2 = dict(neighbor="192.51.100.3", route_reflector_client=True, activate=True) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="multicast", neighbors=[af_nbr_1, af_nbr_2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4 multicast", - "neighbor 192.51.100.1 activate", - "neighbor 192.51.100.1 maximum-prefix 35", - "neighbor 192.51.100.3 activate", - "neighbor 192.51.100.3 route-reflector-client", - "exit-address-family", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_address_family_neighbors_idempotent(self): - af_nbr_1 = dict(neighbor="203.0.113.1", remove_private_as=True, maximum_prefix=100) - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="unicast", neighbors=[af_nbr_1])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_address_family_networks(self): - net = dict(prefix="1.0.0.0", masklen=8, route_map="RMAP_1") - net2 = dict(prefix="192.168.1.0", masklen=24, route_map="RMAP_2") - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="multicast", networks=[net, net2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - cmd = [ - "router bgp 64496", - "address-family ipv4 multicast", - "network 1.0.0.0 mask 255.0.0.0 route-map RMAP_1", - "network 192.168.1.0 mask 255.255.255.0 route-map RMAP_2", - "exit-address-family", - "exit", - ] - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_address_family_networks_idempotent(self): - net = dict(prefix="203.0.113.0", masklen=27, route_map="RMAP_1") - net2 = dict(prefix="192.0.2.0", masklen=26, route_map="RMAP_2") - - config = dict( - bgp_as=64496, - address_family=[dict(afi="ipv4", safi="multicast", networks=[net, net2])], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="merge")) - - commands = obj.render(self._bgp_config) - self.assertEqual(commands, []) - - def test_ios_bgp_operation_override(self): - net_1 = dict(prefix="1.0.0.0", masklen=8, route_map="RMAP_1") - net_2 = dict(prefix="192.168.1.0", masklen=24, route_map="RMAP_2") - nbr_1 = dict(neighbor="192.51.100.1", remote_as=64496, update_source="GigabitEthernet0/1") - nbr_2 = dict( - neighbor="192.51.100.3", - remote_as=64496, - timers=dict(keepalive=300, holdtime=360, min_neighbor_holdtime=360), - ) - af_nbr_1 = dict(neighbor="192.51.100.1", maximum_prefix=35) - af_nbr_2 = dict(neighbor="192.51.100.3", route_reflector_client=True) - - af_1 = dict(afi="ipv4", safi="unicast", neighbors=[af_nbr_1, af_nbr_2]) - af_2 = dict(afi="ipv4", safi="multicast", networks=[net_1, net_2]) - config = dict( - bgp_as=64496, - neighbors=[nbr_1, nbr_2], - address_family=[af_1, af_2], - networks=None, - ) - - obj = Provider(params=dict(config=config, operation="override")) - commands = obj.render(self._bgp_config) - - cmd = [ - "no router bgp 64496", - "router bgp 64496", - "neighbor 192.51.100.1 remote-as 64496", - "neighbor 192.51.100.1 update-source GigabitEthernet0/1", - "neighbor 192.51.100.3 remote-as 64496", - "neighbor 192.51.100.3 timers 300 360 360", - "address-family ipv4", - "neighbor 192.51.100.1 maximum-prefix 35", - "neighbor 192.51.100.3 route-reflector-client", - "exit-address-family", - "address-family ipv4 multicast", - "network 1.0.0.0 mask 255.0.0.0 route-map RMAP_1", - "network 192.168.1.0 mask 255.255.255.0 route-map RMAP_2", - "exit-address-family", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_operation_replace(self): - rd = dict(protocol="ospf", id=223, metric=110, route_map=None) - net = dict(prefix="203.0.113.0", masklen=27, route_map="RMAP_1") - net2 = dict(prefix="192.0.2.0", masklen=26, route_map="RMAP_2") - - af_1 = dict(afi="ipv4", safi="unicast", redistribute=[rd]) - af_2 = dict(afi="ipv4", safi="multicast", networks=[net, net2]) - - config = dict(bgp_as=64496, address_family=[af_1, af_2], networks=None) - obj = Provider(params=dict(config=config, operation="replace")) - commands = obj.render(self._bgp_config) - - cmd = [ - "router bgp 64496", - "address-family ipv4", - "redistribute ospf 223 metric 110", - "no redistribute eigrp", - "no redistribute static", - "exit-address-family", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) - - def test_ios_bgp_operation_replace_with_new_as(self): - rd = dict(protocol="ospf", id=223, metric=110, route_map=None) - - af_1 = dict(afi="ipv4", safi="unicast", redistribute=[rd]) - - config = dict(bgp_as=64497, address_family=[af_1], networks=None) - obj = Provider(params=dict(config=config, operation="replace")) - commands = obj.render(self._bgp_config) - - cmd = [ - "no router bgp 64496", - "router bgp 64497", - "address-family ipv4", - "redistribute ospf 223 metric 110", - "exit-address-family", - "exit", - ] - - self.assertEqual(sorted(commands), sorted(cmd)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py index 259da5ece..ea5d279f4 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_address_family.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_bgp_address_family -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -119,8 +118,12 @@ class TestIosBgpAddressFamilyModule(TestIosModule): dict( neighbor_address="198.51.100.1", remote_as="65.11", - route_maps=[dict(name="test-route-out", out="true")], - prefix_lists=[dict(name="AS65100-PREFIX-OUT", out="true")], + route_maps=[ + dict(name="test-route-out", out="true"), + ], + prefix_lists=[ + dict(name="AS65100-PREFIX-OUT", out="true"), + ], ), ], ), @@ -128,7 +131,9 @@ class TestIosBgpAddressFamilyModule(TestIosModule): afi="nsap", bgp=dict(aggregate_timer=20, dmzlink_bw=True, scan_time=10), default_metric=10, - networks=[dict(address="192.0.1.1", route_map="test_route")], + networks=[ + dict(address="192.0.1.1", route_map="test_route"), + ], ), ], ), @@ -317,18 +322,25 @@ class TestIosBgpAddressFamilyModule(TestIosModule): "send": { "cost_community": { "id": 100, - "poi": {"igp_cost": True, "transitive": True}, + "poi": { + "igp_cost": True, + "transitive": True, + }, }, }, }, "local_as": {"number": "10.64760", "set": True}, "neighbor_address": "198.51.100.1", "nexthop_self": {"all": True}, - "prefix_lists": [{"name": "AS65100-PREFIX-OUT", "out": True}], + "prefix_lists": [ + {"name": "AS65100-PREFIX-OUT", "out": True}, + ], "remote_as": 10, "route_maps": [{"name": "test-out", "out": True}], "route_server_client": True, - "slow_peer_options": {"detection": {"threshold": 150}}, + "slow_peer_options": { + "detection": {"threshold": 150}, + }, }, ], "networks": [ @@ -426,7 +438,9 @@ class TestIosBgpAddressFamilyModule(TestIosModule): address="198.51.110.1", activate=True, remote_as=200, - route_maps=[dict(name="test-replaced-route", out=True)], + route_maps=[ + dict(name="test-replaced-route", out=True), + ], ), ], ), @@ -534,12 +548,17 @@ class TestIosBgpAddressFamilyModule(TestIosModule): send=dict( cost_community=dict( id=100, - poi=dict(igp_cost=True, transitive=True), + poi=dict( + igp_cost=True, + transitive=True, + ), ), ), ), nexthop_self=dict(all=True), - prefix_lists=[dict(name="AS65100-PREFIX-OUT", out="true")], + prefix_lists=[ + dict(name="AS65100-PREFIX-OUT", out="true"), + ], slow_peer=[dict(detection=dict(threshold=150))], remote_as=10, local_as=dict(number=20), @@ -709,12 +728,17 @@ class TestIosBgpAddressFamilyModule(TestIosModule): send=dict( cost_community=dict( id=100, - poi=dict(igp_cost=True, transitive=True), + poi=dict( + igp_cost=True, + transitive=True, + ), ), ), ), nexthop_self=dict(all=True), - prefix_lists=[dict(name="AS65100-PREFIX-OUT", out="true")], + prefix_lists=[ + dict(name="AS65100-PREFIX-OUT", out="true"), + ], slow_peer=[dict(detection=dict(threshold=150))], remote_as=10, local_as=dict(number=20), @@ -937,7 +961,10 @@ class TestIosBgpAddressFamilyModule(TestIosModule): send=dict( cost_community=dict( id=100, - poi=dict(igp_cost=True, transitive=True), + poi=dict( + igp_cost=True, + transitive=True, + ), ), ), ), @@ -1152,7 +1179,11 @@ class TestIosBgpAddressFamilyModule(TestIosModule): }, }, "networks": [ - {"address": "198.51.110.10", "mask": "255.255.255.255", "backdoor": True}, + { + "address": "198.51.110.10", + "mask": "255.255.255.255", + "backdoor": True, + }, ], "aggregate_addresses": [ { @@ -1177,7 +1208,9 @@ class TestIosBgpAddressFamilyModule(TestIosModule): }, }, "route_server_client": True, - "prefix_lists": [{"name": "AS65100-PREFIX-OUT", "out": True}], + "prefix_lists": [ + {"name": "AS65100-PREFIX-OUT", "out": True}, + ], "slow_peer_options": {"detection": {"threshold": 150}}, "route_maps": [{"name": "test-out", "out": True}], }, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py index 95aa8d8e9..16a4c9b5c 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_bgp_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_bgp_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import AnsibleFailJson, set_module_args from .ios_module import TestIosModule @@ -67,8 +66,16 @@ class TestIosBgpGlobalModule(TestIosModule): "netmask": "255.255.0.0", "summary_only": True, }, - {"address": "192.0.2.4", "as_set": True, "netmask": "255.255.255.0"}, - {"address": "192.0.2.5", "as_set": True, "netmask": "255.255.255.0"}, + { + "address": "192.0.2.4", + "as_set": True, + "netmask": "255.255.255.0", + }, + { + "address": "192.0.2.5", + "as_set": True, + "netmask": "255.255.255.0", + }, ], "as_number": "65000", "auto_summary": True, @@ -83,7 +90,9 @@ class TestIosBgpGlobalModule(TestIosModule): "med": {"confed": True, "missing_as_worst": True}, }, "confederation": {"identifier": "22"}, - "consistency_checker": {"error_message": {"interval": 10, "set": True}}, + "consistency_checker": { + "error_message": {"interval": 10, "set": True}, + }, "dampening": { "max_suppress": 44, "penalty_half_time": 22, @@ -98,12 +107,23 @@ class TestIosBgpGlobalModule(TestIosModule): "neighbors": {"time": 31}, }, "inject_maps": [ - {"copy_attributes": True, "exist_map_name": "mp2", "name": "map1"}, - {"copy_attributes": True, "exist_map_name": "mp3", "name": "map2"}, + { + "copy_attributes": True, + "exist_map_name": "mp2", + "name": "map1", + }, + { + "copy_attributes": True, + "exist_map_name": "mp3", + "name": "map2", + }, ], "listen": { "limit": 200, - "range": {"host_with_subnet": "192.0.2.9/24", "peer_group": "mygrp"}, + "range": { + "host_with_subnet": "192.0.2.9/24", + "peer_group": "mygrp", + }, }, "log_neighbor_changes": True, "maxas_limit": 2, @@ -132,8 +152,16 @@ class TestIosBgpGlobalModule(TestIosModule): }, "bmp": {"buffer_size": 22}, "distance": { - "bgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 4}, - "mbgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 5}, + "bgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 4, + }, + "mbgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 5, + }, }, "distributes": [ {"out": True, "prefix": "workcheck"}, @@ -141,6 +169,7 @@ class TestIosBgpGlobalModule(TestIosModule): ], "maximum_paths": {"ibgp": 22}, "maximum_secondary_paths": {"ibgp": 22, "paths": 12}, + "template": {"peer_policy": "Test1"}, "neighbors": [ { "neighbor_address": "192.0.2.3", @@ -165,7 +194,13 @@ class TestIosBgpGlobalModule(TestIosModule): ], "redistribute": [ {"application": {"metric": 22, "name": "ap1"}}, - {"application": {"metric": 33, "name": "ap112", "route_map": "mp1"}}, + { + "application": { + "metric": 33, + "name": "ap112", + "route_map": "mp1", + }, + }, {"connected": {"metric": 22}}, {"static": {"metric": 33, "route_map": "mp1"}}, {"mobile": {"metric": 211}}, @@ -232,6 +267,7 @@ class TestIosBgpGlobalModule(TestIosModule): "neighbor 192.0.2.3 remote-as 300", "neighbor 192.0.2.3 timers 10 20", "redistribute connected metric 22", + "template peer-policy Test1", "redistribute mobile metric 211", "redistribute application ap1 metric 22", "redistribute static metric 33 route-map mp1", @@ -347,11 +383,23 @@ class TestIosBgpGlobalModule(TestIosModule): config=dict( as_number="65000", aggregate_address=dict( - dict(address="192.168.0.11", attribute_map="map1", netmask="255.255.0.0"), + dict( + address="192.168.0.11", + attribute_map="map1", + netmask="255.255.0.0", + ), ), aggregate_addresses=[ - dict(address="192.168.0.1", attribute_map="map", netmask="255.255.0.0"), - dict(address="192.168.0.2", attribute_map="map2", netmask="255.255.0.0"), + dict( + address="192.168.0.1", + attribute_map="map", + netmask="255.255.0.0", + ), + dict( + address="192.168.0.2", + attribute_map="map2", + netmask="255.255.0.0", + ), ], bgp=dict( advertise_best_external=True, @@ -361,7 +409,11 @@ class TestIosBgpGlobalModule(TestIosModule): ), redistribute=[dict(connected=dict(set=True, metric=10))], neighbors=[ - dict(address="192.0.2.1", remote_as=200, description="replace neighbor"), + dict( + address="192.0.2.1", + remote_as=200, + description="replace neighbor", + ), ], ), state="overridden", @@ -403,21 +455,41 @@ class TestIosBgpGlobalModule(TestIosModule): config=dict( as_number="65000", aggregate_address=dict( - dict(address="192.168.0.11", attribute_map="map1", netmask="255.255.0.0"), + dict( + address="192.168.0.11", + attribute_map="map1", + netmask="255.255.0.0", + ), ), aggregate_addresses=[ - dict(address="192.168.0.1", attribute_map="map", netmask="255.255.0.0"), - dict(address="192.168.0.2", attribute_map="map2", netmask="255.255.0.0"), + dict( + address="192.168.0.1", + attribute_map="map", + netmask="255.255.0.0", + ), + dict( + address="192.168.0.2", + attribute_map="map2", + netmask="255.255.0.0", + ), ], bgp=dict( advertise_best_external=True, bestpath_options=dict(compare_routerid=True), + default=dict( + ipv4_unicast=False, + route_target=dict(filter=True), + ), log_neighbor_changes=True, nopeerup_delay_options=dict(cold_boot=20, post_boot=10), ), redistribute=[dict(connected=dict(set=True, metric=10))], neighbors=[ - dict(address="192.0.2.1", remote_as=200, description="replace neighbor"), + dict( + address="192.0.2.1", + remote_as=200, + description="replace neighbor", + ), ], ), state="replaced", @@ -425,6 +497,7 @@ class TestIosBgpGlobalModule(TestIosModule): ) commands = [ "router bgp 65000", + "no bgp default ipv4-unicast", "no timers bgp 100 200 150", "bgp log-neighbor-changes", "bgp nopeerup-delay cold-boot 20", @@ -481,6 +554,7 @@ class TestIosBgpGlobalModule(TestIosModule): self.execute_show_command.return_value = dedent( """\ router bgp 65000 + no bgp default ipv4-unicast bgp nopeerup-delay post-boot 10 bgp bestpath compare-routerid bgp advertise-best-external @@ -496,6 +570,7 @@ class TestIosBgpGlobalModule(TestIosModule): set_module_args(dict(config=dict(as_number=65000), state="deleted")) commands = [ "router bgp 65000", + "bgp default ipv4-unicast", "no timers bgp 100 200 150", "no bgp advertise-best-external", "no bgp bestpath compare-routerid", @@ -561,7 +636,10 @@ class TestIosBgpGlobalModule(TestIosModule): }, "listen": { "limit": 200, - "range": {"ipv4_with_subnet": "192.0.2.9/24", "peer_group": "mygrp"}, + "range": { + "ipv4_with_subnet": "192.0.2.9/24", + "peer_group": "mygrp", + }, }, "log_neighbor_changes": True, "nopeerup_delay": [ @@ -575,10 +653,22 @@ class TestIosBgpGlobalModule(TestIosModule): }, "bmp": {"buffer_size": 22, "server": 2}, "distance": { - "bgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 4}, - "mbgp": {"routes_external": 2, "routes_internal": 3, "routes_local": 5}, + "bgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 4, + }, + "mbgp": { + "routes_external": 2, + "routes_internal": 3, + "routes_local": 5, + }, + }, + "distribute_list": { + "out": True, + "acl": "5000", + "interface": "Loopback0", }, - "distribute_list": {"out": True, "acl": "5000", "interface": "Loopback0"}, "maximum_paths": {"ibgp": 2, "paths": 2}, "maximum_secondary_paths": {"ibgp": 22, "paths": 22}, "neighbors": [ @@ -613,7 +703,11 @@ class TestIosBgpGlobalModule(TestIosModule): "send_community": {"extended": True}, "password": "new password", }, - {"activate": True, "neighbor_address": "172.21.1.2", "remote_as": 45000}, + { + "activate": True, + "neighbor_address": "172.21.1.2", + "remote_as": 45000, + }, {"neighbor_address": "192.0.2.3", "remote_as": 300}, { "neighbor_address": "192.0.2.4", @@ -655,7 +749,13 @@ class TestIosBgpGlobalModule(TestIosModule): "redistribute": [ {"static": {"metric": 33, "route_map": "mp1"}}, {"application": {"metric": 22, "name": "ap1"}}, - {"application": {"metric": 33, "name": "ap112", "route_map": "mp1"}}, + { + "application": { + "metric": 33, + "name": "ap112", + "route_map": "mp1", + }, + }, {"connected": {"metric": 22}}, {"mobile": {"metric": 211}}, ], @@ -751,6 +851,7 @@ class TestIosBgpGlobalModule(TestIosModule): "bgp": { "nopeerup_delay_options": {"post_boot": 10}, "bestpath_options": {"compare_routerid": True}, + "default": {"ipv4_unicast": True, "route_target": {"filter": True}}, "advertise_best_external": True, }, "timers": {"keepalive": 100, "holdtime": 200, "min_holdtime": 150}, @@ -764,3 +865,136 @@ class TestIosBgpGlobalModule(TestIosModule): ], } self.assertEqual(parsed_list, result["parsed"]) + + def test_ios_bgp_global_action_states_specific_default(self): + self.execute_show_command.return_value = dedent( + """\ + router bgp 6500 + bgp log-neighbor-changes + no bgp default ipv4-unicast + no bgp default route-target filter + neighbor 192.0.2.1 remote-as 100 + neighbor 192.0.2.1 description Test description + neighbor 192.0.2.2 remote-as 200 + neighbor 192.0.2.2 description Test description 2 + neighbor 192.0.2.2 shutdown + ! + address-family ipv4 + exit-address-family + """, + ) + for stt in ["merged", "replaced", "overridden"]: + set_module_args( + { + "config": { + "as_number": "6500", + "bgp": { + "default": { + "ipv4_unicast": False, + "route_target": { + "filter": False, + }, + }, + "log_neighbor_changes": True, + }, + "neighbors": [ + { + "neighbor_address": "192.0.2.1", + "remote_as": "100", + "description": "Test description", + "shutdown": { # Don't have in config, adding + "set": True, + }, + }, + { + "neighbor_address": "192.0.2.2", + "remote_as": "200", + "description": "Test description 2", + "shutdown": { # Have in config negating with false + "set": False, + }, + }, + ], + }, + "state": stt, + }, + ) + commands = [ + "router bgp 6500", + "neighbor 192.0.2.1 shutdown", + "no neighbor 192.0.2.2 shutdown", + ] + result = self.execute_module(changed=True) + self.assertEqual(sorted(result["commands"]), sorted(commands)) + + def test_ios_bgp_global_action_states_no_default(self): + self.execute_show_command.return_value = dedent( + """\ + router bgp 6500 + bgp log-neighbor-changes + no bgp default ipv4-unicast + no bgp default route-target filter + neighbor 192.0.2.1 remote-as 100 + neighbor 192.0.2.1 description Test description + neighbor 192.0.2.1 shutdown + neighbor 192.0.2.2 remote-as 200 + neighbor 192.0.2.2 description Test description 2 + neighbor 192.0.2.2 shutdown + neighbor 192.0.2.3 remote-as 300 + neighbor 192.0.2.3 description Test description 3 + neighbor 192.0.2.4 remote-as 400 + neighbor 192.0.2.4 description Test description 4 + ! + address-family ipv4 + exit-address-family + """, + ) + for stt in ["replaced", "overridden"]: + set_module_args( + { + "config": { + "as_number": "6500", + "bgp": { + "default": { + "ipv4_unicast": False, + "route_target": { + "filter": False, + }, + }, + "log_neighbor_changes": True, + }, + "neighbors": [ + { + "neighbor_address": "192.0.2.1", + "remote_as": "100", + "description": "Test description", + "shutdown": { # Have in config not adding again (idempotent) + "set": True, + }, + }, + { + "neighbor_address": "192.0.2.2", + "remote_as": "200", + "description": "Test description 2", # Have in config but don't want (to be removed) + }, + { + "neighbor_address": "192.0.2.3", + "remote_as": "300", + "description": "Test description 3", # Don't have in config don't want + }, + { + "neighbor_address": "192.0.2.4", + "remote_as": "400", + "description": "Test description 4", + "shutdown": { # Don't have in config, explicitly don't want + "set": False, + }, + }, + ], + }, + "state": stt, + }, + ) + commands = ["router bgp 6500", "no neighbor 192.0.2.2 shutdown"] + result = self.execute_module(changed=True) + self.assertEqual(sorted(result["commands"]), sorted(commands)) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py index 42fee4028..69788ef3e 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_command.py @@ -20,11 +20,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - import json +from unittest.mock import patch + from ansible_collections.cisco.ios.plugins.modules import ios_command -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -97,17 +97,26 @@ class TestIosCommandModule(TestIosModule): self.assertEqual(self.run_commands.call_count, 1) def test_ios_command_match_any(self): - wait_for = ['result[0] contains "Cisco IOS"', 'result[0] contains "test string"'] + wait_for = [ + 'result[0] contains "Cisco IOS"', + 'result[0] contains "test string"', + ] set_module_args(dict(commands=["show version"], wait_for=wait_for, match="any")) self.execute_module() def test_ios_command_match_all(self): - wait_for = ['result[0] contains "Cisco IOS"', 'result[0] contains "IOSv Software"'] + wait_for = [ + 'result[0] contains "Cisco IOS"', + 'result[0] contains "IOSv Software"', + ] set_module_args(dict(commands=["show version"], wait_for=wait_for, match="all")) self.execute_module() def test_ios_command_match_all_failure(self): - wait_for = ['result[0] contains "Cisco IOS"', 'result[0] contains "test string"'] + wait_for = [ + 'result[0] contains "Cisco IOS"', + '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/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py index 778bb1ccb..7fa3931d0 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_config.py @@ -21,10 +21,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import MagicMock, patch from ansible_collections.cisco.ios.plugins.cliconf.ios import Cliconf from ansible_collections.cisco.ios.plugins.modules import ios_config -from ansible_collections.cisco.ios.tests.unit.compat.mock import MagicMock, patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -123,7 +123,10 @@ class TestIosConfigModule(TestIosModule): lines = ["hostname foo"] set_module_args(dict(lines=lines)) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) commands = ["hostname foo"] self.execute_module(changed=True, commands=commands) @@ -137,7 +140,10 @@ class TestIosConfigModule(TestIosModule): candidate_config = ios_config.get_candidate_config(module) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff(candidate_config, self.running_config), + return_value=self.cliconf_obj.get_diff( + candidate_config, + self.running_config, + ), ) commands = ["interface GigabitEthernet0/0", "shutdown"] @@ -147,7 +153,10 @@ class TestIosConfigModule(TestIosModule): lines = ["hostname foo"] set_module_args(dict(lines=lines, before=["test1", "test2"])) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) commands = ["test1", "test2", "hostname foo"] self.execute_module(changed=True, commands=commands, sort=False) @@ -156,16 +165,24 @@ class TestIosConfigModule(TestIosModule): lines = ["hostname foo"] set_module_args(dict(lines=lines, after=["test1", "test2"])) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) commands = ["hostname foo", "test1", "test2"] self.execute_module(changed=True, commands=commands, sort=False) def test_ios_config_before_after_no_change(self): lines = ["hostname router"] - set_module_args(dict(lines=lines, before=["test1", "test2"], after=["test3", "test4"])) + set_module_args( + dict(lines=lines, before=["test1", "test2"], after=["test3", "test4"]), + ) self.conn.get_diff = MagicMock( - return_value=self.cliconf_obj.get_diff("\n".join(lines), self.running_config), + return_value=self.cliconf_obj.get_diff( + "\n".join(lines), + self.running_config, + ), ) self.execute_module() @@ -242,7 +259,11 @@ class TestIosConfigModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_config_match_strict(self): - lines = ["ip address 1.2.3.4 255.255.255.0", "description test string", "shutdown"] + lines = [ + "ip address 1.2.3.4 255.255.255.0", + "description test string", + "shutdown", + ] parents = ["interface GigabitEthernet0/0"] set_module_args(dict(lines=lines, parents=parents, match="strict")) @@ -262,7 +283,11 @@ class TestIosConfigModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_config_match_exact(self): - lines = ["ip address 1.2.3.4 255.255.255.0", "description test string", "shutdown"] + lines = [ + "ip address 1.2.3.4 255.255.255.0", + "description test string", + "shutdown", + ] parents = ["interface GigabitEthernet0/0"] set_module_args(dict(lines=lines, parents=parents, match="exact")) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py index 94008b0aa..e1178a21f 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_evi.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_evpn_evi -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py index d3bfa1585..76f467411 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_evpn_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_evpn_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py index a99d7f011..4878d4ad7 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_facts.py @@ -19,11 +19,11 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible.module_utils.six import assertCountEqual from ansible_collections.cisco.ios.plugins.modules import ios_facts -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -80,8 +80,14 @@ class TestIosFactsModule(TestIosModule): set_module_args(dict(gather_subset="default")) result = self.execute_module() self.assertEqual(result["ansible_facts"]["ansible_net_model"], "WS-C3750-24TS") - self.assertEqual(result["ansible_facts"]["ansible_net_serialnum"], "CAT0726R0ZU") - self.assertEqual(result["ansible_facts"]["ansible_net_operatingmode"], "autonomous") + self.assertEqual( + result["ansible_facts"]["ansible_net_serialnum"], + "CAT0726R0ZU", + ) + self.assertEqual( + result["ansible_facts"]["ansible_net_operatingmode"], + "autonomous", + ) self.assertEqual( result["ansible_facts"]["ansible_net_stacked_models"], ["WS-C3750-24TS-E", "WS-C3750-24TS-E", "WS-C3750G-12S-E"], @@ -95,10 +101,16 @@ class TestIosFactsModule(TestIosModule): set_module_args(dict(gather_subset="interfaces")) result = self.execute_module() self.assertEqual( - result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet0/0"]["macaddress"], + result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet0/0/0.1012"][ + "macaddress" + ], "5e00.0003.0000", ) self.assertEqual( + result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet0/0"]["macaddress"], + "5e00.0008.0000", + ) + self.assertEqual( result["ansible_facts"]["ansible_net_interfaces"]["GigabitEthernet1"]["macaddress"], "5e00.0006.0000", ) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py index 6b16bddf0..359cf562a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_hostname.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_hostname -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py index caac40ccb..63ee2341b 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -150,7 +149,10 @@ class TestIosInterfacesModule(TestIosModule): set_module_args( { "config": [ - {"description": "Ansible UT interface 1", "name": "GigabitEthernet1"}, + { + "description": "Ansible UT interface 1", + "name": "GigabitEthernet1", + }, { "description": "Ansible UT interface 2", "name": "GigabitEthernet0/1", @@ -204,7 +206,10 @@ class TestIosInterfacesModule(TestIosModule): set_module_args( { "config": [ - {"description": "Ansible UT interface 1", "name": "GigabitEthernet1"}, + { + "description": "Ansible UT interface 1", + "name": "GigabitEthernet1", + }, {"name": "GigabitEthernet0/1", "speed": 1200, "mtu": 1800}, { "name": "GigabitEthernet6", @@ -267,7 +272,10 @@ class TestIosInterfacesModule(TestIosModule): set_module_args( { "config": [ - {"description": "Ansible UT interface 1", "name": "GigabitEthernet1"}, + { + "description": "Ansible UT interface 1", + "name": "GigabitEthernet1", + }, { "description": "Ansible UT interface 2", "name": "GigabitEthernet0/1", @@ -570,14 +578,22 @@ class TestIosInterfacesModule(TestIosModule): "mtu": 1500, "enabled": True, }, - {"name": "GigabitEthernet1", "description": "Ansible UT interface 1", "enabled": True}, + { + "name": "GigabitEthernet1", + "description": "Ansible UT interface 1", + "enabled": True, + }, { "name": "GigabitEthernet3", "description": "Ansible UT interface 3", "enabled": False, "duplex": "auto", }, - {"name": "GigabitEthernet4", "description": "Ansible UT interface 4", "enabled": False}, + { + "name": "GigabitEthernet4", + "description": "Ansible UT interface 4", + "enabled": False, + }, { "name": "GigabitEthernet5", "description": "Ansible UT interface 5", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py index d9ec2b189..e84846aeb 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l2_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_l2_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -136,7 +135,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=10), mode="access", name="GigabitEthernet0/1"), + dict( + access=dict(vlan=10), + mode="access", + name="GigabitEthernet0/1", + ), dict( mode="trunk", name="GigabitEthernet0/2", @@ -270,7 +273,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=10), mode="access", name="GigabitEthernet0/1"), + dict( + access=dict(vlan=10), + mode="access", + name="GigabitEthernet0/1", + ), dict( mode="trunk", name="GigabitEthernet0/2", @@ -281,7 +288,11 @@ class TestIosL2InterfacesModule(TestIosModule): pruning_vlans=["10", "20"], ), ), - dict(access=dict(vlan=20), mode="access", name="TwoGigabitEthernet1/0/1"), + dict( + access=dict(vlan=20), + mode="access", + name="TwoGigabitEthernet1/0/1", + ), dict( mode="trunk", name="GigabitEthernet0/3", @@ -416,7 +427,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=10), mode="access", name="GigabitEthernet0/1"), + dict( + access=dict(vlan=10), + mode="access", + name="GigabitEthernet0/1", + ), dict( mode="trunk", name="GigabitEthernet0/2", @@ -427,7 +442,11 @@ class TestIosL2InterfacesModule(TestIosModule): pruning_vlans=["10", "20"], ), ), - dict(access=dict(vlan=20), mode="access", name="TwoGigabitEthernet1/0/1"), + dict( + access=dict(vlan=20), + mode="access", + name="TwoGigabitEthernet1/0/1", + ), dict( mode="trunk", name="GigabitEthernet0/3", @@ -592,7 +611,11 @@ class TestIosL2InterfacesModule(TestIosModule): }, "mode": "trunk", }, - {"name": "TwoGigabitEthernet1/0/1", "mode": "access", "access": {"vlan": 20}}, + { + "name": "TwoGigabitEthernet1/0/1", + "mode": "access", + "access": {"vlan": 20}, + }, { "name": "GigabitEthernet0/3", "trunk": { @@ -695,7 +718,13 @@ class TestIosL2InterfacesModule(TestIosModule): ) set_module_args( dict( - config=[dict(access=dict(vlan=20), mode="trunk", name="TwoGigabitEthernet1/0/1")], + config=[ + dict( + access=dict(vlan=20), + mode="trunk", + name="TwoGigabitEthernet1/0/1", + ), + ], state="merged", ), ) @@ -731,7 +760,11 @@ class TestIosL2InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(access=dict(vlan=20), mode="trunk", name="FiveGigabitEthernet1/0/1"), + dict( + access=dict(vlan=20), + mode="trunk", + name="FiveGigabitEthernet1/0/1", + ), dict( access=dict(vlan_name="vlan12"), mode="trunk", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py index de9442b59..3e3cc038b 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_l3_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_l3_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -46,6 +45,9 @@ class TestIosL3InterfacesModule(TestIosModule): interface GigabitEthernet0/3.100 encapsulation dot1Q 20 ip address 192.168.0.3 255.255.255.0 + interface VirtualPortGroup0 + ip address 192.168.0.4 255.255.255.0 + ipv6 address fe80:0:3a2:84::3 link-local interface Serial3/0 ipv6 address fd5d:12c9:2201:1::1/64 interface Serial7/0 @@ -58,7 +60,20 @@ class TestIosL3InterfacesModule(TestIosModule): name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.0.3/24", secondary=True)], ), - dict(name="Serial3/0", ipv6=[dict(address="FD5D:12C9:2201:1::1/64", cga=True)]), + dict( + name="Serial3/0", + ipv6=[dict(address="FD5D:12C9:2201:1::1/64", cga=True)], + ), + dict( + name="VirtualPortGroup0", + ipv4=[dict(address="192.168.0.4/24", secondary=True)], + ipv6=[ + dict( + address="fe80:0:3a2:84::3", + link_local=True, + ), + ], + ), ], state="merged", ), @@ -94,7 +109,10 @@ class TestIosL3InterfacesModule(TestIosModule): name="GigabitEthernet0/1", ipv4=[dict(address="192.168.0.1/24", secondary=True)], ), - dict(name="GigabitEthernet0/2", ipv4=[dict(address="192.168.0.2/24")]), + dict( + name="GigabitEthernet0/2", + ipv4=[dict(address="192.168.0.2/24")], + ), dict(name="Serial1/0", ipv4=[dict(address="192.168.0.3/24")]), ], state="overridden", @@ -171,13 +189,19 @@ class TestIosL3InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(name="GigabitEthernet0/3", ipv6=[dict(address="FD5D:12C9:2202:1::1/64")]), + dict( + name="GigabitEthernet0/3", + ipv6=[dict(address="FD5D:12C9:2202:1::1/64")], + ), dict( name="GigabitEthernet0/2", ipv4=[dict(address="192.168.0.2/24", secondary=False)], ), dict(name="Serial1/0", ipv4=[dict(address="192.168.0.5/24")]), - dict(name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.0.4/24")]), + dict( + name="GigabitEthernet0/3.100", + ipv4=[dict(address="192.168.0.4/24")], + ), ], state="replaced", ), @@ -206,7 +230,9 @@ class TestIosL3InterfacesModule(TestIosModule): ), ) result = self.execute_module(changed=False) - parsed_list = [{"name": "GigabitEthernet0/3.100", "ipv4": [{"address": "192.168.0.3/24"}]}] + parsed_list = [ + {"name": "GigabitEthernet0/3.100", "ipv4": [{"address": "192.168.0.3/24"}]}, + ] self.assertEqual(parsed_list, result["parsed"]) def test_ios_l3_interfaces_rendered(self): @@ -279,6 +305,8 @@ class TestIosL3InterfacesModule(TestIosModule): ip address 192.168.0.3 255.255.255.0 interface Serial1/0 description Configured by PAUL + interface Vlan901 + ip unnumbered Loopback2 """, ) set_module_args( @@ -286,7 +314,14 @@ class TestIosL3InterfacesModule(TestIosModule): config=[ dict( name="GigabitEthernet0/1", - ipv4=[dict(dhcp=dict(client_id="GigabitEthernet0/2", hostname="test.com"))], + ipv4=[ + dict( + dhcp=dict( + client_id="GigabitEthernet0/2", + hostname="test.com", + ), + ), + ], ), dict(name="GigabitEthernet0/2", ipv4=[dict(pool="PoolName1")]), dict(name="Serial1/0", ipv6=[dict(autoconfig=dict(default=True))]), @@ -296,8 +331,14 @@ class TestIosL3InterfacesModule(TestIosModule): ipv6=[dict(address="FD5D:12C9:2201:1::1/64", anycast=True)], ), dict(name="Vlan51", ipv4=[dict(address="192.168.0.4/31")]), - dict(name="Serial4/0", ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)]), - dict(name="Serial5/0", ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)]), + dict( + name="Serial4/0", + ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)], + ), + dict( + name="Serial5/0", + ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)], + ), dict( name="Serial6/0", ipv6=[dict(address="FD5D:12C9:2201:4::1/64", link_local=True)], @@ -320,6 +361,20 @@ class TestIosL3InterfacesModule(TestIosModule): ), ], ), + dict( + autostate=False, + name="Vlan901", + ipv6=[ + dict( + enable=True, + ), + ], + ipv4=[ + dict( + source_interface=dict(name="Loopback1"), + ), + ], + ), ], state="merged", ), @@ -347,6 +402,10 @@ class TestIosL3InterfacesModule(TestIosModule): "ipv6 address fd5d:12c9:2201:3::1/64 eui", "interface Vlan51", "ip address 192.168.0.4 255.255.255.254", + "interface Vlan901", + "ip unnumbered Loopback1", + "ipv6 enable", + "no autostate", ] result = self.execute_module(changed=True) @@ -381,16 +440,32 @@ class TestIosL3InterfacesModule(TestIosModule): config=[ dict( name="GigabitEthernet0/1", - ipv4=[dict(dhcp=dict(client_id="GigabitEthernet0/2", hostname="test.com"))], + ipv4=[ + dict( + dhcp=dict( + client_id="GigabitEthernet0/2", + hostname="test.com", + ), + ), + ], + ), + dict( + name="GigabitEthernet0/3.100", + ipv4=[dict(address="192.168.0.3/24")], ), - dict(name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.0.3/24")]), dict(name="Serial2/0", ipv6=[dict(dhcp=dict(rapid_commit=True))]), dict( name="Serial3/0", ipv6=[dict(address="FD5D:12C9:2201:1::1/64", anycast=True)], ), - dict(name="Serial4/0", ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)]), - dict(name="Serial5/0", ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)]), + dict( + name="Serial4/0", + ipv6=[dict(address="FD5D:12C9:2201:2::1/64", cga=True)], + ), + dict( + name="Serial5/0", + ipv6=[dict(address="FD5D:12C9:2201:3::1/64", eui=True)], + ), dict( name="Serial6/0", ipv6=[dict(address="FD5D:12C9:2201:4::1/64", link_local=True)], @@ -433,7 +508,10 @@ class TestIosL3InterfacesModule(TestIosModule): set_module_args( dict( config=[ - dict(name="GigabitEthernet0/3.100", ipv4=[dict(address="192.168.1.3/24")]), + dict( + name="GigabitEthernet0/3.100", + ipv4=[dict(address="192.168.1.3/24")], + ), ], state="replaced", ), diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py index 6c56406e6..f4460162a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lacp -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py index f58aa9d65..817c6869c 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lacp_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lacp_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -83,7 +82,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -121,7 +124,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 2}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 2, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 30}, @@ -150,7 +157,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -188,7 +199,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -226,7 +241,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"name": "Port-channel10", "fast_switchover": True, "max_bundle": 12}, + { + "name": "Port-channel10", + "fast_switchover": True, + "max_bundle": 12, + }, {"name": "Port-channel40", "max_bundle": 5}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 20}, @@ -287,7 +306,11 @@ class TestIosLacpInterfaceModule(TestIosModule): set_module_args( dict( config=[ - {"fast_switchover": True, "max_bundle": 2, "name": "Port-channel10"}, + { + "fast_switchover": True, + "max_bundle": 2, + "name": "Port-channel10", + }, {"max_bundle": 5, "name": "Port-channel40"}, {"name": "GigabitEthernet0/0"}, {"name": "GigabitEthernet0/1", "port_priority": 30}, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py index 1f97bef24..71d6ff933 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lag_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lag_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -73,7 +72,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "passive"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -120,7 +123,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -164,7 +171,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/1", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "on"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -219,7 +230,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -259,7 +274,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -314,7 +333,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", @@ -459,7 +482,11 @@ class TestIosLagInterfacesModule(TestIosModule): "members": [ {"member": "GigabitEthernet0/2", "mode": "active"}, {"member": "GigabitEthernet0/3", "mode": "active"}, - {"link": 20, "member": "GigabitEthernet0/4", "mode": "active"}, + { + "link": 20, + "member": "GigabitEthernet0/4", + "mode": "active", + }, {"link": 22, "member": "GigabitEthernet0/5"}, ], "name": "Port-channel22", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py index 4c54ef5c9..2c5eb1c40 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lldp_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -154,7 +153,12 @@ class TestIosLldpGlobalModule(TestIosModule): state="deleted", ), ) - commands = ["no lldp holdtime", "no lldp run", "no lldp timer", "no lldp reinit"] + commands = [ + "no lldp holdtime", + "no lldp run", + "no lldp timer", + "no lldp reinit", + ] result = self.execute_module(changed=True) self.assertEqual(result["commands"], commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py index a3dfe9706..04a25993a 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_lldp_inteface.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_lldp_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -241,7 +240,10 @@ class TestIosLldpInterfacesModule(TestIosModule): ) set_module_args( dict( - config=[dict(name="GigabitEthernet0/2"), dict(name="GigabitEthernet0/1")], + config=[ + dict(name="GigabitEthernet0/2"), + dict(name="GigabitEthernet0/1"), + ], state="deleted", ), ) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py index c3024636a..f1b3eada3 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_logging_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_logging_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -120,7 +119,10 @@ class TestIosLoggingGlobalModule(TestIosModule): reload=dict(severity="alerts"), server_arp=True, snmp_trap=["errors"], - source_interface=[dict(interface="GBit1/0"), dict(interface="CTunnel2")], + source_interface=[ + dict(interface="GBit1/0"), + dict(interface="CTunnel2"), + ], trap="errors", userinfo=True, ), @@ -250,7 +252,10 @@ class TestIosLoggingGlobalModule(TestIosModule): ], message_counter=["log", "debug"], snmp_trap=["errors"], - source_interface=[dict(interface="GBit1/0"), dict(interface="CTunnel2")], + source_interface=[ + dict(interface="GBit1/0"), + dict(interface="CTunnel2"), + ], ), ) deleted = [ @@ -317,7 +322,10 @@ class TestIosLoggingGlobalModule(TestIosModule): ], message_counter=["log", "debug"], snmp_trap=["errors"], - source_interface=[dict(interface="GBit1/0"), dict(interface="CTunnel2")], + source_interface=[ + dict(interface="GBit1/0"), + dict(interface="CTunnel2"), + ], ), ) overridden = [ @@ -402,9 +410,16 @@ class TestIosLoggingGlobalModule(TestIosModule): ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7304", discriminator="msglog01 severity includes 5", ), - dict(ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7314", sequence_num_session=True), + dict( + ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7314", + sequence_num_session=True, + ), dict(ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7324", vrf="vpn1"), - dict(ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7334", stream=10, filtered=True), + dict( + ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7334", + stream=10, + filtered=True, + ), dict( ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7344", session_id=dict(tag="ipv4"), @@ -416,7 +431,9 @@ class TestIosLoggingGlobalModule(TestIosModule): dict( ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7374", vrf="Apn2", - transport=dict(udp=dict(discriminator="msglog01 severity includes 5")), + transport=dict( + udp=dict(discriminator="msglog01 severity includes 5"), + ), ), dict( ipv6="2001:0db8:85a3:0000:0000:8a2e:0370:7384", @@ -509,7 +526,13 @@ class TestIosLoggingGlobalModule(TestIosModule): ) set_module_args(dict(state="gathered")) gathered = dict( - hosts=[dict(hostname="172.16.1.1", vrf="vpn-1", transport=dict(tcp=dict(audit=True)))], + hosts=[ + dict( + hostname="172.16.1.1", + vrf="vpn-1", + transport=dict(tcp=dict(audit=True)), + ), + ], ) result = self.execute_module(changed=False) @@ -617,9 +640,14 @@ class TestIosLoggingGlobalModule(TestIosModule): """, ) playbook = dict( - config=dict(hosts=[dict(hostname="172.16.2.15", session_id=dict(text="Test"))]), + config=dict( + hosts=[dict(hostname="172.16.2.15", session_id=dict(text="Test"))], + ), ) - replaced = ["no logging host 172.16.1.1", "logging host 172.16.2.15 session-id string Test"] + replaced = [ + "no logging host 172.16.1.1", + "logging host 172.16.2.15 session-id string Test", + ] playbook["state"] = "replaced" set_module_args(playbook) result = self.execute_module(changed=True) @@ -651,8 +679,14 @@ class TestIosLoggingGlobalModule(TestIosModule): {"hostname": "172.16.0.4", "vrf": "Mgmt-intf"}, ], "origin_id": {"tag": "hostname"}, - "rate_limit": {"console": True, "except_severity": "errors", "size": 10}, - "source_interface": [{"interface": "GigabitEthernet0", "vrf": "Mgmt-intf"}], + "rate_limit": { + "console": True, + "except_severity": "errors", + "size": 10, + }, + "source_interface": [ + {"interface": "GigabitEthernet0", "vrf": "Mgmt-intf"}, + ], "trap": "informational", }, } diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py deleted file mode 100644 index 3e73fdfd4..000000000 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp.py +++ /dev/null @@ -1,110 +0,0 @@ -# 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 ansible_collections.cisco.ios.plugins.modules import ios_ntp -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch -from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args - -from .ios_module import TestIosModule, load_fixture - - -class TestIosNtpModule(TestIosModule): - module = ios_ntp - - def setUp(self): - super(TestIosNtpModule, self).setUp() - - self.mock_get_config = patch( - "ansible_collections.cisco.ios.plugins.modules.ios_ntp.get_config", - ) - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch( - "ansible_collections.cisco.ios.plugins.modules.ios_ntp.load_config", - ) - self.load_config = self.mock_load_config.start() - - def tearDown(self): - super(TestIosNtpModule, self).tearDown() - self.mock_get_config.stop() - self.mock_load_config.stop() - - def load_fixtures(self, commands=None): - self.get_config.return_value = load_fixture("ios_ntp_config.cfg").strip() - self.load_config.return_value = dict(diff=None, session="session") - - def test_ios_ntp_idempotent(self): - set_module_args( - dict( - server="10.75.32.5", - source_int="Loopback0", - acl="NTP_ACL", - logging=True, - auth=True, - auth_key="15435A030726242723273C21181319000A", - key_id="10", - vrf="my_mgmt_vrf", - state="present", - ), - ) - commands = [] - self.execute_module(changed=False, commands=commands) - - def test_ios_ntp_config(self): - set_module_args( - dict( - server="10.75.33.5", - source_int="Vlan2", - acl="NTP_ACL", - logging=True, - auth=True, - auth_key="15435A030726242723273C21181319000A", - key_id="10", - state="present", - ), - ) - commands = ["ntp server 10.75.33.5", "ntp source Vlan2"] - self.execute_module(changed=True, commands=commands) - - def test_ios_ntp_remove(self): - set_module_args( - dict( - server="10.75.32.5", - source_int="Loopback0", - acl="NTP_ACL", - logging=True, - auth=True, - auth_key="15435A030726242723273C21181319000A", - key_id="10", - vrf="my_mgmt_vrf", - state="absent", - ), - ) - commands = [ - "no ntp server vrf my_mgmt_vrf 10.75.32.5", - "no ntp source Loopback0", - "no ntp access-group peer NTP_ACL", - "no ntp logging", - "no ntp authenticate", - "no ntp trusted-key 10", - "no ntp authentication-key 10 md5 15435A030726242723273C21181319000A 7", - ] - self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py index a9d0392c1..e955c2929 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ntp_global.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ntp_global -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -86,7 +85,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -98,8 +102,18 @@ class TestIosNtpGlobalModule(TestIosModule): panic_update=True, peers=[ dict(peer="172.16.1.10", version=2), - dict(key_id=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key_id=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), dict(peer="checkPeerDomainIpv6.com", use_ipv6=True), dict(peer="testPeerDomainIpv6.com", prefer=True, use_ipv6=True), ], @@ -109,7 +123,10 @@ class TestIosNtpGlobalModule(TestIosModule): dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="GigabitEthernet0/1", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="merged", @@ -138,7 +155,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -150,8 +172,18 @@ class TestIosNtpGlobalModule(TestIosModule): panic_update=True, peers=[ dict(peer="172.16.1.10", version=2), - dict(key=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), dict(peer="checkPeerDomainIpv6.com", use_ipv6=True), dict(peer="testPeerDomainIpv6.com", prefer=True, use_ipv6=True), ], @@ -162,7 +194,10 @@ class TestIosNtpGlobalModule(TestIosModule): dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="GigabitEthernet0/1", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="merged", @@ -324,7 +359,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -336,8 +376,18 @@ class TestIosNtpGlobalModule(TestIosModule): panic_update=True, peers=[ dict(peer="172.16.1.10", version=2), - dict(key=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), dict(peer="checkPeerDomainIpv6.com", use_ipv6=True), dict(peer="testPeerDomainIpv6.com", prefer=True, use_ipv6=True), ], @@ -347,7 +397,10 @@ class TestIosNtpGlobalModule(TestIosModule): dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="GigabitEthernet0/1", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="replaced", @@ -415,7 +468,12 @@ class TestIosNtpGlobalModule(TestIosModule): allow=dict(control=dict(rate_limit=4)), authenticate=True, authentication_keys=[ - dict(algorithm="md5", encryption=7, id=2, key="SomeSecurePassword"), + dict( + algorithm="md5", + encryption=7, + id=2, + key="SomeSecurePassword", + ), ], broadcast_delay=22, logging=True, @@ -426,15 +484,28 @@ class TestIosNtpGlobalModule(TestIosModule): orphan=4, panic_update=True, peers=[ - dict(key_id=2, minpoll=5, peer="172.16.1.11", prefer=True, version=2), - dict(peer="checkPeerDomainIpv4.com", prefer=True, use_ipv4=True), + dict( + key_id=2, + minpoll=5, + peer="172.16.1.11", + prefer=True, + version=2, + ), + dict( + peer="checkPeerDomainIpv4.com", + prefer=True, + use_ipv4=True, + ), ], servers=[ dict(server="172.16.1.13", source="GigabitEthernet0/1"), dict(server="checkServerDomainIpv6.com", use_ipv6=True), ], source="Loopback888", - trusted_keys=[dict(range_start=21), dict(range_end=13, range_start=3)], + trusted_keys=[ + dict(range_start=21), + dict(range_end=13, range_start=3), + ], update_calendar=True, ), state="overridden", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py index 3721ba3ba..ea500f540 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospf_interfaces.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ospf_interfaces -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py index b73e34395..e14def8d8 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv2.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ospfv2 -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -76,13 +75,24 @@ class TestIosOspfV2Module(TestIosModule): ), ), network=[ - dict(address="198.51.100.0", wildcard_bits="0.0.0.255", area=5), - dict(address="192.0.2.0", wildcard_bits="0.0.0.255", area=5), + dict( + address="198.51.100.0", + wildcard_bits="0.0.0.255", + area=5, + ), + dict( + address="192.0.2.0", + wildcard_bits="0.0.0.255", + area=5, + ), ], domain_id=dict(ip_address=dict(address="192.0.3.1")), max_metric=dict(on_startup=dict(time=100), router_lsa=True), passive_interfaces=dict( - interface=dict(set_interface=False, name=["GigabitEthernet0/2"]), + interface=dict( + set_interface=False, + name=["GigabitEthernet0/2"], + ), ), vrf="blue", ), @@ -284,11 +294,17 @@ class TestIosOspfV2Module(TestIosModule): "areas": [ { "area_id": "5", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, }, { "area_id": "10", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, "capability": True, "default_cost": 10, "filter_list": [ @@ -470,7 +486,10 @@ class TestIosOspfV2Module(TestIosModule): "passive_interfaces": { "default": True, "interface": { - "name": ["GigabitEthernet0/1", "GigabitEthernet0/2"], + "name": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2", + ], "set_interface": False, }, }, @@ -535,6 +554,7 @@ class TestIosOspfV2Module(TestIosModule): "default-information originate always metric 25 metric-type 26 route-map rmap1", "default-metric 50", "discard-route external 5 internal 2", + "distance 2 192.168.1.0 0.0.0.255 acl1", "distance ospf inter-area 2 intra-area 3 external 1", "domain-id 192.168.1.0 secondary", "domain-tag 54", @@ -601,7 +621,10 @@ class TestIosOspfV2Module(TestIosModule): """, ) set_module_args( - dict(config=dict(processes=[dict(process_id="200", vrf="blue")]), state="deleted"), + dict( + config=dict(processes=[dict(process_id="200", vrf="blue")]), + state="deleted", + ), ) commands = ["no router ospf 200 vrf blue"] self.execute_module(changed=True, commands=commands) @@ -632,7 +655,11 @@ class TestIosOspfV2Module(TestIosModule): "processes": [ { "areas": [ - {"area_id": "5", "authentication": {"enable": True}, "capability": True}, + { + "area_id": "5", + "authentication": {"enable": True}, + "capability": True, + }, ], "process_id": 1, }, @@ -677,11 +704,17 @@ class TestIosOspfV2Module(TestIosModule): "areas": [ { "area_id": "5", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, }, { "area_id": "10", - "authentication": {"enable": True, "message_digest": True}, + "authentication": { + "enable": True, + "message_digest": True, + }, "capability": True, "default_cost": 10, "filter_list": [ @@ -862,7 +895,10 @@ class TestIosOspfV2Module(TestIosModule): "passive_interfaces": { "default": True, "interface": { - "name": ["GigabitEthernet0/1", "GigabitEthernet0/2"], + "name": [ + "GigabitEthernet0/1", + "GigabitEthernet0/2", + ], "set_interface": False, }, }, @@ -933,6 +969,7 @@ class TestIosOspfV2Module(TestIosModule): "default-information originate always metric 25 metric-type 26 route-map rmap1", "default-metric 50", "discard-route external 5 internal 2", + "distance 2 192.168.1.0 0.0.0.255 acl1", "distance ospf inter-area 2 intra-area 3 external 1", "domain-id 192.168.1.0 secondary", "domain-tag 54", @@ -1029,13 +1066,19 @@ class TestIosOspfV2Module(TestIosModule): "lsa_group": 25, }, }, - "max_metric": {"router_lsa": True, "on_startup": {"time": 100}}, + "max_metric": { + "router_lsa": True, + "on_startup": {"time": 100}, + }, "areas": [{"area_id": "10", "capability": True}], "passive_interfaces": { "default": True, "interface": { "set_interface": False, - "name": ["GigabitEthernet0/2", "GigabitEthernet0/1"], + "name": [ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], }, }, }, @@ -1141,13 +1184,19 @@ class TestIosOspfV2Module(TestIosModule): ], }, "domain_id": {"ip_address": {"address": "192.0.3.1"}}, - "max_metric": {"router_lsa": True, "on_startup": {"time": 100}}, + "max_metric": { + "router_lsa": True, + "on_startup": {"time": 100}, + }, "areas": [{"area_id": "10", "capability": True}], "passive_interfaces": { "default": True, "interface": { "set_interface": False, - "name": ["GigabitEthernet0/2", "GigabitEthernet0/1"], + "name": [ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], }, }, }, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py index 30c646123..efaae19ac 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ospfv3.py @@ -7,9 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ospfv3 -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -58,7 +58,10 @@ class TestIosOspfV3Module(TestIosModule): afi="ipv4", unicast=True, vrf="blue", - adjacency=dict(min_adjacency=100, max_adjacency=100), + adjacency=dict( + min_adjacency=100, + max_adjacency=100, + ), ), ], ), @@ -89,7 +92,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -132,7 +137,10 @@ class TestIosOspfV3Module(TestIosModule): afi="ipv4", unicast=True, vrf="blue", - adjacency=dict(min_adjacency=100, max_adjacency=100), + adjacency=dict( + min_adjacency=100, + max_adjacency=100, + ), ), ], ), @@ -164,7 +172,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -205,7 +215,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -256,7 +268,9 @@ class TestIosOspfV3Module(TestIosModule): areas=[ dict( area_id=10, - nssa=dict(default_information_originate=dict(metric=10)), + nssa=dict( + default_information_originate=dict(metric=10), + ), ), ], address_family=[ @@ -287,7 +301,9 @@ class TestIosOspfV3Module(TestIosModule): self.execute_module(changed=False, commands=[]) def test_ios_ospfv3_deleted(self): - set_module_args(dict(config=dict(processes=[dict(process_id="1")]), state="deleted")) + set_module_args( + dict(config=dict(processes=[dict(process_id="1")]), state="deleted"), + ) commands = ["no router ospfv3 1"] self.execute_module(changed=True, commands=commands) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py index bdb822e62..02969ffe0 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_ping.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_ping -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -61,7 +60,9 @@ class TestIosPingModule(TestIosModule): Success rate is 100 percent (2/2), round-trip min/avg/max = 25/25/25 ms """, ) - set_module_args(dict(count=2, dest="2001:db8:ffff:ffff:ffff:ffff:ffff:ffff", afi="ipv6")) + set_module_args( + dict(count=2, dest="2001:db8:ffff:ffff:ffff:ffff:ffff:ffff", afi="ipv6"), + ) result = self.execute_module() mock_res = { "commands": "ping ipv6 2001:db8:ffff:ffff:ffff:ffff:ffff:ffff repeat 2", diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py index 2aac373dd..0df4be859 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_prefix_lists.py @@ -7,9 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_prefix_lists -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -74,7 +74,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -121,9 +126,24 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test description", entries=[ - dict(action="deny", le=15, prefix="1.0.0.0/8", sequence=5), - dict(action="deny", ge=10, prefix="35.0.0.0/8", sequence=10), - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + le=15, + prefix="1.0.0.0/8", + sequence=5, + ), + dict( + action="deny", + ge=10, + prefix="35.0.0.0/8", + sequence=10, + ), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -137,7 +157,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=50), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=50, + ), ], name="test", ), @@ -151,7 +176,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -190,7 +220,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is replace test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -204,7 +239,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is replace test", entries=[ - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_replace", ), @@ -255,9 +295,24 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test description", entries=[ - dict(action="deny", le=15, prefix="1.0.0.0/8", sequence=5), - dict(action="deny", ge=10, prefix="35.0.0.0/8", sequence=10), - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + le=15, + prefix="1.0.0.0/8", + sequence=5, + ), + dict( + action="deny", + ge=10, + prefix="35.0.0.0/8", + sequence=10, + ), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -271,7 +326,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=50), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=50, + ), ], name="test", ), @@ -285,7 +345,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -324,7 +389,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is override test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -338,7 +408,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is override test", entries=[ - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_override", ), @@ -391,9 +466,24 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test description", entries=[ - dict(action="deny", le=15, prefix="1.0.0.0/8", sequence=5), - dict(action="deny", ge=10, prefix="35.0.0.0/8", sequence=10), - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=15), + dict( + action="deny", + le=15, + prefix="1.0.0.0/8", + sequence=5, + ), + dict( + action="deny", + ge=10, + prefix="35.0.0.0/8", + sequence=10, + ), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=15, + ), dict( action="deny", ge=20, @@ -407,7 +497,12 @@ class TestIosPrefixListsModule(TestIosModule): dict( description="this is test", entries=[ - dict(action="deny", ge=15, prefix="12.0.0.0/8", sequence=50), + dict( + action="deny", + ge=15, + prefix="12.0.0.0/8", + sequence=50, + ), ], name="test", ), @@ -421,7 +516,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), @@ -491,7 +591,12 @@ class TestIosPrefixListsModule(TestIosModule): prefix="35.0.0.0/8", sequence=5, ), - dict(action="deny", ge=20, prefix="35.0.0.0/8", sequence=10), + dict( + action="deny", + ge=20, + prefix="35.0.0.0/8", + sequence=10, + ), ], name="test_prefix", ), diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py index 0e450f908..27c5aa7f6 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_route_maps.py @@ -7,9 +7,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_route_maps -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -58,7 +58,10 @@ class TestIosRouteMapsModule(TestIosModule): additional_paths=dict(all=True), as_path=dict(acls=[100, 120]), clns=dict(address="test_osi"), - community=dict(exact_match=True, name=["new_merge"]), + community=dict( + exact_match=True, + name=["new_merge"], + ), ip=dict(address=dict(acls=[10, 100])), length=dict(maximum=50000, minimum=5000), mpls_label=True, @@ -213,7 +216,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, @@ -249,7 +255,10 @@ class TestIosRouteMapsModule(TestIosModule): additional_paths=dict(all=True), as_path=dict(acls=[100, 120]), clns=dict(address="test_osi"), - community=dict(exact_match=True, name=["new_replace"]), + community=dict( + exact_match=True, + name=["new_replace"], + ), ip=dict(address=dict(acls=[10, 100])), length=dict(maximum=50000, minimum=5000), mpls_label=True, @@ -418,7 +427,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, @@ -454,7 +466,10 @@ class TestIosRouteMapsModule(TestIosModule): additional_paths=dict(all=True), as_path=dict(acls=[100, 120]), clns=dict(address="test_osi"), - community=dict(exact_match=True, name=["new_override"]), + community=dict( + exact_match=True, + name=["new_override"], + ), ip=dict(address=dict(acls=[10, 100])), length=dict(maximum=50000, minimum=5000), mpls_label=True, @@ -623,7 +638,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, @@ -676,7 +694,10 @@ class TestIosRouteMapsModule(TestIosModule): name=["99", "98", "test_1", "test_2"], ), extcommunity=["110", "130"], - interfaces=["GigabitEthernet0/1", "GigabitEthernet0/2"], + interfaces=[ + "GigabitEthernet0/1", + "GigabitEthernet0/2", + ], ip=dict(address=dict(acls=[10, 100])), ipv6=dict(route_source=dict(acl="test_ipv6")), length=dict(maximum=10000, minimum=1000), @@ -702,7 +723,9 @@ class TestIosRouteMapsModule(TestIosModule): sequence=30, set=dict( as_path=dict( - prepend=dict(as_number=["65512", 65522, "65532", 65543]), + prepend=dict( + as_number=["65512", 65522, "65532", 65543], + ), ), ), ), @@ -727,7 +750,10 @@ class TestIosRouteMapsModule(TestIosModule): vpn_distinguisher=dict(address="192.0.2.1:12"), ), global_route=True, - interfaces=["GigabitEthernet0/2", "GigabitEthernet0/1"], + interfaces=[ + "GigabitEthernet0/2", + "GigabitEthernet0/1", + ], level=dict(level_1_2=True), lisp="test_lisp", local_preference=100, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py index cbf9a9fd7..fa92efcdc 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_service.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_service -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py index c45f3548a..0b8f797a1 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_snmp_server.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_snmp_server -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -54,11 +53,13 @@ class TestIosSnmpServerModule(TestIosModule): snmp-server engineID remote 172.16.0.2 udp-port 23 AB0C5342FAAB snmp-server engineID remote 172.16.0.1 udp-port 22 AB0C5342FAAA snmp-server user newuser newfamily v1 access 24 - snmp-server user paul familypaul v3 access ipv6 ipv6acl + snmp-server user paul familypaul v3 access ipv6 ipv6acl ipv4acl snmp-server user replaceUser replaceUser v3 snmp-server group group0 v3 auth - snmp-server group group1 v1 notify me access 2 + snmp-server group group1 v1 notify me access ipv6 ipv6acl 2 snmp-server group group2 v3 priv + snmp-server group group3 v1 access ipv6 ipv6acl + snmp-server group group4 v1 access 2 snmp-server group replaceUser v3 noauth snmp-server community commu1 view view1 RO ipv6 te snmp-server community commu2 RO 1322 @@ -166,15 +167,36 @@ class TestIosSnmpServerModule(TestIosModule): "context": ["contextWord2", "contextWord1"], "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAA", "remote": {"host": "172.16.0.1", "udp_port": 22}}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAA", + "remote": {"host": "172.16.0.1", "udp_port": 22}, + }, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], - "file_transfer": {"access_group": "testAcl", "protocol": ["ftp", "rcp"]}, + "file_transfer": { + "access_group": "testAcl", + "protocol": ["ftp", "rcp"], + }, "groups": [ {"group": "group0", "version": "v3", "version_option": "auth"}, - {"acl_v4": "2", "group": "group1", "notify": "me", "version": "v1"}, + { + "acl_v4": "2", + "acl_v6": "ipv6acl", + "group": "group1", + "notify": "me", + "version": "v1", + }, {"group": "group2", "version": "v3", "version_option": "priv"}, - {"group": "replaceUser", "version": "v3", "version_option": "noauth"}, + { + "group": "replaceUser", + "version": "v3", + "version_option": "noauth", + }, + {"acl_v6": "ipv6acl", "group": "group3", "version": "v1"}, + {"acl_v4": "2", "group": "group4", "version": "v1"}, ], "hosts": [ { @@ -211,8 +233,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, - {"community_string": "checktrap", "host": "172.16.2.99", "traps": ["isis"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, + { + "community_string": "checktrap", + "host": "172.16.2.99", + "traps": ["isis"], + }, ], "inform": {"pending": 2}, "ip": {"dscp": 2}, @@ -294,7 +324,12 @@ class TestIosSnmpServerModule(TestIosModule): }, "ipmulticast": True, "ipsec": { - "cryptomap": {"add": True, "attach": True, "delete": True, "detach": True}, + "cryptomap": { + "add": True, + "attach": True, + "delete": True, + "detach": True, + }, "too_many_sas": True, "tunnel": {"start": True, "stop": True}, }, @@ -347,14 +382,24 @@ class TestIosSnmpServerModule(TestIosModule): }, }, "users": [ - {"acl_v4": "24", "group": "newfamily", "username": "newuser", "version": "v1"}, { + "acl_v4": "24", + "group": "newfamily", + "username": "newuser", + "version": "v1", + }, + { + "acl_v4": "ipv4acl", "acl_v6": "ipv6acl", "group": "familypaul", "username": "paul", "version": "v3", }, - {"group": "replaceUser", "username": "replaceUser", "version": "v3"}, + { + "group": "replaceUser", + "username": "replaceUser", + "version": "v3", + }, ], }, } @@ -430,14 +475,32 @@ class TestIosSnmpServerModule(TestIosModule): "id": "AB0C5342FAAA", "remote": {"host": "172.16.0.1", "udp_port": 22, "vrf": "mgmt"}, }, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], - "file_transfer": {"access_group": "testAcl", "protocol": ["ftp", "rcp"]}, + "file_transfer": { + "access_group": "testAcl", + "protocol": ["ftp", "rcp"], + }, "groups": [ {"group": "group0", "version": "v3", "version_option": "auth"}, - {"acl_v4": "2", "group": "group1", "notify": "me", "version": "v1"}, + { + "acl_v4": "2", + "acl_v6": "ipv6acl", + "group": "group1", + "notify": "me", + "version": "v1", + }, {"group": "group2", "version": "v3", "version_option": "priv"}, - {"group": "replaceUser", "version": "v3", "version_option": "noauth"}, + { + "group": "replaceUser", + "version": "v3", + "version_option": "noauth", + }, + {"acl_v6": "ipv6acl", "group": "group3", "version": "v1"}, + {"acl_v4": "2", "group": "group4", "version": "v1"}, ], "hosts": [ { @@ -474,8 +537,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, - {"community_string": "checktrap", "host": "172.16.2.99", "traps": ["isis"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, + { + "community_string": "checktrap", + "host": "172.16.2.99", + "traps": ["isis"], + }, ], "inform": {"pending": 2}, "ip": {"dscp": 2}, @@ -567,7 +638,12 @@ class TestIosSnmpServerModule(TestIosModule): }, "ipmulticast": True, "ipsec": { - "cryptomap": {"add": True, "attach": True, "delete": True, "detach": True}, + "cryptomap": { + "add": True, + "attach": True, + "delete": True, + "detach": True, + }, "too_many_sas": True, "tunnel": {"start": True, "stop": True}, }, @@ -620,15 +696,29 @@ class TestIosSnmpServerModule(TestIosModule): }, }, "users": [ - {"acl_v4": "24", "group": "newfamily", "username": "newuser", "version": "v1"}, + { + "acl_v4": "24", + "group": "newfamily", + "username": "newuser", + "version": "v1", + }, { "acl_v6": "ipv6only", "group": "familypaul", "username": "paul", "version": "v3", }, - {"group": "replaceUser", "username": "replaceUser", "version": "v3"}, - {"acl_v4": "27", "group": "mfamily", "username": "flow", "version": "v3"}, + { + "group": "replaceUser", + "username": "replaceUser", + "version": "v3", + }, + { + "acl_v4": "27", + "group": "mfamily", + "username": "flow", + "version": "v3", + }, ], }, } @@ -692,8 +782,10 @@ class TestIosSnmpServerModule(TestIosModule): "snmp-server host 172.16.2.99 check slb", "snmp-server host 172.16.2.99 checktrap isis", "snmp-server group group0 v3 auth", - "snmp-server group group1 v1 notify me access 2", + "snmp-server group group1 v1 notify me access ipv6 ipv6acl 2", "snmp-server group group2 v3 priv", + "snmp-server group group3 v1 access ipv6 ipv6acl", + "snmp-server group group4 v1 access 2", "snmp-server group replaceUser v3 noauth", "snmp-server engineID remote 172.16.0.1 udp-port 22 vrf mgmt AB0C5342FAAA", "snmp-server community commu1 view view1 ro ipv6 te", @@ -723,8 +815,10 @@ class TestIosSnmpServerModule(TestIosModule): snmp-server user replaceUser replaceUser v3 snmp-server user flow mfamily v3 access 27 snmp-server group group0 v3 auth - snmp-server group group1 v1 notify me access 2 + snmp-server group group1 v1 notify me access ipv6 ipv6acl 2 snmp-server group group2 v3 priv + snmp-server group group3 v1 access ipv6 ipv6acl + snmp-server group group4 v1 access 2 snmp-server group replaceUser v3 noauth snmp-server community commu1 view view1 RO ipv6 te snmp-server community commu2 RO 1322 @@ -985,8 +1079,10 @@ class TestIosSnmpServerModule(TestIosModule): "no snmp-server host 172.16.2.99 check slb", "no snmp-server host 172.16.2.99 checktrap isis", "no snmp-server group group0 v3 auth", - "no snmp-server group group1 v1 notify me access 2", + "no snmp-server group group1 v1 notify me access ipv6 ipv6acl 2", "no snmp-server group group2 v3 priv", + "no snmp-server group group3 v1 access ipv6 ipv6acl", + "no snmp-server group group4 v1 access 2", "no snmp-server group replaceUser v3 noauth", "no snmp-server engineID local AB0C5342FA0A", "no snmp-server engineID remote 172.16.0.1 udp-port 22 AB0C5342FAAA", @@ -1097,15 +1193,34 @@ class TestIosSnmpServerModule(TestIosModule): "context": ["contextWord2", "contextWord1"], "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAA", "remote": {"host": "172.16.0.1", "udp_port": 22}}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAA", + "remote": {"host": "172.16.0.1", "udp_port": 22}, + }, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], - "file_transfer": {"access_group": "testAcl", "protocol": ["ftp", "rcp"]}, + "file_transfer": { + "access_group": "testAcl", + "protocol": ["ftp", "rcp"], + }, "groups": [ {"group": "group0", "version": "v3", "version_option": "auth"}, - {"acl_v4": "2", "group": "group1", "notify": "me", "version": "v1"}, + { + "acl_v4": "2", + "acl_v6": "ipv6acl", + "group": "group1", + "notify": "me", + "version": "v1", + }, {"group": "group2", "version": "v3", "version_option": "priv"}, - {"group": "replaceUser", "version": "v3", "version_option": "noauth"}, + { + "group": "replaceUser", + "version": "v3", + "version_option": "noauth", + }, ], "hosts": [ { @@ -1142,8 +1257,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, - {"community_string": "checktrap", "host": "172.16.2.99", "traps": ["isis"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, + { + "community_string": "checktrap", + "host": "172.16.2.99", + "traps": ["isis"], + }, ], "inform": {"pending": 2}, "ip": {"dscp": 2}, @@ -1225,7 +1348,12 @@ class TestIosSnmpServerModule(TestIosModule): }, "ipmulticast": True, "ipsec": { - "cryptomap": {"add": True, "attach": True, "delete": True, "detach": True}, + "cryptomap": { + "add": True, + "attach": True, + "delete": True, + "detach": True, + }, "too_many_sas": True, "tunnel": {"start": True, "stop": True}, }, @@ -1278,18 +1406,35 @@ class TestIosSnmpServerModule(TestIosModule): }, }, "users": [ - {"acl_v4": "24", "group": "newfamily", "username": "newuser", "version": "v1"}, + { + "acl_v4": "24", + "group": "newfamily", + "username": "newuser", + "version": "v1", + }, { "acl_v6": "ipv6acl", "group": "familypaul", "username": "paul", "version": "v3", }, - {"group": "replaceUser", "username": "replaceUser", "version": "v3"}, + { + "group": "replaceUser", + "username": "replaceUser", + "version": "v3", + }, ], "views": [ - {"name": "no-write.test", "family_name": "testiso", "excluded": True}, - {"name": "newView", "family_name": "TestFamilyName", "included": True}, + { + "name": "no-write.test", + "family_name": "testiso", + "excluded": True, + }, + { + "name": "newView", + "family_name": "TestFamilyName", + "included": True, + }, ], }, } @@ -1318,7 +1463,7 @@ class TestIosSnmpServerModule(TestIosModule): "snmp-server host 172.16.2.1 version 2c trapsac tty", "snmp-server host 172.16.2.99 checktrap isis", "snmp-server group group0 v3 auth", - "snmp-server group group1 v1 notify me access 2", + "snmp-server group group1 v1 notify me access ipv6 ipv6acl 2", "snmp-server engineID local AB0C5342FA0A", "snmp-server engineID remote 172.16.0.1 udp-port 22 AB0C5342FAAA", "snmp-server community commu1 view view1 ro ipv6 te", @@ -1362,7 +1507,11 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"community_string": "check", "host": "172.16.2.99", "traps": ["slb"]}, + { + "community_string": "check", + "host": "172.16.2.99", + "traps": ["slb"], + }, ], }, } @@ -1414,10 +1563,18 @@ class TestIosSnmpServerModule(TestIosModule): parsed = { "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], "users": [ - {"username": "paul", "group": "familypaul", "version": "v3", "acl_v6": "ipv6acl"}, + { + "username": "paul", + "group": "familypaul", + "version": "v3", + "acl_v6": "ipv6acl", + }, ], "traps": { "ospf": { @@ -1494,8 +1651,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp", "stun"], "version": "2c", }, - {"host": "172.16.2.99", "community_string": "check", "traps": ["slb", "pki"]}, - {"host": "172.16.2.99", "community_string": "checktrap", "traps": ["isis", "hsrp"]}, + { + "host": "172.16.2.99", + "community_string": "check", + "traps": ["slb", "pki"], + }, + { + "host": "172.16.2.99", + "community_string": "checktrap", + "traps": ["isis", "hsrp"], + }, ], "groups": [ { @@ -1583,7 +1748,11 @@ class TestIosSnmpServerModule(TestIosModule): "version": "3", "version_option": "noauth", }, - {"host": "172.16.2.99", "community_string": "checktrap", "traps": ["isis", "hsrp"]}, + { + "host": "172.16.2.99", + "community_string": "checktrap", + "traps": ["isis", "hsrp"], + }, ], "users": [ { @@ -1632,7 +1801,10 @@ class TestIosSnmpServerModule(TestIosModule): "config": { "engine_id": [ {"id": "AB0C5342FA0A", "local": True}, - {"id": "AB0C5342FAAB", "remote": {"host": "172.16.0.2", "udp_port": 23}}, + { + "id": "AB0C5342FAAB", + "remote": {"host": "172.16.0.2", "udp_port": 23}, + }, ], "views": [ {"family_name": "iso", "name": "ro"}, @@ -1728,8 +1900,16 @@ class TestIosSnmpServerModule(TestIosModule): "traps": ["msdp"], "version": "2c", }, - {"host": "172.16.2.99", "community_string": "check", "traps": ["slb"]}, - {"host": "172.16.2.99", "community_string": "checktrap", "traps": ["isis"]}, + { + "host": "172.16.2.99", + "community_string": "check", + "traps": ["slb"], + }, + { + "host": "172.16.2.99", + "community_string": "checktrap", + "traps": ["isis"], + }, ], }, "state": "rendered", @@ -1777,7 +1957,10 @@ class TestIosSnmpServerModule(TestIosModule): "username": "paul", "group": "familypaul", "version": "v3", - "authentication": {"algorithm": "md5", "password": "somepass"}, + "authentication": { + "algorithm": "md5", + "password": "somepass", + }, "encryption": { "priv": "aes", "priv_option": 128, @@ -1789,7 +1972,9 @@ class TestIosSnmpServerModule(TestIosModule): "state": "rendered", }, ) - rendered = ["snmp-server user paul familypaul v3 auth md5 somepass priv aes 128 somepass"] + rendered = [ + "snmp-server user paul familypaul v3 auth md5 somepass priv aes 128 somepass", + ] result = self.execute_module(changed=False) self.maxDiff = None self.assertEqual(sorted(result["rendered"]), sorted(rendered)) @@ -1902,10 +2087,11 @@ class TestIosSnmpServerModule(TestIosModule): }, } overridden = [ - "no snmp-server user flow mfamily v3 access 27", + "snmp-server user replaceUser replaceUser v3 auth md5 replaceUser access 22", "snmp-server user flow mfamily v3 access 27", "no snmp-server user newuser newfamily v1 access 24", ] + playbook["state"] = "overridden" set_module_args(playbook) result = self.execute_module(changed=True) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py index d1046cc72..57a416433 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_static_routes.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_static_routes -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule @@ -232,7 +231,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -422,7 +424,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -639,7 +644,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -829,7 +837,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -1046,7 +1057,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -1236,7 +1250,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -1716,7 +1733,9 @@ class TestIosStaticRoutesModule(TestIosModule): config=[ dict( vrf="testVrf2", - address_families=[dict(afi="ipv4", routes=[dict(dest="192.0.2.0/24")])], + address_families=[ + dict(afi="ipv4", routes=[dict(dest="192.0.2.0/24")]), + ], ), dict( vrf="testVrfv6", @@ -1840,7 +1859,10 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "next_hops": [ - {"forward_router_address": "10.1.1.2", "track": 10}, + { + "forward_router_address": "10.1.1.2", + "track": 10, + }, { "forward_router_address": "10.1.1.3", "distance_metric": 22, @@ -2127,7 +2149,9 @@ class TestIosStaticRoutesModule(TestIosModule): "routes": [ { "dest": "10.0.0.0/8", - "next_hops": [{"interface": "Null0", "permanent": True}], + "next_hops": [ + {"interface": "Null0", "permanent": True}, + ], }, ], }, diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py index b82d7ae48..915d7a1f7 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_system.py @@ -21,9 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_system -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -70,7 +70,12 @@ class TestIosSystemModule(TestIosModule): def test_ios_system_domain_name_complex(self): set_module_args( - dict(domain_name=[{"name": "test.com", "vrf": "test"}, {"name": "eng.example.net"}]), + dict( + domain_name=[ + {"name": "test.com", "vrf": "test"}, + {"name": "eng.example.net"}, + ], + ), ) commands = [ "ip domain name vrf test test.com", @@ -107,7 +112,10 @@ class TestIosSystemModule(TestIosModule): def test_ios_system_name_servers(self): name_servers = ["8.8.8.8", "8.8.4.4"] set_module_args(dict(name_servers=name_servers)) - commands = ["no ip name-server vrf management 8.8.8.8", "ip name-server 8.8.4.4"] + commands = [ + "no ip name-server vrf management 8.8.8.8", + "ip name-server 8.8.4.4", + ] self.execute_module(changed=True, commands=commands, sort=False) def rest_ios_system_name_servers_complex(self): diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py index 8cd3c07c3..a13467afb 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_user.py @@ -20,9 +20,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_user -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -93,18 +93,23 @@ class TestIosUserModule(TestIosModule): def test_ios_user_purge(self): set_module_args(dict(purge=True)) result = self.execute_module(changed=True) - cmd = { - "command": "no username ansible", - "answer": "y", - "newline": False, - "prompt": "This operation will remove all username related configurations with same name", - } + cmd = [ + "ip ssh pubkey-chain", + "no username ansible", + "exit", + { + "command": "no username ansible", + "answer": "y", + "newline": False, + "prompt": "This operation will remove all username related configurations with same name", + }, + ] result_cmd = [] for i in result["commands"]: result_cmd.append(i) - self.assertEqual(result_cmd, [cmd]) + self.assertEqual(result_cmd, cmd) def test_ios_user_view(self): set_module_args(dict(name="ansible", view="test")) @@ -112,18 +117,26 @@ class TestIosUserModule(TestIosModule): self.assertEqual(result["commands"], ["username ansible view test"]) def test_ios_user_update_password_changed(self): - set_module_args(dict(name="test", configured_password="test", update_password="on_create")) + set_module_args( + dict(name="test", configured_password="test", update_password="on_create"), + ) result = self.execute_module(changed=True) self.assertEqual(result["commands"], ["username test secret test"]) def test_ios_user_update_password_on_create_ok(self): set_module_args( - dict(name="ansible", configured_password="test", update_password="on_create"), + dict( + name="ansible", + configured_password="test", + update_password="on_create", + ), ) self.execute_module() def test_ios_user_update_password_always(self): - set_module_args(dict(name="ansible", configured_password="test", update_password="always")) + set_module_args( + dict(name="ansible", configured_password="test", update_password="always"), + ) result = self.execute_module(changed=True) self.assertEqual(result["commands"], ["username ansible secret test"]) @@ -151,3 +164,34 @@ class TestIosUserModule(TestIosModule): ] result = self.execute_module(changed=True, commands=commands) self.assertEqual(result["commands"], commands) + + def test_add_hashed_password(self): + hashed_password_val = "replacementforhashwhichissupposedtogohereonlyfortestingpurposes" + set_module_args( + dict( + name="ansible", + hashed_password={ + "type": 9, + "value": hashed_password_val, + }, + ), + ) + result = self.execute_module(changed=True) + self.assertEqual( + result["commands"], + [f"username ansible secret 9 {hashed_password_val}"], + ) + + def test_add_hpassword_with_type(self): + set_module_args( + dict( + name="ansible", + hashed_password={ + "type": 0, + "value": "test", + }, + password_type="password", + ), + ) + result = self.execute_module(changed=True) + self.assertEqual(result["commands"], ["username ansible password 0 test"]) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py index c19d58ffd..10b30e140 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vlans.py @@ -7,14 +7,13 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_vlans -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args -from .ios_module import TestIosModule, load_fixture +from .ios_module import TestIosModule class TestIosVlansModule(TestIosModule): @@ -23,50 +22,22 @@ class TestIosVlansModule(TestIosModule): def setUp(self): super(TestIosVlansModule, self).setUp() - self.mock_get_config = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.network.Config.get_config", - ) - self.get_config = self.mock_get_config.start() - - self.mock_load_config = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.network.Config.load_config", - ) - self.load_config = self.mock_load_config.start() - - self.mock_get_resource_connection_config = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.cfg.base." - "get_resource_connection", - ) - self.get_resource_connection_config = self.mock_get_resource_connection_config.start() - self.mock_get_resource_connection_facts = patch( - "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.facts.facts." - "get_resource_connection", - ) - self.get_resource_connection_facts = self.mock_get_resource_connection_facts.start() - - self.mock_edit_config = patch( - "ansible_collections.cisco.ios.plugins.module_utils.network.ios.providers.providers.CliProvider.edit_config", - ) - self.edit_config = self.mock_edit_config.start() - - self.mock_get_resource_connection_facts_2 = patch( "ansible_collections.ansible.netcommon.plugins.module_utils.network.common.rm_base.resource_module_base." "get_resource_connection", ) - self.get_resource_connection_facts_2 = self.mock_get_resource_connection_facts_2.start() - - self.mock_execute_show_command_2 = patch( - "ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vlans.vlans." - "VlansFacts.get_vlans_data", - ) - self.execute_show_command_2 = self.mock_execute_show_command_2.start() + self.get_resource_connection_facts = self.mock_get_resource_connection_facts.start() self.mock_execute_show_command = patch( "ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vlans.vlans." "VlansFacts.get_vlans_data", ) self.execute_show_command = self.mock_execute_show_command.start() + self.mock_execute_show_command_conf = patch( + "ansible_collections.cisco.ios.plugins.module_utils.network.ios.facts.vlans.vlans." + "VlansFacts.get_vlan_conf_data", + ) + self.execute_show_command_conf = self.mock_execute_show_command_conf.start() self.mock_l2_device_command = patch( "ansible_collections.cisco.ios.plugins.modules.ios_vlans._is_l2_device", ) @@ -74,24 +45,55 @@ class TestIosVlansModule(TestIosModule): def tearDown(self): super(TestIosVlansModule, self).tearDown() - self.mock_get_resource_connection_config.stop() - self.mock_get_resource_connection_facts.stop() - self.mock_edit_config.stop() - self.mock_get_config.stop() - self.mock_load_config.stop() self.mock_execute_show_command.stop() + self.mock_execute_show_command_conf.stop() self.mock_l2_device_command.stop() - self.mock_get_resource_connection_facts_2.stop() - self.mock_execute_show_command_2.stop() - - def load_fixtures(self, commands=None): - def load_from_file(*args, **kwargs): - return load_fixture("ios_vlans_config.cfg") + def test_ios_vlans_merged(self): self.mock_l2_device_command.side_effect = True - self.execute_show_command.side_effect = load_from_file + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup - def test_ios_vlans_merged(self): + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -107,14 +109,70 @@ class TestIosVlansModule(TestIosModule): ), ) result = self.execute_module(changed=True) - commands = ["vlan 200", "name test_vlan_200", "state active", "remote-span", "no shutdown"] + commands = [ + "vlan 200", + "name test_vlan_200", + "state active", + "remote-span", + "no shutdown", + ] self.assertEqual(result["commands"], commands) def test_ios_vlans_merged_idempotent(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ - dict(mtu=1500, name="default", shutdown="disabled", state="active", vlan_id=1), + dict( + mtu=1500, + name="default", + shutdown="disabled", + state="active", + vlan_id=1, + ), dict( mtu=610, name="RemoteIsInMyName", @@ -172,6 +230,50 @@ class TestIosVlansModule(TestIosModule): self.execute_module(changed=False, commands=[], sort=True) def test_ios_vlans_replaced(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -182,14 +284,26 @@ class TestIosVlansModule(TestIosModule): remote_span=True, vlan_id=200, ), - dict(name="Replace_RemoteIsInMyName", remote_span=True, vlan_id=123), + dict( + name="Replace_RemoteIsInMyName", + remote_span=True, + vlan_id=123, + ), dict( name="pvlan-primary", private_vlan=dict(type="primary", associated=[11, 12]), vlan_id=10, ), - dict(name="pvlan-community", private_vlan=dict(type="community"), vlan_id=11), - dict(name="pvlan-isolated", private_vlan=dict(type="isolated"), vlan_id=12), + dict( + name="pvlan-community", + private_vlan=dict(type="community"), + vlan_id=11, + ), + dict( + name="pvlan-isolated", + private_vlan=dict(type="isolated"), + vlan_id=12, + ), ], state="replaced", ), @@ -202,38 +316,79 @@ class TestIosVlansModule(TestIosModule): "remote-span", "no shutdown", "vlan 123", + "name Replace_RemoteIsInMyName", "no state active", - "no shutdown", "no mtu 610", - "name Replace_RemoteIsInMyName", "remote-span", + "shutdown", "vlan 10", - "no state active", - "no shutdown", - "no mtu 4472", "name pvlan-primary", "private-vlan primary", "private-vlan association 11,12", "vlan 11", - "no state active", - "no shutdown", - "no mtu 4472", "name pvlan-community", "private-vlan community", "vlan 12", - "no state active", - "no shutdown", - "no mtu 4472", "name pvlan-isolated", "private-vlan isolated", ] self.assertEqual(result["commands"], commands) def test_ios_vlans_replaced_idempotent(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ - dict(mtu=1500, name="default", shutdown="disabled", state="active", vlan_id=1), + dict( + mtu=1500, + name="default", + shutdown="disabled", + state="active", + vlan_id=1, + ), dict( mtu=610, name="RemoteIsInMyName", @@ -291,6 +446,50 @@ class TestIosVlansModule(TestIosModule): self.execute_module(changed=False, commands=[], sort=True) def test_ios_vlans_overridden(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -301,35 +500,123 @@ class TestIosVlansModule(TestIosModule): remote_span=True, vlan_id=200, ), - dict(name="Override_RemoteIsInMyName", remote_span=True, vlan_id=123), + dict( + name="Override_RemoteIsInMyName", + remote_span=True, + vlan_id=123, + ), ], state="overridden", ), ) result = self.execute_module(changed=True) commands = [ - "vlan 123", + "vlan 1", + "no name default", "no state active", - "no shutdown", - "no mtu 610", - "name Override_RemoteIsInMyName", - "remote-span", - "no vlan 150", - "no vlan 888", + "no mtu 1500", + "shutdown", + "vlan 150", + "no name VLAN0150", + "no state active", + "no mtu 1500", + "no remote-span", + "shutdown", + "vlan 888", + "no name a_very_long_vlan_name_a_very_long_vlan_name", + "no state active", + "no mtu 1500", + "shutdown", + "vlan 1002", + "no name fddi-default", + "no state active", + "no mtu 1500", + "shutdown", + "vlan 1003", + "no name trcrf-default", + "no state active", + "no mtu 4472", + "shutdown", + "vlan 1004", + "no name fddinet-default", + "no state active", + "no mtu 1500", + "shutdown", + "vlan 1005", + "no name trbrf-default", + "no state active", + "no mtu 4472", + "shutdown", "vlan 200", "name test_vlan_200", "state active", "remote-span", "no shutdown", + "vlan 123", + "name Override_RemoteIsInMyName", + "no state active", + "no mtu 610", + "remote-span", + "shutdown", ] self.assertEqual(result["commands"], commands) def test_ios_vlans_overridden_idempotent(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ - dict(mtu=1500, name="default", shutdown="disabled", state="active", vlan_id=1), + dict( + mtu=1500, + name="default", + shutdown="disabled", + state="active", + vlan_id=1, + ), dict( mtu=610, name="RemoteIsInMyName", @@ -386,13 +673,108 @@ class TestIosVlansModule(TestIosModule): ) self.execute_module(changed=False, commands=[], sort=True) - def test_ios_delete_vlans(self): + def test_ios_delete_vlans_config(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args(dict(config=[dict(vlan_id=150)], state="deleted")) result = self.execute_module(changed=True) - commands = ["no vlan 150"] + commands = [ + "vlan 150", + "no name VLAN0150", + "no state active", + "no mtu 1500", + "no remote-span", + "shutdown", + ] self.assertEqual(result["commands"], commands) def test_vlans_rendered(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args( dict( config=[ @@ -407,7 +789,13 @@ class TestIosVlansModule(TestIosModule): state="rendered", ), ) - commands = ["name test_vlan_200", "no shutdown", "remote-span", "state active", "vlan 200"] + commands = [ + "name test_vlan_200", + "no shutdown", + "remote-span", + "state active", + "vlan 200", + ] result = self.execute_module(changed=False) self.assertEqual(sorted(result["rendered"]), commands) @@ -598,6 +986,50 @@ class TestIosVlansModule(TestIosModule): self.assertEqual(result["parsed"], parsed) def test_ios_vlans_gathered(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 123 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 123 enet 100123 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + """, + ) set_module_args(dict(state="gathered")) gathered = [ { @@ -664,6 +1096,22 @@ class TestIosVlansModule(TestIosModule): self.assertEqual(result["gathered"], gathered) def test_ios_vlans_config_merged(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + vlan configuration 102 + member evpn-instance 102 vni 10102 + vlan configuration 201 + member evpn-instance 201 vni 10201 + vlan configuration 202 + member evpn-instance 202 vni 10202 + vlan configuration 901 + member vni 50901 + vlan configuration 902 + member vni 50902 + """, + ) set_module_args( dict( config=[ @@ -676,7 +1124,6 @@ class TestIosVlansModule(TestIosModule): ), ], state="merged", - configuration=True, ), ) result = self.execute_module(changed=True) @@ -687,21 +1134,37 @@ class TestIosVlansModule(TestIosModule): self.assertEqual(result["commands"], commands) def test_ios_vlans_config_merged_idempotent(self): - self.execute_show_command_2 = self.mock_execute_show_command_2.start() - self.execute_show_command_2.return_value = dedent( + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = dedent( """\ vlan configuration 101 - member evpn-instance 101 vni 10101 + member evpn-instance 101 vni 10101 vlan configuration 102 - member evpn-instance 102 vni 10102 + member evpn-instance 102 vni 10102 vlan configuration 201 - member evpn-instance 201 vni 10201 + member evpn-instance 201 vni 10201 vlan configuration 202 - member evpn-instance 202 vni 10202 + member evpn-instance 202 vni 10202 vlan configuration 901 - member vni 50901 + member vni 50901 vlan configuration 902 - member vni 50902 + member vni 50902 + """, + ) + self.execute_show_command.return_value = dedent( + """\ + vlan configuration 101 + member evpn-instance 101 vni 10101 + vlan configuration 102 + member evpn-instance 102 vni 10102 + vlan configuration 201 + member evpn-instance 201 vni 10201 + vlan configuration 202 + member evpn-instance 202 vni 10202 + vlan configuration 901 + member vni 50901 + vlan configuration 902 + member vni 50902 """, ) set_module_args( @@ -716,27 +1179,27 @@ class TestIosVlansModule(TestIosModule): ), ], state="merged", - configuration=True, ), ) self.execute_module(changed=False, commands=[], sort=True) def test_ios_vlans_config_overridden(self): - self.execute_show_command_2 = self.mock_execute_show_command_2.start() - self.execute_show_command_2.return_value = dedent( + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( """\ vlan configuration 101 - member evpn-instance 101 vni 10101 + member evpn-instance 101 vni 10101 vlan configuration 102 - member evpn-instance 102 vni 10102 + member evpn-instance 102 vni 10102 vlan configuration 201 - member evpn-instance 201 vni 10201 + member evpn-instance 201 vni 10201 vlan configuration 202 - member evpn-instance 202 vni 10202 + member evpn-instance 202 vni 10202 vlan configuration 901 - member vni 50901 + member vni 50901 vlan configuration 902 - member vni 50902 + member vni 50902 """, ) set_module_args( @@ -758,29 +1221,29 @@ class TestIosVlansModule(TestIosModule): ), ], state="overridden", - configuration=True, ), ) result = self.execute_module(changed=True) commands = [ - "vlan configuration 101", - "no member evpn-instance 101 vni 10101", - "vlan configuration 102", - "no member evpn-instance 102 vni 10102", + "vlan configuration 201", + "no member evpn-instance 201 vni 10201", + "vlan configuration 202", + "no member evpn-instance 202 vni 10202", + "vlan configuration 901", + "no member vni 50901", + "vlan configuration 902", + "no member vni 50902", "vlan configuration 101", "member evpn-instance 102 vni 10102", "vlan configuration 102", "member evpn-instance 101 vni 10101", - "no vlan configuration 201", - "no vlan configuration 202", - "no vlan configuration 901", - "no vlan configuration 902", ] self.assertEqual(result["commands"], commands) - def test_ios_delete_vlans_config(self): - self.execute_show_command_2 = self.mock_execute_show_command_2.start() - self.execute_show_command_2.return_value = dedent( + def test_ios_delete_vlans_config_2(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( """\ vlan configuration 101 member evpn-instance 101 vni 10101 @@ -801,16 +1264,48 @@ class TestIosVlansModule(TestIosModule): config=[ {"vlan_id": 101}, ], - configuration=True, state="deleted", ), ) result = self.execute_module(changed=True) + commands = ["vlan configuration 101", "no member evpn-instance 101 vni 10101"] + self.assertEqual(result["commands"], commands) + + def test_ios_purged_vlans_config(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( + """\ + vlan configuration 101 + member evpn-instance 101 vni 10101 + vlan configuration 102 + member evpn-instance 102 vni 10102 + vlan configuration 201 + member evpn-instance 201 vni 10201 + vlan configuration 202 + member evpn-instance 202 vni 10202 + vlan configuration 901 + member vni 50901 + vlan configuration 902 + member vni 50902 + """, + ) + set_module_args( + dict( + config=[ + {"vlan_id": 101}, + ], + state="purged", + ), + ) + result = self.execute_module(changed=True) commands = ["no vlan configuration 101"] self.assertEqual(result["commands"], commands) - def test_vlans_config_rendered(self): - self.execute_show_command_2.return_value = dedent( + def test_ios_vlans_config_rendered(self): + self.mock_l2_device_command.side_effect = True + self.mock_execute_show_command_conf.side_effect = "" + self.execute_show_command.return_value = dedent( """\ """, ) @@ -825,7 +1320,6 @@ class TestIosVlansModule(TestIosModule): ), ), ], - configuration=True, state="rendered", ), ) @@ -836,11 +1330,50 @@ class TestIosVlansModule(TestIosModule): result = self.execute_module(changed=False) self.assertEqual(result["rendered"], commands) - def test_vlans_config_parsed(self): + def test_ios_vlans_config_parsed(self): set_module_args( dict( running_config=dedent( """\ + VLAN Name Status Ports + ---- -------------------------------- --------- ------------------------------- + 1 default active Gi0/1, Gi0/2 + 101 RemoteIsInMyName act/unsup Fa0/1, Fa0/4, Fa0/5, Fa0/6, Fa0/7, Fa0/8, Fa0/9, Fa0/10, Fa0/11, Fa0/12 + Fa0/13, Fa0/14, Fa0/15, Fa0/16, Fa0/17, Fa0/18, Fa0/19, Fa0/20, Fa0/21 + Fa0/22, Fa0/23, Fa0/24, Fa0/25, Fa0/26, Fa0/27, Fa0/28, Fa0/29, Fa0/30 + Fa0/31, Fa0/32, Fa0/33, Fa0/34, Fa0/35, Fa0/36, Fa0/37, Fa0/38, Fa0/39 + Fa0/40, Fa0/41, Fa0/42, Fa0/43, Fa0/44, Fa0/45, Fa0/46, Fa0/47, Fa0/48 + 150 VLAN0150 active + 888 a_very_long_vlan_name_a_very_long_vlan_name + active + 1002 fddi-default act/unsup + 1003 trcrf-default act/unsup + 1004 fddinet-default act/unsup + 1005 trbrf-default act/unsup + + VLAN Type SAID MTU Parent RingNo BridgeNo Stp BrdgMode Trans1 Trans2 + ---- ----- ---------- ----- ------ ------ -------- ---- -------- ------ ------ + 1 enet 100001 1500 - - - - - 0 0 + 101 enet 100101 610 - - - - - 0 0 + 150 enet 100150 1500 - - - - - 0 0 + 888 enet 100888 1500 - - - - - 0 0 + 1002 fddi 101002 1500 - - - - - 0 0 + 1003 trcrf 101003 4472 1005 3276 - - srb 0 0 + 1004 fdnet 101004 1500 - - - ieee - 0 0 + 1005 trbrf 101005 4472 - - 15 ibm - 0 0 + + + VLAN AREHops STEHops Backup CRF + ---- ------- ------- ---------- + 1003 7 7 off + + Remote SPAN VLANs + ------------------------------------------------------------------------------ + 150 + + Primary Secondary Type Ports + ------- --------- ----------------- ------------------------------------------ + vlan configuration 101 member evpn-instance 101 vni 10101 vlan configuration 102 @@ -850,30 +1383,69 @@ class TestIosVlansModule(TestIosModule): """, ), state="parsed", - configuration=True, ), ) parsed = [ { - "member": { - "evi": 101, - "vni": 10101, - }, + "name": "default", + "vlan_id": 1, + "state": "active", + "shutdown": "disabled", + "mtu": 1500, + }, + { + "name": "RemoteIsInMyName", "vlan_id": 101, + "state": "active", + "shutdown": "enabled", + "mtu": 610, + "member": {"evi": 101, "vni": 10101}, }, { - "member": { - "evi": 102, - "vni": 10102, - }, - "vlan_id": 102, + "name": "VLAN0150", + "vlan_id": 150, + "state": "active", + "shutdown": "disabled", + "mtu": 1500, + "remote_span": True, + }, + { + "name": "a_very_long_vlan_name_a_very_long_vlan_name", + "vlan_id": 888, + "state": "active", + "shutdown": "disabled", + "mtu": 1500, + }, + { + "name": "fddi-default", + "vlan_id": 1002, + "state": "active", + "shutdown": "enabled", + "mtu": 1500, }, { - "member": { - "vni": 50901, - }, - "vlan_id": 901, + "name": "trcrf-default", + "vlan_id": 1003, + "state": "active", + "shutdown": "enabled", + "mtu": 4472, + }, + { + "name": "fddinet-default", + "vlan_id": 1004, + "state": "active", + "shutdown": "enabled", + "mtu": 1500, + }, + { + "name": "trbrf-default", + "vlan_id": 1005, + "state": "active", + "shutdown": "enabled", + "mtu": 4472, }, + {"vlan_id": 102, "member": {"evi": 102, "vni": 10102}}, + {"vlan_id": 901, "member": {"vni": 50901}}, ] result = self.execute_module(changed=False) diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py index d36ea41e1..f39061989 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vrf.py @@ -21,9 +21,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_vrf -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule, load_fixture @@ -58,7 +58,11 @@ class TestIosVrfModule(TestIosModule): def load_fixtures(self, commands=None): self.get_config.return_value = load_fixture("ios_vrf_config.cfg") - self.exec_command.return_value = (0, load_fixture("ios_vrf_config.cfg").strip(), None) + self.exec_command.return_value = ( + 0, + load_fixture("ios_vrf_config.cfg").strip(), + None, + ) self.load_config.return_value = None def test_ios_vrf_name(self): @@ -158,7 +162,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrfs_local_override_state(self): vrfs = [{"name": "test_1", "state": "absent"}, {"name": "test_2"}] set_module_args(dict(vrfs=vrfs, description="test string")) - commands = ["no vrf definition test_1", "vrf definition test_2", "description test string"] + commands = [ + "no vrf definition test_1", + "vrf definition test_2", + "description test string", + ] self.execute_module(changed=True, commands=commands, sort=False) def test_ios_vrf_route_both(self): @@ -178,7 +186,9 @@ class TestIosVrfModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_vrf_route_import(self): - set_module_args(dict(name="test_6", rd="3:100", route_import=["3:100", "4:100"])) + set_module_args( + dict(name="test_6", rd="3:100", route_import=["3:100", "4:100"]), + ) commands = [ "vrf definition test_6", "rd 3:100", @@ -188,7 +198,9 @@ class TestIosVrfModule(TestIosModule): self.execute_module(changed=True, commands=commands, sort=False) def test_ios_vrf_route_export(self): - set_module_args(dict(name="test_7", rd="4:100", route_export=["3:100", "4:100"])) + set_module_args( + dict(name="test_7", rd="4:100", route_export=["3:100", "4:100"]), + ) commands = [ "vrf definition test_7", "rd 4:100", @@ -210,7 +222,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_both_ipv4(self): set_module_args( - dict(name="test_9", rd="168.0.0.9:100", route_both_ipv4=["168.0.0.9:100", "3:100"]), + dict( + name="test_9", + rd="168.0.0.9:100", + route_both_ipv4=["168.0.0.9:100", "3:100"], + ), ) commands = [ "vrf definition test_9", @@ -281,7 +297,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_both_ipv6(self): set_module_args( - dict(name="test_13", rd="2:100", route_both_ipv6=["2:100", "168.0.0.13:100"]), + dict( + name="test_13", + rd="2:100", + route_both_ipv6=["2:100", "168.0.0.13:100"], + ), ) commands = [ "vrf definition test_13", @@ -301,7 +321,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_import_ipv6(self): set_module_args( - dict(name="test_14", rd="3:100", route_import_ipv6=["3:100", "168.0.0.14:100"]), + dict( + name="test_14", + rd="3:100", + route_import_ipv6=["3:100", "168.0.0.14:100"], + ), ) commands = [ "vrf definition test_14", @@ -317,7 +341,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_route_export_ipv6(self): set_module_args( - dict(name="test_15", rd="4:100", route_export_ipv6=["168.0.0.15:100", "4:100"]), + dict( + name="test_15", + rd="4:100", + route_export_ipv6=["168.0.0.15:100", "4:100"], + ), ) commands = [ "vrf definition test_15", @@ -386,7 +414,11 @@ class TestIosVrfModule(TestIosModule): def test_ios_vrf_interface_brownfield(self): set_module_args(dict(name="test_19", interfaces=["Ethernet1"])) - commands = ["interface Ethernet1", "vrf forwarding test_19", "ip address 1.2.3.4/5"] + commands = [ + "interface Ethernet1", + "vrf forwarding test_19", + "ip address 1.2.3.4/5", + ] self.execute_module(changed=True, commands=commands, sort=False) def test_ios_mdt(self): diff --git a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py index 25b0bc8a6..13e6a5380 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/network/ios/test_ios_vxlan_vtep.py @@ -7,11 +7,10 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type - from textwrap import dedent +from unittest.mock import patch from ansible_collections.cisco.ios.plugins.modules import ios_vxlan_vtep -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch from ansible_collections.cisco.ios.tests.unit.modules.utils import set_module_args from .ios_module import TestIosModule diff --git a/ansible_collections/cisco/ios/tests/unit/modules/utils.py b/ansible_collections/cisco/ios/tests/unit/modules/utils.py index 6184c48c3..87be9cf8e 100644 --- a/ansible_collections/cisco/ios/tests/unit/modules/utils.py +++ b/ansible_collections/cisco/ios/tests/unit/modules/utils.py @@ -4,12 +4,12 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type import json +from unittest import TestCase +from unittest.mock import patch + from ansible.module_utils import basic from ansible.module_utils._text import to_bytes -from ansible_collections.cisco.ios.tests.unit.compat import unittest -from ansible_collections.cisco.ios.tests.unit.compat.mock import patch - def set_module_args(args): if "_ansible_remote_tmp" not in args: @@ -40,7 +40,7 @@ def fail_json(*args, **kwargs): raise AnsibleFailJson(kwargs) -class ModuleTestCase(unittest.TestCase): +class ModuleTestCase(TestCase): def setUp(self): self.mock_module = patch.multiple( basic.AnsibleModule, diff --git a/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py b/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py index 0b7cf8704..eb094b2c7 100644 --- a/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py +++ b/ansible_collections/cisco/ios/tests/unit/plugins/cliconf/test_ios.py @@ -31,10 +31,11 @@ try: except ImportError: from mock import MagicMock +from unittest import TestCase + from ansible.module_utils._text import to_bytes from ansible_collections.cisco.ios.plugins.cliconf import ios -from ansible_collections.cisco.ios.tests.unit.compat import unittest b_FIXTURE_DIR = b"%s/fixtures/ios" % ( @@ -49,7 +50,9 @@ def _connection_side_effect(*args, **kwargs): else: value = kwargs.get("command") - fixture_path = path.abspath(b"%s/%s" % (b_FIXTURE_DIR, b"_".join(value.split(b" ")))) + fixture_path = path.abspath( + b"%s/%s" % (b_FIXTURE_DIR, b"_".join(value.split(b" "))), + ) with open(fixture_path, "rb") as file_desc: return file_desc.read() except (OSError, IOError): @@ -63,7 +66,7 @@ def _connection_side_effect(*args, **kwargs): return "Nope" -class TestPluginCLIConfIOS(unittest.TestCase): +class TestPluginCLIConfIOS(TestCase): """Test class for IOS CLI Conf Methods""" def setUp(self): diff --git a/ansible_collections/cisco/ios/tox-ansible.ini b/ansible_collections/cisco/ios/tox-ansible.ini new file mode 100644 index 000000000..5e1f4b36a --- /dev/null +++ b/ansible_collections/cisco/ios/tox-ansible.ini @@ -0,0 +1,10 @@ +[ansible] + +skip = + py3.7 + py3.8 + 2.9 + 2.10 + 2.11 + 2.12 + 2.13 diff --git a/ansible_collections/cisco/ios/tox.ini b/ansible_collections/cisco/ios/tox.ini deleted file mode 100644 index 6ada631cb..000000000 --- a/ansible_collections/cisco/ios/tox.ini +++ /dev/null @@ -1,31 +0,0 @@ -[tox] -minversion = 1.4.2 -envlist = linters -skipsdist = True - -[testenv] -deps = -r{toxinidir}/requirements.txt - -r{toxinidir}/test-requirements.txt - -[testenv:black] -install_command = pip install {opts} {packages} -commands = - black -v {toxinidir} - -[testenv:linters] -install_command = pip install {opts} {packages} -commands = - black -v --diff --check {toxinidir} - flake8 {posargs} - -[testenv:venv] -commands = {posargs} - -[flake8] -# E123, E125 skipped as they are invalid PEP-8. - -show-source = True -ignore = E123,E125,E203,E402,E501,E741,F401,F811,F841,W503 -max-line-length = 160 -builtins = _ -exclude = .git,.tox,tests/unit/compat/ |