diff --git a/.gitignore b/.gitignore index e9eb549..ba4cf4f 100644 --- a/.gitignore +++ b/.gitignore @@ -187,4 +187,6 @@ poetry.toml # ruff .ruff_cache/ -# End of https://www.toptal.com/developers/gitignore/api/ansible,python \ No newline at end of file +# End of https://www.toptal.com/developers/gitignore/api/ansible,python + +.envrc \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..5cfddea --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,14 @@ +# Changelog + +* [Changelog](#changelog) + * [v1.0.0](#v100) + * [New modules](#new-modules) + +## v1.0.0 + +### New modules + +* nokia.srlinux.get - Retrieve configuration or state element from Nokia SR Linux devices. +* nokia.srlinux.config - Update, replace and delete configuration on SR Linux devices. +* nokia.srlinux.validate - Validating configuration on SR Linux devices. +* nokia.srlinux.cli - Execute CLI commands on SR Linux devices. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..7612a85 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,3 @@ +# Contributing + +Refer to the [Ansible community guide](https://docs.ansible.com/ansible/devel/community/index.html). diff --git a/README.md b/README.md index 09bc801..81deccd 100644 --- a/README.md +++ b/README.md @@ -42,3 +42,40 @@ Then either run one of the provided test playbooks (defined in [run.sh](run.sh)) ```bash ./run.sh test-set-leaves ``` + +## Contributing to this collection + +The content of this collection is made by people like you, a community of individuals collaborating on making the world better through developing automation software. + +We are actively accepting new contributors and all types of contributions are very welcome. + +Don't know how to start? Refer to the [Ansible community guide](https://docs.ansible.com/ansible/devel/community/index.html)! + +Want to submit code changes? Take a look at the [Quick-start development guide](https://docs.ansible.com/ansible/devel/community/create_pr_quick_start.html). + +We also use the following guidelines: + +* [Collection review checklist](https://docs.ansible.com/ansible/devel/community/collection_contributors/collection_reviewing.html) +* [Ansible development guide](https://docs.ansible.com/ansible/devel/dev_guide/index.html) +* [Ansible collection development guide](https://docs.ansible.com/ansible/devel/dev_guide/developing_collections.html#contributing-to-collections) + +## Code of Conduct + +We follow the [Ansible Code of Conduct](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html) in all our interactions within this project. + +If you encounter abusive behavior, please refer to the [policy violations](https://docs.ansible.com/ansible/devel/community/code_of_conduct.html#policy-violations) section of the Code for information on how to raise a complaint. + +## Communication + +Join the Ansible forum: + +* [Get Help](https://forum.ansible.com/c/help/6): get help or help others. Please add appropriate tags if you start new discussions. +* [Posts tagged with 'srlinux'](https://forum.ansible.com/tag/srlinux): subscribe to participate in SR Linux Ansible collection/technology-related conversations. +* [Social Spaces](https://forum.ansible.com/c/chat/4): gather and interact with fellow enthusiasts. +* [News & Announcements](https://forum.ansible.com/c/news/5): track project-wide announcements including social events. The [Bullhorn newsletter](https://docs.ansible.com/ansible/devel/community/communication.html#the-bullhorn), which is used to announce releases and important changes, can also be found here. + +## Licensing + +BSD 3-Clause License + +See [LICENSE](LICENSE) to see the full text. diff --git a/galaxy.yml b/galaxy.yml index c9f531c..1be2a10 100644 --- a/galaxy.yml +++ b/galaxy.yml @@ -12,7 +12,7 @@ namespace: nokia name: srlinux # The version of the collection. Must be compatible with semantic versioning -version: 0.6.0 +version: 1.0.1 # The path to the Markdown (.md) readme file. This path is relative to the root of the collection readme: README.md @@ -39,7 +39,7 @@ tags: - srlinux - jsonrpc - httpapi - - network + - networking # Collections that this collection requires to be installed for it to be usable. The key of the dict is the # collection label 'namespace.name'. The value is a version range @@ -68,3 +68,4 @@ build_ignore: - run.sh - .github - .vscode + - .venv diff --git a/meta/runtime.yml b/meta/runtime.yml index de90beb..dd70adc 100644 --- a/meta/runtime.yml +++ b/meta/runtime.yml @@ -1,4 +1,4 @@ -requires_ansible: ">=2.11" +requires_ansible: ">=2.15.0" plugin_routing: modules: srl_config: diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..3ba8bfd --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,7 @@ +[project] +name = "srlinux-ansible-collection" +version = "0.6.0" +description = "SR Linux Ansible Collection" +readme = "README.md" +requires-python = ">=3.11" +dependencies = ["ansible-core==2.16.2"] diff --git a/run.sh b/run.sh index d372b40..254b19d 100755 --- a/run.sh +++ b/run.sh @@ -17,7 +17,7 @@ SCRIPTS_DIR="scripts" TESTS_DIR="$(pwd)/tests" # Containerlab version to use in CI tests -CLAB_VERSION="0.57.5" +CLAB_VERSION="0.61.0" CHECKPOINT_NAME="clab-initial" @@ -32,7 +32,7 @@ function _cdTests() { fi } -# transoforms ansible core version by swapping : with / +# transforms ansible core version by swapping : with / function _transformAnsibleCoreVersion() { echo "${1}" | sed 's/:/\//g' } @@ -69,6 +69,19 @@ function deploy-lab { sudo -E containerlab deploy -c } +# Parse dependencies from galaxy.yml and install each one in the local venv +function install-collection-deps { + python3 -c ' +import yaml +with open("galaxy.yml") as f: + deps = yaml.safe_load(f).get("dependencies", {}) + for name, version in deps.items(): + print(f"'{name}:{version}'") +' | while read dep; do + ansible-galaxy collection install $dep + done +} + # Prepare local dev environment by setting the symlink to the collection. function prepare-dev-env { # setup the symlink for ansible to resolve collection paths @@ -78,6 +91,9 @@ function prepare-dev-env { # setup .env file for python to resolve imports echo "PYTHONPATH=$(realpath ~)/.ansible/collections:/tmp/srl_ansible_dev" > .env + + # install collection dependencies + install-collection-deps } # revert to initial checkpoint to guarantee the node initial state diff --git a/scripts/topo.clab.yml b/scripts/topo.clab.yml index d6f9a29..0f5f485 100644 --- a/scripts/topo.clab.yml +++ b/scripts/topo.clab.yml @@ -8,4 +8,4 @@ topology: nodes: srl: kind: nokia_srlinux - image: ghcr.io/nokia/srlinux:${SRLINUX_VERSION:=24.7.2} + image: ghcr.io/nokia/srlinux:${SRLINUX_VERSION:=24.10.1} diff --git a/tests/playbooks/auth-fail.yml b/tests/playbooks/auth-fail.yml index d998fb2..a003023 100644 --- a/tests/playbooks/auth-fail.yml +++ b/tests/playbooks/auth-fail.yml @@ -16,5 +16,6 @@ register: get_return failed_when: not get_return.failed or "AuthenticationFailed" not in get_return.msg - - debug: + - name: Print debug + ansible.builtin.debug: var: get_return diff --git a/tests/playbooks/backup-cfg.yml b/tests/playbooks/backup-cfg.yml index a257c8a..4e50388 100644 --- a/tests/playbooks/backup-cfg.yml +++ b/tests/playbooks/backup-cfg.yml @@ -8,10 +8,10 @@ tasks: - name: Delete old config files ansible.builtin.file: - path: "{{item}}" + path: "{{ item }}" state: absent with_fileglob: - - "/tmp/{{inventory_hostname}}.cfg.*" + - "/tmp/{{ inventory_hostname }}.cfg.*" - name: Get entire running config nokia.srlinux.get: @@ -22,16 +22,16 @@ - name: Save fetched config in JSON ansible.builtin.copy: - content: "{{response.result[0] | to_nice_json}}" - dest: "/tmp/{{inventory_hostname}}.cfg.json" + content: "{{ response.result[0] | to_nice_json }}" + dest: "/tmp/{{ inventory_hostname }}.cfg.json" - name: Save fetched config in YAML ansible.builtin.copy: - content: "{{response.result[0] | to_nice_yaml}}" - dest: "/tmp/{{inventory_hostname}}.cfg.yml" + content: "{{ response.result[0] | to_nice_yaml }}" + dest: "/tmp/{{ inventory_hostname }}.cfg.yml" - - name: check if saved file contains "srl_nokia" + - name: Check if saved file contains "srl_nokia" ansible.builtin.shell: - cmd: "grep srl_nokia {{item}}" + cmd: "grep srl_nokia {{ item }}" with_fileglob: - - "/tmp/{{inventory_hostname}}.cfg.*" + - "/tmp/{{ inventory_hostname }}.cfg.*" diff --git a/tests/playbooks/cli-put-file.yml b/tests/playbooks/cli-put-file.yml index f5aa683..5c7f647 100644 --- a/tests/playbooks/cli-put-file.yml +++ b/tests/playbooks/cli-put-file.yml @@ -10,9 +10,9 @@ ansible_connection: ssh ansible_password: tasks: - - name: template config + - name: Template config ansible.builtin.template: - src: "{{playbook_dir}}/golden/{{inventory_hostname}}-golden.cfg.json.j2" + src: "{{ playbook_dir }}/golden/{{ inventory_hostname }}-golden.cfg.json.j2" dest: /tmp/config.json # - name: Run "show version" CLI command with text output format # hosts: clab @@ -26,5 +26,5 @@ # register: response # failed_when: '"Serial Number : Sim Serial No" not in response.result[0]' -# - debug: +# - ansible.builtin.debug: # var: response diff --git a/tests/playbooks/cli-show-version.yml b/tests/playbooks/cli-show-version.yml index ead2349..9f5e883 100644 --- a/tests/playbooks/cli-show-version.yml +++ b/tests/playbooks/cli-show-version.yml @@ -13,7 +13,8 @@ register: response failed_when: response.result[0]["basic system info"].Architecture != "x86_64" - - debug: + - name: Print debug + ansible.builtin.debug: var: response - name: Run "show version" CLI command with text output format @@ -28,5 +29,6 @@ register: response failed_when: '"Serial Number : Sim Serial No" not in response.result[0]' - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/cli-wrong-cmd.yml b/tests/playbooks/cli-wrong-cmd.yml index bd433f1..be8cc43 100644 --- a/tests/playbooks/cli-wrong-cmd.yml +++ b/tests/playbooks/cli-wrong-cmd.yml @@ -13,5 +13,6 @@ register: response failed_when: '("Parsing error: Unknown token" not in response.msg) or (response.failed is not true)' - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/delete-leaves.yml b/tests/playbooks/delete-leaves.yml index 4caa963..95a04ad 100644 --- a/tests/playbooks/delete-leaves.yml +++ b/tests/playbooks/delete-leaves.yml @@ -22,7 +22,8 @@ - path: /system/information/contact register: delete_response - - debug: + - name: Print debug + ansible.builtin.debug: var: delete_response - name: Ensure leaves were deleted @@ -33,5 +34,6 @@ register: get_response failed_when: get_response.result[0].location is defined or get_response.result[0].contact is defined - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/get-container.yml b/tests/playbooks/get-container.yml index d4d4360..6f9937e 100644 --- a/tests/playbooks/get-container.yml +++ b/tests/playbooks/get-container.yml @@ -15,5 +15,6 @@ register: response failed_when: '"SRLinux" not in response.result[0].description' - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/get-multiple-paths.yml b/tests/playbooks/get-multiple-paths.yml index 77d7e52..d27e5d0 100644 --- a/tests/playbooks/get-multiple-paths.yml +++ b/tests/playbooks/get-multiple-paths.yml @@ -22,5 +22,6 @@ register: response failed_when: '("SRLinux" not in response.result[0]) or ("mgmt" not in response.result[1]["network-instance"][0].name)' - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/get-oc-container.yml b/tests/playbooks/get-oc-container.yml index 6f4312d..0670194 100644 --- a/tests/playbooks/get-oc-container.yml +++ b/tests/playbooks/get-oc-container.yml @@ -19,5 +19,6 @@ register: response failed_when: '("SRLinux" not in response.result[1].description) or ("srl" not in response.result[0])' - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/get-wrong-path.yml b/tests/playbooks/get-wrong-path.yml index 2b0a88e..9001fd7 100644 --- a/tests/playbooks/get-wrong-path.yml +++ b/tests/playbooks/get-wrong-path.yml @@ -15,5 +15,6 @@ register: response failed_when: (not response.failed) or ("Path not valid" not in response.msg) - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/golden/clab-ansible-srl-golden.cfg.json.j2 b/tests/playbooks/golden/clab-ansible-srl-golden.cfg.json.j2 index b985ba7..d8d4e31 100644 --- a/tests/playbooks/golden/clab-ansible-srl-golden.cfg.json.j2 +++ b/tests/playbooks/golden/clab-ansible-srl-golden.cfg.json.j2 @@ -1587,12 +1587,12 @@ "srl_nokia-interfaces:interface": [ { "admin-state": "enable", - "description": "ethernet-1/1 interface on {{inventory_hostname}}", + "description": "ethernet-1/1 interface on {{ inventory_hostname }}", "name": "ethernet-1/1" }, { "admin-state": "enable", - "description": "{{inventory_hostname}} management interface", + "description": "{{ inventory_hostname }} management interface", "name": "mgmt0", "subinterface": [ { diff --git a/tests/playbooks/golden/clab-ansible-srl.cfg.yml b/tests/playbooks/golden/clab-ansible-srl.cfg.yml index af7ea6b..c75866e 100644 --- a/tests/playbooks/golden/clab-ansible-srl.cfg.yml +++ b/tests/playbooks/golden/clab-ansible-srl.cfg.yml @@ -1,1176 +1,1204 @@ srl_nokia-acl:acl: acl-filter: - - entry: - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMP unreachable messages - match: - ipv4: - icmp: - type: dest-unreachable - protocol: icmp - sequence-id: 10 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMP time-exceeded messages - match: - ipv4: - icmp: - type: time-exceeded - protocol: icmp - sequence-id: 20 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMP echo messages - match: - ipv4: - icmp: - type: echo - protocol: icmp - sequence-id: 40 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMP echo-reply messages - match: - ipv4: - icmp: - type: echo-reply - protocol: icmp - sequence-id: 50 - - action: - accept: {} - description: Accept incoming SSH when the other host initiates the TCP - connection - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 22 - sequence-id: 60 - - action: - accept: {} - description: Accept incoming SSH when this router initiates the TCP connection - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 22 - sequence-id: 70 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming Telnet when the - other host initiates the TCP connection' - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 23 - sequence-id: 88 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming Telnet when this - router initiates the TCP connection' - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 23 - sequence-id: 98 - - action: - accept: {} - description: Accept incoming TACACS+ when the other host initiates the - TCP connection - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 49 - sequence-id: 100 - - action: - accept: {} - description: Accept incoming TACACS+ when this router initiates the TCP - connection - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 49 - sequence-id: 110 - - action: - accept: {} - description: Accept incoming DNS response messages - match: - ipv4: - protocol: udp - transport: - source-port: - operator: eq - value: 53 - sequence-id: 120 - - action: - accept: {} - description: Accept incoming DHCP messages targeted for BOOTP/DHCP client - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 68 - sequence-id: 130 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming HTTP(JSON-RPC) - when the other host initiates the TCP connection' - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 80 - sequence-id: 158 - - action: - accept: {} - description: Accept incoming HTTP(JSON-RPC) when this router initiates - the TCP connection - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 80 - sequence-id: 160 - - action: - accept: {} - description: Accept incoming NTP messages from servers - match: - ipv4: - protocol: udp - transport: - source-port: - operator: eq - value: 123 - sequence-id: 170 - - action: - accept: {} - description: Accept incoming SNMP GET/GETNEXT messages from servers - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 161 - sequence-id: 180 - - action: - accept: {} - description: Accept incoming BGP when the other router initiates the TCP - connection - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 179 - sequence-id: 190 - - action: - accept: {} - description: Accept incoming BGP when this router initiates the TCP connection - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 179 - sequence-id: 200 - - action: - accept: {} - description: Accept incoming HTTPS(JSON-RPC) when the other host initiates - the TCP connection - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 443 - sequence-id: 210 - - action: - accept: {} - description: Accept incoming HTTPS(JSON-RPC) when this router initiates - the TCP connection - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 443 - sequence-id: 220 - - action: - accept: {} - description: Accept incoming single-hop BFD session messages - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 3784 - sequence-id: 230 - - action: - accept: {} - description: Accept incoming multi-hop BFD session messages - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 4784 - sequence-id: 240 - - action: - accept: {} - description: Accept incoming uBFD session messages - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 6784 - sequence-id: 250 - - action: - accept: {} - description: Accept incoming gRPC messages when the other host initiates - the TCP connection - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 57400 - sequence-id: 260 - - action: - accept: {} - description: Accept incoming UDP traceroute messages - match: - ipv4: - protocol: udp - transport: - destination-port: - range: - end: 33464 - start: 33434 - sequence-id: 270 - - action: - accept: {} - description: Accept incoming OSPF messages - match: - ipv4: - protocol: 89 - sequence-id: 290 - - action: - accept: {} - description: Accept incoming DHCP relay messages targeted for BOOTP/DHCP - server - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 67 - sequence-id: 300 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept ICMP fragment packets - match: - ipv4: - fragment: true - protocol: icmp - sequence-id: 310 - - action: - accept: {} - description: Accept incoming LDP packets - match: - ipv4: - protocol: udp - transport: - source-port: - operator: eq - value: 646 - sequence-id: 320 - - action: - accept: {} - description: Accept incoming LDP packets with source-port 646 - match: - ipv4: - protocol: tcp - transport: - source-port: - operator: eq - value: 646 - sequence-id: 330 - - action: - accept: {} - description: Accept incoming LDP packets with destination-port 646 - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 646 - sequence-id: 340 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming gRPC over port - 57401 for the insecure-mgmt gRPC server' - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 57401 - sequence-id: 358 - - action: - accept: {} - description: Accept incoming IGMP packets - match: - ipv4: - protocol: igmp - sequence-id: 370 - - action: - accept: {} - description: Accept incoming PIM packets - match: - ipv4: - protocol: pim - sequence-id: 380 - - action: - accept: {} - description: Accept incoming RADIUS AAA packets - match: - ipv4: - protocol: udp - transport: - source-port: - range: - end: 1813 - start: 1812 - sequence-id: 390 - - action: - accept: {} - description: Accept incoming PTP messages with destination-ports 319 and - 320 - match: - ipv4: - protocol: udp - transport: - destination-port: - range: - end: 320 - start: 319 - sequence-id: 410 - - action: - accept: {} - description: Accept incoming PCEP packets with destination-port 4189 - match: - ipv4: - protocol: tcp - transport: - destination-port: - operator: eq - value: 4189 - sequence-id: 420 - - action: - accept: {} - description: Accept incoming SBFD session messages - match: - ipv4: - protocol: udp - transport: - source-port: - operator: eq - value: 7784 - sequence-id: 430 - - action: - accept: {} - description: Accept incoming SBFD session messages - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 7784 - sequence-id: 440 - - action: - accept: {} - description: Accept incoming LSP MPLS Echo requests and replies - match: - ipv4: - protocol: udp - transport: - source-port: - operator: eq - value: 3503 - sequence-id: 450 - - action: - accept: {} - description: Accept incoming LSP MPLS Echo requests and replies - match: - ipv4: - protocol: udp - transport: - destination-port: - operator: eq - value: 3503 - sequence-id: 460 - - action: - drop: {} - log: true - description: Drop all else - sequence-id: 1000 - name: cpm - statistics-per-entry: true - type: ipv4 - - entry: - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 unreachable messages - match: - ipv6: - icmp6: - type: dest-unreachable - next-header: icmp6 - sequence-id: 10 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 packet-too-big messages - match: - ipv6: - icmp6: - type: packet-too-big - next-header: icmp6 - sequence-id: 20 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 time-exceeded messages - match: - ipv6: - icmp6: - type: time-exceeded - next-header: icmp6 - sequence-id: 30 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 echo-request messages - match: - ipv6: - icmp6: - type: echo-request - next-header: icmp6 - sequence-id: 50 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 echo-reply messages - match: - ipv6: - icmp6: - type: echo-reply - next-header: icmp6 - sequence-id: 60 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 router-advertisement messages - match: - ipv6: - icmp6: - type: router-advertise - next-header: icmp6 - sequence-id: 70 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 neighbor-solicitation messages - match: - ipv6: - icmp6: - type: neighbor-solicit - next-header: icmp6 - sequence-id: 80 - - action: - accept: - rate-limit: - system-cpu-policer: icmp - description: Accept incoming ICMPv6 neighbor-advertisement messages - match: - ipv6: - icmp6: - type: neighbor-advertise - next-header: icmp6 - sequence-id: 90 - - action: - accept: {} - description: Accept incoming SSH when the other host initiates the TCP - connection - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 22 - sequence-id: 100 - - action: - accept: {} - description: Accept incoming SSH when this router initiates the TCP connection - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 22 - sequence-id: 110 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming Telnet when the - other host initiates the TCP connection' - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 23 - sequence-id: 128 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming Telnet when this - router initiates the TCP connection' - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 23 - sequence-id: 138 - - action: - accept: {} - description: Accept incoming TACACS+ when the other host initiates the - TCP connection - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 49 - sequence-id: 140 - - action: - accept: {} - description: Accept incoming TACACS+ when this router initiates the TCP - connection - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 49 - sequence-id: 150 - - action: - accept: {} - description: Accept incoming DNS response messages - match: - ipv6: - next-header: udp - transport: - source-port: - operator: eq - value: 53 - sequence-id: 160 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming HTTP(JSON-RPC) - when the other host initiates the TCP connection' - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 80 - sequence-id: 188 - - action: - accept: {} - description: Accept incoming HTTP(JSON-RPC) when this router initiates - the TCP connection - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 80 - sequence-id: 190 - - action: - accept: {} - description: Accept incoming NTP messages from servers - match: - ipv6: - next-header: udp - transport: - source-port: - operator: eq - value: 123 - sequence-id: 200 - - action: - accept: {} - description: Accept incoming SNMP GET/GETNEXT messages from servers - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 161 - sequence-id: 210 - - action: - accept: {} - description: Accept incoming BGP when the other router initiates the TCP - connection - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 179 - sequence-id: 220 - - action: - accept: {} - description: Accept incoming BGP when this router initiates the TCP connection - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 179 - sequence-id: 230 - - action: - accept: {} - description: Accept incoming HTTPS(JSON-RPC) when the other host initiates - the TCP connection - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 443 - sequence-id: 240 - - action: - accept: {} - description: Accept incoming HTTPS(JSON-RPC) when this router initiates - the TCP connection - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 443 - sequence-id: 250 - - action: - accept: {} - description: Accept incoming DHCPv6 client messages - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 546 - sequence-id: 260 - - action: - accept: {} - description: Accept incoming single-hop BFD session messages - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 3784 - sequence-id: 270 - - action: - accept: {} - description: Accept incoming multi-hop BFD session messages - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 4784 - sequence-id: 280 - - action: - accept: {} - description: Accept incoming uBFD session messages - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 6784 - sequence-id: 290 - - action: - accept: {} - description: Accept incoming gRPC messages when the other host initiates - the TCP connection - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 57400 - sequence-id: 300 - - action: - accept: {} - description: Accept incoming UDP traceroute messages - match: - ipv6: - next-header: udp - transport: - destination-port: - range: - end: 33464 - start: 33434 - sequence-id: 310 - - action: - accept: {} - description: Accept incoming IPV6 hop-in-hop messages - match: - ipv6: - next-header: 0 - sequence-id: 320 - - action: - accept: {} - description: Accept incoming OSPF messages - match: - ipv6: - next-header: 89 - sequence-id: 340 - - action: - accept: {} - description: Accept incoming DHCPv6 relay messages - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 547 - sequence-id: 350 - - action: - accept: {} - description: 'Containerlab-added rule: Accept incoming gRPC over port - 57401 for the insecure-mgmt gRPC server' - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 57401 - sequence-id: 368 - - action: - accept: {} - description: Accept incoming MLDv1 report messages - match: - ipv6: - icmp6: - type: mld-report - next-header: icmp6 - sequence-id: 380 - - action: - accept: {} - description: Accept incoming MLDv2 report messages - match: - ipv6: - icmp6: - type: mld-v2 - next-header: icmp6 - sequence-id: 390 - - action: - accept: {} - description: Accept incoming MLDv1 done messages - match: - ipv6: - icmp6: - type: mld-done - next-header: icmp6 - sequence-id: 400 - - action: - accept: {} - description: Accept incoming MLD query messages - match: - ipv6: - icmp6: - type: mld-query - next-header: icmp6 - sequence-id: 410 - - action: - accept: {} - description: Accept incoming PIM messages - match: - ipv6: - next-header: pim - sequence-id: 420 - - action: - accept: {} - description: Accept incoming RADIUS AAA messages - match: - ipv6: - next-header: udp - transport: - source-port: - range: - end: 1813 - start: 1812 - sequence-id: 430 - - action: - accept: {} - description: Accept incoming PTP messages with destination-ports 319 and - 320 - match: - ipv6: - next-header: udp - transport: - destination-port: - range: - end: 320 - start: 319 - sequence-id: 450 - - action: - accept: {} - description: Accept incoming PCEP packets with destination-port 4189 - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 4189 - sequence-id: 460 - - action: - accept: {} - description: Accept incoming SBFD session messages - match: - ipv6: - next-header: udp - transport: - source-port: - operator: eq - value: 7784 - sequence-id: 470 - - action: - accept: {} - description: Accept incoming SBFD session messages - match: - ipv6: - next-header: udp - transport: - destination-port: - operator: eq - value: 7784 - sequence-id: 480 - - action: - accept: {} - description: Accept incoming LDP packets - match: - ipv6: - next-header: udp - transport: - source-port: - operator: eq - value: 646 - sequence-id: 490 - - action: - accept: {} - description: Accept incoming LDP packets with source-port 646 - match: - ipv6: - next-header: tcp - transport: - source-port: - operator: eq - value: 646 - sequence-id: 500 - - action: - accept: {} - description: Accept incoming LDP packets with destination-port 646 - match: - ipv6: - next-header: tcp - transport: - destination-port: - operator: eq - value: 646 - sequence-id: 510 - - action: - drop: {} - log: true - description: Drop all else - sequence-id: 1000 - name: cpm - statistics-per-entry: true - type: ipv6 + - entry: + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMP unreachable messages + match: + ipv4: + icmp: + type: dest-unreachable + protocol: icmp + sequence-id: 10 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMP time-exceeded messages + match: + ipv4: + icmp: + type: time-exceeded + protocol: icmp + sequence-id: 20 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMP echo messages + match: + ipv4: + icmp: + type: echo + protocol: icmp + sequence-id: 40 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMP echo-reply messages + match: + ipv4: + icmp: + type: echo-reply + protocol: icmp + sequence-id: 50 + - action: + accept: {} + description: + Accept incoming SSH when the other host initiates the TCP + connection + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 22 + sequence-id: 60 + - action: + accept: {} + description: Accept incoming SSH when this router initiates the TCP connection + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 22 + sequence-id: 70 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming Telnet when the + other host initiates the TCP connection" + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 23 + sequence-id: 88 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming Telnet when this + router initiates the TCP connection" + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 23 + sequence-id: 98 + - action: + accept: {} + description: + Accept incoming TACACS+ when the other host initiates the + TCP connection + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 49 + sequence-id: 100 + - action: + accept: {} + description: + Accept incoming TACACS+ when this router initiates the TCP + connection + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 49 + sequence-id: 110 + - action: + accept: {} + description: Accept incoming DNS response messages + match: + ipv4: + protocol: udp + transport: + source-port: + operator: eq + value: 53 + sequence-id: 120 + - action: + accept: {} + description: Accept incoming DHCP messages targeted for BOOTP/DHCP client + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 68 + sequence-id: 130 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming HTTP(JSON-RPC) + when the other host initiates the TCP connection" + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 80 + sequence-id: 158 + - action: + accept: {} + description: + Accept incoming HTTP(JSON-RPC) when this router initiates + the TCP connection + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 80 + sequence-id: 160 + - action: + accept: {} + description: Accept incoming NTP messages from servers + match: + ipv4: + protocol: udp + transport: + source-port: + operator: eq + value: 123 + sequence-id: 170 + - action: + accept: {} + description: Accept incoming SNMP GET/GETNEXT messages from servers + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 161 + sequence-id: 180 + - action: + accept: {} + description: + Accept incoming BGP when the other router initiates the TCP + connection + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 179 + sequence-id: 190 + - action: + accept: {} + description: Accept incoming BGP when this router initiates the TCP connection + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 179 + sequence-id: 200 + - action: + accept: {} + description: + Accept incoming HTTPS(JSON-RPC) when the other host initiates + the TCP connection + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 443 + sequence-id: 210 + - action: + accept: {} + description: + Accept incoming HTTPS(JSON-RPC) when this router initiates + the TCP connection + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 443 + sequence-id: 220 + - action: + accept: {} + description: Accept incoming single-hop BFD session messages + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 3784 + sequence-id: 230 + - action: + accept: {} + description: Accept incoming multi-hop BFD session messages + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 4784 + sequence-id: 240 + - action: + accept: {} + description: Accept incoming uBFD session messages + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 6784 + sequence-id: 250 + - action: + accept: {} + description: + Accept incoming gRPC messages when the other host initiates + the TCP connection + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 57400 + sequence-id: 260 + - action: + accept: {} + description: Accept incoming UDP traceroute messages + match: + ipv4: + protocol: udp + transport: + destination-port: + range: + end: 33464 + start: 33434 + sequence-id: 270 + - action: + accept: {} + description: Accept incoming OSPF messages + match: + ipv4: + protocol: 89 + sequence-id: 290 + - action: + accept: {} + description: + Accept incoming DHCP relay messages targeted for BOOTP/DHCP + server + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 67 + sequence-id: 300 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept ICMP fragment packets + match: + ipv4: + fragment: true + protocol: icmp + sequence-id: 310 + - action: + accept: {} + description: Accept incoming LDP packets + match: + ipv4: + protocol: udp + transport: + source-port: + operator: eq + value: 646 + sequence-id: 320 + - action: + accept: {} + description: Accept incoming LDP packets with source-port 646 + match: + ipv4: + protocol: tcp + transport: + source-port: + operator: eq + value: 646 + sequence-id: 330 + - action: + accept: {} + description: Accept incoming LDP packets with destination-port 646 + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 646 + sequence-id: 340 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming gRPC over port + 57401 for the insecure-mgmt gRPC server" + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 57401 + sequence-id: 358 + - action: + accept: {} + description: Accept incoming IGMP packets + match: + ipv4: + protocol: igmp + sequence-id: 370 + - action: + accept: {} + description: Accept incoming PIM packets + match: + ipv4: + protocol: pim + sequence-id: 380 + - action: + accept: {} + description: Accept incoming RADIUS AAA packets + match: + ipv4: + protocol: udp + transport: + source-port: + range: + end: 1813 + start: 1812 + sequence-id: 390 + - action: + accept: {} + description: + Accept incoming PTP messages with destination-ports 319 and + 320 + match: + ipv4: + protocol: udp + transport: + destination-port: + range: + end: 320 + start: 319 + sequence-id: 410 + - action: + accept: {} + description: Accept incoming PCEP packets with destination-port 4189 + match: + ipv4: + protocol: tcp + transport: + destination-port: + operator: eq + value: 4189 + sequence-id: 420 + - action: + accept: {} + description: Accept incoming SBFD session messages + match: + ipv4: + protocol: udp + transport: + source-port: + operator: eq + value: 7784 + sequence-id: 430 + - action: + accept: {} + description: Accept incoming SBFD session messages + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 7784 + sequence-id: 440 + - action: + accept: {} + description: Accept incoming LSP MPLS Echo requests and replies + match: + ipv4: + protocol: udp + transport: + source-port: + operator: eq + value: 3503 + sequence-id: 450 + - action: + accept: {} + description: Accept incoming LSP MPLS Echo requests and replies + match: + ipv4: + protocol: udp + transport: + destination-port: + operator: eq + value: 3503 + sequence-id: 460 + - action: + drop: {} + log: true + description: Drop all else + sequence-id: 1000 + name: cpm + statistics-per-entry: true + type: ipv4 + - entry: + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 unreachable messages + match: + ipv6: + icmp6: + type: dest-unreachable + next-header: icmp6 + sequence-id: 10 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 packet-too-big messages + match: + ipv6: + icmp6: + type: packet-too-big + next-header: icmp6 + sequence-id: 20 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 time-exceeded messages + match: + ipv6: + icmp6: + type: time-exceeded + next-header: icmp6 + sequence-id: 30 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 echo-request messages + match: + ipv6: + icmp6: + type: echo-request + next-header: icmp6 + sequence-id: 50 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 echo-reply messages + match: + ipv6: + icmp6: + type: echo-reply + next-header: icmp6 + sequence-id: 60 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 router-advertisement messages + match: + ipv6: + icmp6: + type: router-advertise + next-header: icmp6 + sequence-id: 70 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 neighbor-solicitation messages + match: + ipv6: + icmp6: + type: neighbor-solicit + next-header: icmp6 + sequence-id: 80 + - action: + accept: + rate-limit: + system-cpu-policer: icmp + description: Accept incoming ICMPv6 neighbor-advertisement messages + match: + ipv6: + icmp6: + type: neighbor-advertise + next-header: icmp6 + sequence-id: 90 + - action: + accept: {} + description: + Accept incoming SSH when the other host initiates the TCP + connection + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 22 + sequence-id: 100 + - action: + accept: {} + description: Accept incoming SSH when this router initiates the TCP connection + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 22 + sequence-id: 110 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming Telnet when the + other host initiates the TCP connection" + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 23 + sequence-id: 128 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming Telnet when this + router initiates the TCP connection" + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 23 + sequence-id: 138 + - action: + accept: {} + description: + Accept incoming TACACS+ when the other host initiates the + TCP connection + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 49 + sequence-id: 140 + - action: + accept: {} + description: + Accept incoming TACACS+ when this router initiates the TCP + connection + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 49 + sequence-id: 150 + - action: + accept: {} + description: Accept incoming DNS response messages + match: + ipv6: + next-header: udp + transport: + source-port: + operator: eq + value: 53 + sequence-id: 160 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming HTTP(JSON-RPC) + when the other host initiates the TCP connection" + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 80 + sequence-id: 188 + - action: + accept: {} + description: + Accept incoming HTTP(JSON-RPC) when this router initiates + the TCP connection + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 80 + sequence-id: 190 + - action: + accept: {} + description: Accept incoming NTP messages from servers + match: + ipv6: + next-header: udp + transport: + source-port: + operator: eq + value: 123 + sequence-id: 200 + - action: + accept: {} + description: Accept incoming SNMP GET/GETNEXT messages from servers + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 161 + sequence-id: 210 + - action: + accept: {} + description: + Accept incoming BGP when the other router initiates the TCP + connection + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 179 + sequence-id: 220 + - action: + accept: {} + description: Accept incoming BGP when this router initiates the TCP connection + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 179 + sequence-id: 230 + - action: + accept: {} + description: + Accept incoming HTTPS(JSON-RPC) when the other host initiates + the TCP connection + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 443 + sequence-id: 240 + - action: + accept: {} + description: + Accept incoming HTTPS(JSON-RPC) when this router initiates + the TCP connection + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 443 + sequence-id: 250 + - action: + accept: {} + description: Accept incoming DHCPv6 client messages + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 546 + sequence-id: 260 + - action: + accept: {} + description: Accept incoming single-hop BFD session messages + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 3784 + sequence-id: 270 + - action: + accept: {} + description: Accept incoming multi-hop BFD session messages + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 4784 + sequence-id: 280 + - action: + accept: {} + description: Accept incoming uBFD session messages + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 6784 + sequence-id: 290 + - action: + accept: {} + description: + Accept incoming gRPC messages when the other host initiates + the TCP connection + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 57400 + sequence-id: 300 + - action: + accept: {} + description: Accept incoming UDP traceroute messages + match: + ipv6: + next-header: udp + transport: + destination-port: + range: + end: 33464 + start: 33434 + sequence-id: 310 + - action: + accept: {} + description: Accept incoming IPV6 hop-in-hop messages + match: + ipv6: + next-header: 0 + sequence-id: 320 + - action: + accept: {} + description: Accept incoming OSPF messages + match: + ipv6: + next-header: 89 + sequence-id: 340 + - action: + accept: {} + description: Accept incoming DHCPv6 relay messages + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 547 + sequence-id: 350 + - action: + accept: {} + description: + "Containerlab-added rule: Accept incoming gRPC over port + 57401 for the insecure-mgmt gRPC server" + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 57401 + sequence-id: 368 + - action: + accept: {} + description: Accept incoming MLDv1 report messages + match: + ipv6: + icmp6: + type: mld-report + next-header: icmp6 + sequence-id: 380 + - action: + accept: {} + description: Accept incoming MLDv2 report messages + match: + ipv6: + icmp6: + type: mld-v2 + next-header: icmp6 + sequence-id: 390 + - action: + accept: {} + description: Accept incoming MLDv1 done messages + match: + ipv6: + icmp6: + type: mld-done + next-header: icmp6 + sequence-id: 400 + - action: + accept: {} + description: Accept incoming MLD query messages + match: + ipv6: + icmp6: + type: mld-query + next-header: icmp6 + sequence-id: 410 + - action: + accept: {} + description: Accept incoming PIM messages + match: + ipv6: + next-header: pim + sequence-id: 420 + - action: + accept: {} + description: Accept incoming RADIUS AAA messages + match: + ipv6: + next-header: udp + transport: + source-port: + range: + end: 1813 + start: 1812 + sequence-id: 430 + - action: + accept: {} + description: + Accept incoming PTP messages with destination-ports 319 and + 320 + match: + ipv6: + next-header: udp + transport: + destination-port: + range: + end: 320 + start: 319 + sequence-id: 450 + - action: + accept: {} + description: Accept incoming PCEP packets with destination-port 4189 + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 4189 + sequence-id: 460 + - action: + accept: {} + description: Accept incoming SBFD session messages + match: + ipv6: + next-header: udp + transport: + source-port: + operator: eq + value: 7784 + sequence-id: 470 + - action: + accept: {} + description: Accept incoming SBFD session messages + match: + ipv6: + next-header: udp + transport: + destination-port: + operator: eq + value: 7784 + sequence-id: 480 + - action: + accept: {} + description: Accept incoming LDP packets + match: + ipv6: + next-header: udp + transport: + source-port: + operator: eq + value: 646 + sequence-id: 490 + - action: + accept: {} + description: Accept incoming LDP packets with source-port 646 + match: + ipv6: + next-header: tcp + transport: + source-port: + operator: eq + value: 646 + sequence-id: 500 + - action: + accept: {} + description: Accept incoming LDP packets with destination-port 646 + match: + ipv6: + next-header: tcp + transport: + destination-port: + operator: eq + value: 646 + sequence-id: 510 + - action: + drop: {} + log: true + description: Drop all else + sequence-id: 1000 + name: cpm + statistics-per-entry: true + type: ipv6 policers: system-cpu-policer: - - entry-specific: false - max-packet-burst: 1000 - name: icmp - peak-packet-rate: 1000 + - entry-specific: false + max-packet-burst: 1000 + name: icmp + peak-packet-rate: 1000 srl_nokia-interfaces:interface: -- admin-state: enable - name: mgmt0 - subinterface: - - admin-state: enable - index: 0 - ip-mtu: 1500 - ipv4: - admin-state: enable - srl_nokia-interfaces-ip-dhcp:dhcp-client: {} - ipv6: - admin-state: enable - srl_nokia-interfaces-ip-dhcp:dhcp-client: {} + - admin-state: enable + name: mgmt0 + subinterface: + - admin-state: enable + index: 0 + ip-mtu: 1500 + ipv4: + admin-state: enable + srl_nokia-interfaces-ip-dhcp:dhcp-client: {} + ipv6: + admin-state: enable + srl_nokia-interfaces-ip-dhcp:dhcp-client: {} srl_nokia-network-instance:network-instance: -- admin-state: enable - description: Management network instance - interface: - - name: mgmt0.0 - name: mgmt - protocols: - srl_nokia-linux:linux: - export-neighbors: true - export-routes: true - import-routes: true - type: srl_nokia-network-instance:ip-vrf + - admin-state: enable + description: Management network instance + interface: + - name: mgmt0.0 + name: mgmt + protocols: + srl_nokia-linux:linux: + export-neighbors: true + export-routes: true + import-routes: true + type: srl_nokia-network-instance:ip-vrf srl_nokia-system:system: control-plane-traffic: input: srl_nokia-acl:acl: acl-filter: - - name: cpm - type: ipv4 - - name: cpm - type: ipv6 + - name: cpm + type: ipv4 + - name: cpm + type: ipv6 srl_nokia-aaa:aaa: authentication: admin-user: ssh-key: - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBJRPA9kC25PYrFE8+DPAvxlzj7KNAloyKPsBEHjmLFgRbkjhK3F3kNHTd/afnPx5nC5R9g7mIPXjsHnzcR9n7OxegyqEQvwGJYOC5n94UfC/Htod5FhB4FcMAR1iuJWQCmGrg+Evs4LEBdST81PKIOORsFquZ84P5i/ZifjbKE+m+3tJLu484slMZqHANNUlfmTT1MkRDeXlv6eif9YWzP3w1M4l6+WOhowfyKU5N1scEf2gPIa5uqdzL3YTWWVid/EjTx4WNLO4w8FRRxxabcqAZ6rmw5CEHfQyXfqCW+v5d3thkylYpHMGohf7BifF0oDiJkaQUgO6vQBOpSbkLZ/ZCth4RqDEmZPO8DH25Hr+rkYZleWQoNL5JpHAMlNMHAOk+b2icBT+qw0+1zpzHuQow+48BkCLwQNyZmkqJB4SABzx5JWC8nLMczvpJqkWhG/Nzp5PdoDrsqxTNt9oaTUWdBDgFCTDduisyqvtzn6UOJJn6+hKqdxMyT1bcezd9s4AiJTTBzpLy560QrANyEIX+nt2yR8fJhfg+R4RsXw0hVlYh31a9oG2+NwCwBaTrCML97m/lVFsoSb4uJ1rwqUKbdzCV3EB2xINkkKXwafYh5lHMjo7TPcgo0VQIe2lSWLiHF4h3HTD/HIP0NqxIm+Pk5pVE99gC+IUUXlmhJQ== - - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILKdXYzPIq8kHRJtDrh21wMVI76AnuPk7HDLeDteKN74 - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtxsljGhy2DWg9/VwyRwsz2xEfscEuXOgd+z9aXLBXjEEPedzVAs84fAo981ap4xVmbB7gZOPwDM0jWWrGhv94WbWG5ZA7RjoAdp7EscCtv68r2gudagfxvaRHFQntgZt0c5tJztleXYLjaSvH5Nk/TDnVmOKiVKz/DZLuUx80YTb0udtz4qmFxSLswVbCr5YDtkdfaZ2fef3uEq21siVe+KNwL3gurBSUMKiWAPcQiSlBFXOjt0dLT3juy3D7ck3RaLirq07xeJvrJwDghEpvSpZnPZf7v8UmyIyv90edjC/0YogJV962IMzoT8s8+179glEKQBNHHRPm0KdX1BKjOpAFhx3zcTK6cxbG5Zbjcq0Vw86SjsiO4gz8QkBda6o/AtvqdQ8KOg+IpfVJ/j9/zyIeU1Ep9oWXzmx8i2s+rSTkNTdvi1lTKGpTCD2jFa5uxisR5dVoeKxMsJNaS7NxjIo0ZARriwGMnh+s8mA3ZZVYqnKJsGMUs02I0aSd0QU= - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDLTxDZjy70GF3lZIePu/yz0lqaglkIYm2actUb4/Fq43z1VkSsdUKknCZuMnnAuHoAI3nMs8bmm5Ba9Kc9mqfZg8A6LYUYjUbRyv1qUgfok80G4k6JqUdly9E6CiI301ysxbqzYMyX0uWz3K/mY3kClNJJVuNXw+pDu9Obm8g2BDBVH9ecQ+IVtrt8s2rwoBzb2uSCLdqpTGQvo3RF5Ds4x7uSYyMNPvyQfewUnF60PPe/BlPL1DGFXX9xYxIMnbAuQ/KnpdyB216AnOd1xakY0l7n7iw6CNbbusN0WwnuyeWtO3sD7dNBaSd6ZtwU9Vaw0tZYbrvVc2ZIG6wLX+semg//DWwvcPxAZGSUyg3KjmTS0iWLCB93bif/tzrim/cZXfe2LPYAIXtWMEELzt+iUbKOMx9zrmjZ1gcaNLOTPY4XYTSwJslER5DScz1W9VtL7cKDe+2JVsrwSIb3MMq9XwIAFptApZBlhkjLLFBu0oBJ1z8JKD9mkJb3S2uH4icsGgZU7mY8n7xl3rSurSHuM8y5gAhy7fso0U/Rk7hsUjhElwTxMRtU+zjyV8G3pUyN4yx8uYEz3KPAO/aWrZqO0uoqj+F1Mb71Bn1wNUK5QnPaDEH1ByzTGIAIyJgs++i/KxiTwIskpR02ZrN87cw8ZzDSnL/fegF12UQhzN4o5Q== - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNEsOytypejPqd4csAycRShsJAtCKAy/PxXtTzcpoU7PTLaxTGiZUGhZ33pZ86/hzyA8/GksvHsYj3tumILe1HTdV2rKGkbRIYJ8sAEkmhKtEiC0PuXVCLS4zy7YMOIQAJ1edn0RUqvAe+rb/E50eucqzJeMriEuWUtrLZpRRaUCQOmqTkTpxHR3T+5TF+ia/ii4ZY3VwsChVrPHfoVNk3NGSb8hPsjuSE61kwYxI135hHK2ZI9iv/QKUUrR9xFaMGMCAPX+9C1EhclwkeB1t4EKwam6qQs15jnhBO7kEq9oCX7vjrmra5neQD7yxkM+I0aJTYRfmldlyf/pWpGXxPn55f1eLFH5uTKxCnEJepe5P1jm24vvTdij9DF256GVjEwBrZ0ro8Pg45PT4ZT/jkAkfC+SLpQutcDggvNbOOUOjCak/lBv5bAIQOe/sbfIW6NOdWSNm6HZShYZUAfik1oXu2VasCZHcyNpwGx3p3Cr7HSVInDpzC9WGzv+hOzJ8= - - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8N+eYfTO7cF0d7AAnDceARMG6ftHfomgJ4UZb2HuRe - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQComgPcG3DJaOI/Hj6SteEvwuIObe9qSLdecDHmAPLbhyvClEKN7i2AVc0UHCY10Lxxc0XsLuNPgHZYlWk1Ii9SFMHE/60MdlpP7TvcUdLBTuy0Byhx7i+0LO+vMTDJMWsil8Ivgc9xCT6iL5a/kEc3AR7FQwf3K/3jidyLpLFBy+Nliz060Y5j7X+u5sqPogdoa47qdSOJCzCD7DfThaxyPLcnNiGuco/5OoAujC/ZLCFgj2JnIrsf3ZAvl8yzrJfH3KtDK3klNlA5oc2+l92NOcTdasE7iTHZfZg3HXWvdKP5U63FsXNzisIeHkmjs4AtuTvTyCam2PEKwPuy1X+ogTBTKTSAlud5rkDeoGBIyhbO6gZTQnqb8dyLpD4mz2Fyn/6k97YcZn3KVgS6OTEzHhOOhEd1OlFlRgNdREw3YqL4B2ooq/In0GJjhPHQg6L8cyyhL+oPm2noQUp8jw9Sp42EHDgG33dYPiwbQ2eq6Ql2PLCc0M8YXJdVtFhENV6zoPTtosxx4OEWtauoART931a000/qa51cvuJX7bSEvJGhGUh3sTSYGke3X0gQKMHtVh/5iDcb0IowW0J/e/UnITwP6FgTE2AhOsEXaoJiSd4BcUUDG1mHMuLKxRSFw63V7T0XTOHSousHS8QNKMJoNe1PcaArFCJ+gOZmY68Mzw== + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBJRPA9kC25PYrFE8+DPAvxlzj7KNAloyKPsBEHjmLFgRbkjhK3F3kNHTd/afnPx5nC5R9g7mIPXjsHnzcR9n7OxegyqEQvwGJYOC5n94UfC/Htod5FhB4FcMAR1iuJWQCmGrg+Evs4LEBdST81PKIOORsFquZ84P5i/ZifjbKE+m+3tJLu484slMZqHANNUlfmTT1MkRDeXlv6eif9YWzP3w1M4l6+WOhowfyKU5N1scEf2gPIa5uqdzL3YTWWVid/EjTx4WNLO4w8FRRxxabcqAZ6rmw5CEHfQyXfqCW+v5d3thkylYpHMGohf7BifF0oDiJkaQUgO6vQBOpSbkLZ/ZCth4RqDEmZPO8DH25Hr+rkYZleWQoNL5JpHAMlNMHAOk+b2icBT+qw0+1zpzHuQow+48BkCLwQNyZmkqJB4SABzx5JWC8nLMczvpJqkWhG/Nzp5PdoDrsqxTNt9oaTUWdBDgFCTDduisyqvtzn6UOJJn6+hKqdxMyT1bcezd9s4AiJTTBzpLy560QrANyEIX+nt2yR8fJhfg+R4RsXw0hVlYh31a9oG2+NwCwBaTrCML97m/lVFsoSb4uJ1rwqUKbdzCV3EB2xINkkKXwafYh5lHMjo7TPcgo0VQIe2lSWLiHF4h3HTD/HIP0NqxIm+Pk5pVE99gC+IUUXlmhJQ== + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILKdXYzPIq8kHRJtDrh21wMVI76AnuPk7HDLeDteKN74 + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtxsljGhy2DWg9/VwyRwsz2xEfscEuXOgd+z9aXLBXjEEPedzVAs84fAo981ap4xVmbB7gZOPwDM0jWWrGhv94WbWG5ZA7RjoAdp7EscCtv68r2gudagfxvaRHFQntgZt0c5tJztleXYLjaSvH5Nk/TDnVmOKiVKz/DZLuUx80YTb0udtz4qmFxSLswVbCr5YDtkdfaZ2fef3uEq21siVe+KNwL3gurBSUMKiWAPcQiSlBFXOjt0dLT3juy3D7ck3RaLirq07xeJvrJwDghEpvSpZnPZf7v8UmyIyv90edjC/0YogJV962IMzoT8s8+179glEKQBNHHRPm0KdX1BKjOpAFhx3zcTK6cxbG5Zbjcq0Vw86SjsiO4gz8QkBda6o/AtvqdQ8KOg+IpfVJ/j9/zyIeU1Ep9oWXzmx8i2s+rSTkNTdvi1lTKGpTCD2jFa5uxisR5dVoeKxMsJNaS7NxjIo0ZARriwGMnh+s8mA3ZZVYqnKJsGMUs02I0aSd0QU= + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDLTxDZjy70GF3lZIePu/yz0lqaglkIYm2actUb4/Fq43z1VkSsdUKknCZuMnnAuHoAI3nMs8bmm5Ba9Kc9mqfZg8A6LYUYjUbRyv1qUgfok80G4k6JqUdly9E6CiI301ysxbqzYMyX0uWz3K/mY3kClNJJVuNXw+pDu9Obm8g2BDBVH9ecQ+IVtrt8s2rwoBzb2uSCLdqpTGQvo3RF5Ds4x7uSYyMNPvyQfewUnF60PPe/BlPL1DGFXX9xYxIMnbAuQ/KnpdyB216AnOd1xakY0l7n7iw6CNbbusN0WwnuyeWtO3sD7dNBaSd6ZtwU9Vaw0tZYbrvVc2ZIG6wLX+semg//DWwvcPxAZGSUyg3KjmTS0iWLCB93bif/tzrim/cZXfe2LPYAIXtWMEELzt+iUbKOMx9zrmjZ1gcaNLOTPY4XYTSwJslER5DScz1W9VtL7cKDe+2JVsrwSIb3MMq9XwIAFptApZBlhkjLLFBu0oBJ1z8JKD9mkJb3S2uH4icsGgZU7mY8n7xl3rSurSHuM8y5gAhy7fso0U/Rk7hsUjhElwTxMRtU+zjyV8G3pUyN4yx8uYEz3KPAO/aWrZqO0uoqj+F1Mb71Bn1wNUK5QnPaDEH1ByzTGIAIyJgs++i/KxiTwIskpR02ZrN87cw8ZzDSnL/fegF12UQhzN4o5Q== + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNEsOytypejPqd4csAycRShsJAtCKAy/PxXtTzcpoU7PTLaxTGiZUGhZ33pZ86/hzyA8/GksvHsYj3tumILe1HTdV2rKGkbRIYJ8sAEkmhKtEiC0PuXVCLS4zy7YMOIQAJ1edn0RUqvAe+rb/E50eucqzJeMriEuWUtrLZpRRaUCQOmqTkTpxHR3T+5TF+ia/ii4ZY3VwsChVrPHfoVNk3NGSb8hPsjuSE61kwYxI135hHK2ZI9iv/QKUUrR9xFaMGMCAPX+9C1EhclwkeB1t4EKwam6qQs15jnhBO7kEq9oCX7vjrmra5neQD7yxkM+I0aJTYRfmldlyf/pWpGXxPn55f1eLFH5uTKxCnEJepe5P1jm24vvTdij9DF256GVjEwBrZ0ro8Pg45PT4ZT/jkAkfC+SLpQutcDggvNbOOUOjCak/lBv5bAIQOe/sbfIW6NOdWSNm6HZShYZUAfik1oXu2VasCZHcyNpwGx3p3Cr7HSVInDpzC9WGzv+hOzJ8= + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8N+eYfTO7cF0d7AAnDceARMG6ftHfomgJ4UZb2HuRe + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQComgPcG3DJaOI/Hj6SteEvwuIObe9qSLdecDHmAPLbhyvClEKN7i2AVc0UHCY10Lxxc0XsLuNPgHZYlWk1Ii9SFMHE/60MdlpP7TvcUdLBTuy0Byhx7i+0LO+vMTDJMWsil8Ivgc9xCT6iL5a/kEc3AR7FQwf3K/3jidyLpLFBy+Nliz060Y5j7X+u5sqPogdoa47qdSOJCzCD7DfThaxyPLcnNiGuco/5OoAujC/ZLCFgj2JnIrsf3ZAvl8yzrJfH3KtDK3klNlA5oc2+l92NOcTdasE7iTHZfZg3HXWvdKP5U63FsXNzisIeHkmjs4AtuTvTyCam2PEKwPuy1X+ogTBTKTSAlud5rkDeoGBIyhbO6gZTQnqb8dyLpD4mz2Fyn/6k97YcZn3KVgS6OTEzHhOOhEd1OlFlRgNdREw3YqL4B2ooq/In0GJjhPHQg6L8cyyhL+oPm2noQUp8jw9Sp42EHDgG33dYPiwbQ2eq6Ql2PLCc0M8YXJdVtFhENV6zoPTtosxx4OEWtauoART931a000/qa51cvuJX7bSEvJGhGUh3sTSYGke3X0gQKMHtVh/5iDcb0IowW0J/e/UnITwP6FgTE2AhOsEXaoJiSd4BcUUDG1mHMuLKxRSFw63V7T0XTOHSousHS8QNKMJoNe1PcaArFCJ+gOZmY68Mzw== authentication-method: - - local + - local idle-timeout: 7200 linuxadmin-user: password: $y$j9T$DbT6fPrCRIFoKCGhsL3pB0$Rb53YfyCdnjkUtguz8KWuI4ADfYM8WKI9XavXvzvS/C ssh-key: - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBJRPA9kC25PYrFE8+DPAvxlzj7KNAloyKPsBEHjmLFgRbkjhK3F3kNHTd/afnPx5nC5R9g7mIPXjsHnzcR9n7OxegyqEQvwGJYOC5n94UfC/Htod5FhB4FcMAR1iuJWQCmGrg+Evs4LEBdST81PKIOORsFquZ84P5i/ZifjbKE+m+3tJLu484slMZqHANNUlfmTT1MkRDeXlv6eif9YWzP3w1M4l6+WOhowfyKU5N1scEf2gPIa5uqdzL3YTWWVid/EjTx4WNLO4w8FRRxxabcqAZ6rmw5CEHfQyXfqCW+v5d3thkylYpHMGohf7BifF0oDiJkaQUgO6vQBOpSbkLZ/ZCth4RqDEmZPO8DH25Hr+rkYZleWQoNL5JpHAMlNMHAOk+b2icBT+qw0+1zpzHuQow+48BkCLwQNyZmkqJB4SABzx5JWC8nLMczvpJqkWhG/Nzp5PdoDrsqxTNt9oaTUWdBDgFCTDduisyqvtzn6UOJJn6+hKqdxMyT1bcezd9s4AiJTTBzpLy560QrANyEIX+nt2yR8fJhfg+R4RsXw0hVlYh31a9oG2+NwCwBaTrCML97m/lVFsoSb4uJ1rwqUKbdzCV3EB2xINkkKXwafYh5lHMjo7TPcgo0VQIe2lSWLiHF4h3HTD/HIP0NqxIm+Pk5pVE99gC+IUUXlmhJQ== - - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILKdXYzPIq8kHRJtDrh21wMVI76AnuPk7HDLeDteKN74 - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtxsljGhy2DWg9/VwyRwsz2xEfscEuXOgd+z9aXLBXjEEPedzVAs84fAo981ap4xVmbB7gZOPwDM0jWWrGhv94WbWG5ZA7RjoAdp7EscCtv68r2gudagfxvaRHFQntgZt0c5tJztleXYLjaSvH5Nk/TDnVmOKiVKz/DZLuUx80YTb0udtz4qmFxSLswVbCr5YDtkdfaZ2fef3uEq21siVe+KNwL3gurBSUMKiWAPcQiSlBFXOjt0dLT3juy3D7ck3RaLirq07xeJvrJwDghEpvSpZnPZf7v8UmyIyv90edjC/0YogJV962IMzoT8s8+179glEKQBNHHRPm0KdX1BKjOpAFhx3zcTK6cxbG5Zbjcq0Vw86SjsiO4gz8QkBda6o/AtvqdQ8KOg+IpfVJ/j9/zyIeU1Ep9oWXzmx8i2s+rSTkNTdvi1lTKGpTCD2jFa5uxisR5dVoeKxMsJNaS7NxjIo0ZARriwGMnh+s8mA3ZZVYqnKJsGMUs02I0aSd0QU= - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDLTxDZjy70GF3lZIePu/yz0lqaglkIYm2actUb4/Fq43z1VkSsdUKknCZuMnnAuHoAI3nMs8bmm5Ba9Kc9mqfZg8A6LYUYjUbRyv1qUgfok80G4k6JqUdly9E6CiI301ysxbqzYMyX0uWz3K/mY3kClNJJVuNXw+pDu9Obm8g2BDBVH9ecQ+IVtrt8s2rwoBzb2uSCLdqpTGQvo3RF5Ds4x7uSYyMNPvyQfewUnF60PPe/BlPL1DGFXX9xYxIMnbAuQ/KnpdyB216AnOd1xakY0l7n7iw6CNbbusN0WwnuyeWtO3sD7dNBaSd6ZtwU9Vaw0tZYbrvVc2ZIG6wLX+semg//DWwvcPxAZGSUyg3KjmTS0iWLCB93bif/tzrim/cZXfe2LPYAIXtWMEELzt+iUbKOMx9zrmjZ1gcaNLOTPY4XYTSwJslER5DScz1W9VtL7cKDe+2JVsrwSIb3MMq9XwIAFptApZBlhkjLLFBu0oBJ1z8JKD9mkJb3S2uH4icsGgZU7mY8n7xl3rSurSHuM8y5gAhy7fso0U/Rk7hsUjhElwTxMRtU+zjyV8G3pUyN4yx8uYEz3KPAO/aWrZqO0uoqj+F1Mb71Bn1wNUK5QnPaDEH1ByzTGIAIyJgs++i/KxiTwIskpR02ZrN87cw8ZzDSnL/fegF12UQhzN4o5Q== - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNEsOytypejPqd4csAycRShsJAtCKAy/PxXtTzcpoU7PTLaxTGiZUGhZ33pZ86/hzyA8/GksvHsYj3tumILe1HTdV2rKGkbRIYJ8sAEkmhKtEiC0PuXVCLS4zy7YMOIQAJ1edn0RUqvAe+rb/E50eucqzJeMriEuWUtrLZpRRaUCQOmqTkTpxHR3T+5TF+ia/ii4ZY3VwsChVrPHfoVNk3NGSb8hPsjuSE61kwYxI135hHK2ZI9iv/QKUUrR9xFaMGMCAPX+9C1EhclwkeB1t4EKwam6qQs15jnhBO7kEq9oCX7vjrmra5neQD7yxkM+I0aJTYRfmldlyf/pWpGXxPn55f1eLFH5uTKxCnEJepe5P1jm24vvTdij9DF256GVjEwBrZ0ro8Pg45PT4ZT/jkAkfC+SLpQutcDggvNbOOUOjCak/lBv5bAIQOe/sbfIW6NOdWSNm6HZShYZUAfik1oXu2VasCZHcyNpwGx3p3Cr7HSVInDpzC9WGzv+hOzJ8= - - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8N+eYfTO7cF0d7AAnDceARMG6ftHfomgJ4UZb2HuRe - - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQComgPcG3DJaOI/Hj6SteEvwuIObe9qSLdecDHmAPLbhyvClEKN7i2AVc0UHCY10Lxxc0XsLuNPgHZYlWk1Ii9SFMHE/60MdlpP7TvcUdLBTuy0Byhx7i+0LO+vMTDJMWsil8Ivgc9xCT6iL5a/kEc3AR7FQwf3K/3jidyLpLFBy+Nliz060Y5j7X+u5sqPogdoa47qdSOJCzCD7DfThaxyPLcnNiGuco/5OoAujC/ZLCFgj2JnIrsf3ZAvl8yzrJfH3KtDK3klNlA5oc2+l92NOcTdasE7iTHZfZg3HXWvdKP5U63FsXNzisIeHkmjs4AtuTvTyCam2PEKwPuy1X+ogTBTKTSAlud5rkDeoGBIyhbO6gZTQnqb8dyLpD4mz2Fyn/6k97YcZn3KVgS6OTEzHhOOhEd1OlFlRgNdREw3YqL4B2ooq/In0GJjhPHQg6L8cyyhL+oPm2noQUp8jw9Sp42EHDgG33dYPiwbQ2eq6Ql2PLCc0M8YXJdVtFhENV6zoPTtosxx4OEWtauoART931a000/qa51cvuJX7bSEvJGhGUh3sTSYGke3X0gQKMHtVh/5iDcb0IowW0J/e/UnITwP6FgTE2AhOsEXaoJiSd4BcUUDG1mHMuLKxRSFw63V7T0XTOHSousHS8QNKMJoNe1PcaArFCJ+gOZmY68Mzw== + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBJRPA9kC25PYrFE8+DPAvxlzj7KNAloyKPsBEHjmLFgRbkjhK3F3kNHTd/afnPx5nC5R9g7mIPXjsHnzcR9n7OxegyqEQvwGJYOC5n94UfC/Htod5FhB4FcMAR1iuJWQCmGrg+Evs4LEBdST81PKIOORsFquZ84P5i/ZifjbKE+m+3tJLu484slMZqHANNUlfmTT1MkRDeXlv6eif9YWzP3w1M4l6+WOhowfyKU5N1scEf2gPIa5uqdzL3YTWWVid/EjTx4WNLO4w8FRRxxabcqAZ6rmw5CEHfQyXfqCW+v5d3thkylYpHMGohf7BifF0oDiJkaQUgO6vQBOpSbkLZ/ZCth4RqDEmZPO8DH25Hr+rkYZleWQoNL5JpHAMlNMHAOk+b2icBT+qw0+1zpzHuQow+48BkCLwQNyZmkqJB4SABzx5JWC8nLMczvpJqkWhG/Nzp5PdoDrsqxTNt9oaTUWdBDgFCTDduisyqvtzn6UOJJn6+hKqdxMyT1bcezd9s4AiJTTBzpLy560QrANyEIX+nt2yR8fJhfg+R4RsXw0hVlYh31a9oG2+NwCwBaTrCML97m/lVFsoSb4uJ1rwqUKbdzCV3EB2xINkkKXwafYh5lHMjo7TPcgo0VQIe2lSWLiHF4h3HTD/HIP0NqxIm+Pk5pVE99gC+IUUXlmhJQ== + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAILKdXYzPIq8kHRJtDrh21wMVI76AnuPk7HDLeDteKN74 + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCtxsljGhy2DWg9/VwyRwsz2xEfscEuXOgd+z9aXLBXjEEPedzVAs84fAo981ap4xVmbB7gZOPwDM0jWWrGhv94WbWG5ZA7RjoAdp7EscCtv68r2gudagfxvaRHFQntgZt0c5tJztleXYLjaSvH5Nk/TDnVmOKiVKz/DZLuUx80YTb0udtz4qmFxSLswVbCr5YDtkdfaZ2fef3uEq21siVe+KNwL3gurBSUMKiWAPcQiSlBFXOjt0dLT3juy3D7ck3RaLirq07xeJvrJwDghEpvSpZnPZf7v8UmyIyv90edjC/0YogJV962IMzoT8s8+179glEKQBNHHRPm0KdX1BKjOpAFhx3zcTK6cxbG5Zbjcq0Vw86SjsiO4gz8QkBda6o/AtvqdQ8KOg+IpfVJ/j9/zyIeU1Ep9oWXzmx8i2s+rSTkNTdvi1lTKGpTCD2jFa5uxisR5dVoeKxMsJNaS7NxjIo0ZARriwGMnh+s8mA3ZZVYqnKJsGMUs02I0aSd0QU= + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDLTxDZjy70GF3lZIePu/yz0lqaglkIYm2actUb4/Fq43z1VkSsdUKknCZuMnnAuHoAI3nMs8bmm5Ba9Kc9mqfZg8A6LYUYjUbRyv1qUgfok80G4k6JqUdly9E6CiI301ysxbqzYMyX0uWz3K/mY3kClNJJVuNXw+pDu9Obm8g2BDBVH9ecQ+IVtrt8s2rwoBzb2uSCLdqpTGQvo3RF5Ds4x7uSYyMNPvyQfewUnF60PPe/BlPL1DGFXX9xYxIMnbAuQ/KnpdyB216AnOd1xakY0l7n7iw6CNbbusN0WwnuyeWtO3sD7dNBaSd6ZtwU9Vaw0tZYbrvVc2ZIG6wLX+semg//DWwvcPxAZGSUyg3KjmTS0iWLCB93bif/tzrim/cZXfe2LPYAIXtWMEELzt+iUbKOMx9zrmjZ1gcaNLOTPY4XYTSwJslER5DScz1W9VtL7cKDe+2JVsrwSIb3MMq9XwIAFptApZBlhkjLLFBu0oBJ1z8JKD9mkJb3S2uH4icsGgZU7mY8n7xl3rSurSHuM8y5gAhy7fso0U/Rk7hsUjhElwTxMRtU+zjyV8G3pUyN4yx8uYEz3KPAO/aWrZqO0uoqj+F1Mb71Bn1wNUK5QnPaDEH1ByzTGIAIyJgs++i/KxiTwIskpR02ZrN87cw8ZzDSnL/fegF12UQhzN4o5Q== + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDNEsOytypejPqd4csAycRShsJAtCKAy/PxXtTzcpoU7PTLaxTGiZUGhZ33pZ86/hzyA8/GksvHsYj3tumILe1HTdV2rKGkbRIYJ8sAEkmhKtEiC0PuXVCLS4zy7YMOIQAJ1edn0RUqvAe+rb/E50eucqzJeMriEuWUtrLZpRRaUCQOmqTkTpxHR3T+5TF+ia/ii4ZY3VwsChVrPHfoVNk3NGSb8hPsjuSE61kwYxI135hHK2ZI9iv/QKUUrR9xFaMGMCAPX+9C1EhclwkeB1t4EKwam6qQs15jnhBO7kEq9oCX7vjrmra5neQD7yxkM+I0aJTYRfmldlyf/pWpGXxPn55f1eLFH5uTKxCnEJepe5P1jm24vvTdij9DF256GVjEwBrZ0ro8Pg45PT4ZT/jkAkfC+SLpQutcDggvNbOOUOjCak/lBv5bAIQOe/sbfIW6NOdWSNm6HZShYZUAfik1oXu2VasCZHcyNpwGx3p3Cr7HSVInDpzC9WGzv+hOzJ8= + - ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIK8N+eYfTO7cF0d7AAnDceARMG6ftHfomgJ4UZb2HuRe + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQComgPcG3DJaOI/Hj6SteEvwuIObe9qSLdecDHmAPLbhyvClEKN7i2AVc0UHCY10Lxxc0XsLuNPgHZYlWk1Ii9SFMHE/60MdlpP7TvcUdLBTuy0Byhx7i+0LO+vMTDJMWsil8Ivgc9xCT6iL5a/kEc3AR7FQwf3K/3jidyLpLFBy+Nliz060Y5j7X+u5sqPogdoa47qdSOJCzCD7DfThaxyPLcnNiGuco/5OoAujC/ZLCFgj2JnIrsf3ZAvl8yzrJfH3KtDK3klNlA5oc2+l92NOcTdasE7iTHZfZg3HXWvdKP5U63FsXNzisIeHkmjs4AtuTvTyCam2PEKwPuy1X+ogTBTKTSAlud5rkDeoGBIyhbO6gZTQnqb8dyLpD4mz2Fyn/6k97YcZn3KVgS6OTEzHhOOhEd1OlFlRgNdREw3YqL4B2ooq/In0GJjhPHQg6L8cyyhL+oPm2noQUp8jw9Sp42EHDgG33dYPiwbQ2eq6Ql2PLCc0M8YXJdVtFhENV6zoPTtosxx4OEWtauoART931a000/qa51cvuJX7bSEvJGhGUh3sTSYGke3X0gQKMHtVh/5iDcb0IowW0J/e/UnITwP6FgTE2AhOsEXaoJiSd4BcUUDG1mHMuLKxRSFw63V7T0XTOHSousHS8QNKMJoNe1PcaArFCJ+gOZmY68Mzw== server-group: - - name: local - type: srl_nokia-aaa-types:local + - name: local + type: srl_nokia-aaa-types:local srl_nokia-dns:dns: network-instance: mgmt server-list: - - 10.171.10.1 - - 10.171.10.2 + - 10.171.10.1 + - 10.171.10.2 srl_nokia-grpc:grpc-server: - - admin-state: enable - name: insecure-mgmt - network-instance: mgmt - port: 57401 - rate-limit: 65000 - services: - - srl_nokia-grpc:gnmi - - srl_nokia-grpc:gnoi - - srl_nokia-grpc:gribi - - srl_nokia-grpc:p4rt - trace-options: - - request - - response - - common - unix-socket: - admin-state: enable - - admin-state: enable - name: mgmt - network-instance: mgmt - rate-limit: 65000 - services: - - srl_nokia-grpc:gnmi - - srl_nokia-grpc:gnoi - - srl_nokia-grpc:gribi - - srl_nokia-grpc:p4rt - tls-profile: clab-profile - trace-options: - - request - - response - - common - unix-socket: - admin-state: enable + - admin-state: enable + name: insecure-mgmt + network-instance: mgmt + port: 57401 + rate-limit: 65000 + services: + - srl_nokia-grpc:gnmi + - srl_nokia-grpc:gnoi + - srl_nokia-grpc:gribi + - srl_nokia-grpc:p4rt + trace-options: + - request + - response + - common + unix-socket: + admin-state: enable + - admin-state: enable + name: mgmt + network-instance: mgmt + rate-limit: 65000 + services: + - srl_nokia-grpc:gnmi + - srl_nokia-grpc:gnoi + - srl_nokia-grpc:gribi + - srl_nokia-grpc:p4rt + tls-profile: clab-profile + trace-options: + - request + - response + - common + unix-socket: + admin-state: enable srl_nokia-json-rpc:json-rpc-server: admin-state: enable network-instance: - - http: - admin-state: enable - https: - admin-state: enable - tls-profile: clab-profile - name: mgmt + - http: + admin-state: enable + https: + admin-state: enable + tls-profile: clab-profile + name: mgmt srl_nokia-lldp:lldp: admin-state: enable srl_nokia-logging:logging: buffer: - - buffer-name: messages - facility: - - facility-name: local6 - priority: - match-above: informational - rotate: 3 - size: '10000000' - - buffer-name: system - facility: - - facility-name: auth - priority: - match-above: warning - - facility-name: cron - priority: - match-above: warning - - facility-name: daemon - priority: - match-above: warning - - facility-name: ftp - priority: - match-above: warning - - facility-name: kern - priority: - match-above: warning - - facility-name: lpr - priority: - match-above: warning - - facility-name: mail - priority: - match-above: warning - - facility-name: news - priority: - match-above: warning - - facility-name: syslog - priority: - match-above: warning - - facility-name: user - priority: - match-above: warning - - facility-name: uucp - priority: - match-above: warning - - facility-name: local0 - priority: - match-above: warning - - facility-name: local1 - priority: - match-above: warning - - facility-name: local2 - priority: - match-above: warning - - facility-name: local3 - priority: - match-above: warning - - facility-name: local4 - priority: - match-above: warning - - facility-name: local5 - priority: - match-above: warning - - facility-name: local7 - priority: - match-above: warning + - buffer-name: messages + facility: + - facility-name: local6 + priority: + match-above: informational + rotate: 3 + size: "10000000" + - buffer-name: system + facility: + - facility-name: auth + priority: + match-above: warning + - facility-name: cron + priority: + match-above: warning + - facility-name: daemon + priority: + match-above: warning + - facility-name: ftp + priority: + match-above: warning + - facility-name: kern + priority: + match-above: warning + - facility-name: lpr + priority: + match-above: warning + - facility-name: mail + priority: + match-above: warning + - facility-name: news + priority: + match-above: warning + - facility-name: syslog + priority: + match-above: warning + - facility-name: user + priority: + match-above: warning + - facility-name: uucp + priority: + match-above: warning + - facility-name: local0 + priority: + match-above: warning + - facility-name: local1 + priority: + match-above: warning + - facility-name: local2 + priority: + match-above: warning + - facility-name: local3 + priority: + match-above: warning + - facility-name: local4 + priority: + match-above: warning + - facility-name: local5 + priority: + match-above: warning + - facility-name: local7 + priority: + match-above: warning file: - - facility: - - facility-name: local6 - priority: - match-above: warning - file-name: messages - rotate: 3 - size: '10000000' + - facility: + - facility-name: local6 + priority: + match-above: warning + file-name: messages + rotate: 3 + size: "10000000" srl_nokia-ssh:ssh-server: - - admin-state: enable - name: mgmt - network-instance: mgmt - use-credentialz: true + - admin-state: enable + name: mgmt + network-instance: mgmt + use-credentialz: true srl_nokia-system-banner:banner: - login-banner: '................................................................ + login-banner: + "................................................................ : Welcome to Nokia SR Linux! : @@ -1200,66 +1228,66 @@ srl_nokia-system:system: ................................................................ - ' + " srl_nokia-system-snmp:snmp: access-group: - - community-entry: - - community: $aes1$AWBtjFCTurY1fG8=$pH/M5cgn/zKEl7OuOv8HSA== - name: RO-Community - name: SNMPv2-RO-Community - security-level: no-auth-no-priv + - community-entry: + - community: $aes1$AWBtjFCTurY1fG8=$pH/M5cgn/zKEl7OuOv8HSA== + name: RO-Community + name: SNMPv2-RO-Community + security-level: no-auth-no-priv network-instance: - - admin-state: enable - name: mgmt + - admin-state: enable + name: mgmt srl_nokia-tls:tls: server-profile: - - authenticate-client: false - certificate: '-----BEGIN CERTIFICATE----- + - authenticate-client: false + certificate: "-----BEGIN CERTIFICATE----- - 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 - wDk+ysL4hAnVWCOrdlbipGFlS6U= + wDk+ysL4hAnVWCOrdlbipGFlS6U= - -----END CERTIFICATE----- + -----END CERTIFICATE----- - ' - key: $aes1$ATSWKgszP5gks28=$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 - name: clab-profile + " + key: $aes1$ATSWKgszP5gks28=$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 + name: clab-profile diff --git a/tests/playbooks/oc-validate.yml b/tests/playbooks/oc-validate.yml index cf7c363..4a4ce48 100644 --- a/tests/playbooks/oc-validate.yml +++ b/tests/playbooks/oc-validate.yml @@ -15,7 +15,8 @@ yang_models: oc register: response - - debug: + - name: Print debug + ansible.builtin.debug: var: response - name: Validate an invalid change set @@ -28,5 +29,6 @@ register: response failed_when: (response.failed == false) or ("has no local leaf with the name 'wrong'" not in response.msg) - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/tests/playbooks/replace-full-cfg.yml b/tests/playbooks/replace-full-cfg.yml index e0f8aba..a17ea9a 100644 --- a/tests/playbooks/replace-full-cfg.yml +++ b/tests/playbooks/replace-full-cfg.yml @@ -10,12 +10,13 @@ nokia.srlinux.config: replace: - path: / - value: "{{lookup('ansible.builtin.template', '{{playbook_dir}}/golden/{{inventory_hostname}}-golden.cfg.json.j2') }}" + value: "{{ lookup('ansible.builtin.template', '{{ playbook_dir }}/golden/{{ inventory_hostname }}-golden.cfg.json.j2') }}" register: set_response diff: true # check_mode: true - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -25,7 +26,8 @@ datastore: state register: get_response # check if the expected interface description is present as a result of config replace - failed_when: ("ethernet-1/1 interface on "+vars.inventory_hostname) not in get_response.result[0] + failed_when: ("ethernet-1/1 interface on " + vars.inventory_hostname) not in get_response.result[0] - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-check.yml b/tests/playbooks/set-check.yml index b84ba6b..986df0b 100644 --- a/tests/playbooks/set-check.yml +++ b/tests/playbooks/set-check.yml @@ -18,7 +18,8 @@ register: set_response failed_when: set_response.changed != true and "Some contact" not in set_response.diff.prepared - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Test check mode with diff @@ -33,7 +34,8 @@ register: set_response failed_when: set_response.changed != true and "Some contact" not in set_response.diff.prepared - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure no changes were made to the device @@ -44,5 +46,6 @@ register: get_response failed_when: response.result[0].location is defined - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-confirm-timeout.yml b/tests/playbooks/set-confirm-timeout.yml index 0bfb531..c3df2ad 100644 --- a/tests/playbooks/set-confirm-timeout.yml +++ b/tests/playbooks/set-confirm-timeout.yml @@ -16,7 +16,8 @@ register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure leaf has been set before timer expires @@ -27,10 +28,12 @@ register: get_response failed_when: get_response.result[0] != "this description must be gone without commit confirm" - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response - - ansible.builtin.pause: + - name: Pause + ansible.builtin.pause: prompt: "Waiting 4 seconds for commit to revert" seconds: 4 @@ -42,7 +45,8 @@ register: get_response failed_when: get_response.result[0] - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response - name: Add again interface description with confirm timeout @@ -59,7 +63,8 @@ update: - path: /system/configuration/confirmed-accept - - ansible.builtin.pause: + - name: Pause + ansible.builtin.pause: prompt: "Waiting 2 seconds to ensure commit is not reverted" seconds: 2 @@ -71,5 +76,6 @@ register: get_response failed_when: get_response.result[0] != "this description must be gone without commit confirm" - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-idempotent.yml b/tests/playbooks/set-idempotent.yml index 214c575..715b282 100644 --- a/tests/playbooks/set-idempotent.yml +++ b/tests/playbooks/set-idempotent.yml @@ -16,7 +16,8 @@ diff: true register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -27,7 +28,8 @@ register: get_response failed_when: get_response.result[0].location != "Some location" or get_response.result[0].contact != "Some contact" - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response - name: Repeated set should not run @@ -40,7 +42,8 @@ register: set_response failed_when: set_response.failed or set_response.changed == true - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Repeated set should not run with diff @@ -54,5 +57,6 @@ diff: true failed_when: set_response.failed or set_response.changed == true - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response diff --git a/tests/playbooks/set-interface.yml b/tests/playbooks/set-interface.yml index 0ca6710..9555deb 100644 --- a/tests/playbooks/set-interface.yml +++ b/tests/playbooks/set-interface.yml @@ -24,7 +24,8 @@ register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -35,5 +36,6 @@ register: get_response failed_when: (get_response.result[0].description != "interface description set with Ansible") - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-leaves-twice.yml b/tests/playbooks/set-leaves-twice.yml index db39314..4800e98 100644 --- a/tests/playbooks/set-leaves-twice.yml +++ b/tests/playbooks/set-leaves-twice.yml @@ -14,7 +14,8 @@ location: some location register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -25,20 +26,22 @@ register: get_response failed_when: (get_response.result[0].location != "some location") - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response - - name: get commits + - name: Get commits nokia.srlinux.get: paths: - path: /system/configuration/commit register: commits - - debug: + - name: Print debug + ansible.builtin.debug: var: commits - name: Count the number of commits registered after the first set - set_fact: + ansible.builtin.set_fact: first_commit_count: "{{ commits.result[0].commit | length }}" - name: Set information with the same value again @@ -49,31 +52,34 @@ location: some location register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - - name: check that no change has been recorded by the module - assert: + - name: Check that no change has been recorded by the module + ansible.builtin.assert: that: - set_response.changed is false - - name: get commits again + - name: Get commits again nokia.srlinux.get: paths: - path: /system/configuration/commit register: commits - - debug: + - name: Print debug + ansible.builtin.debug: var: commits - name: Count the number of commits registered after the second set - set_fact: + ansible.builtin.set_fact: second_commit_count: "{{ commits.result[0].commit | length }}" - - debug: + - name: Print debug + ansible.builtin.debug: msg: "1st commit count is: {{ first_commit_count }}, 2nd commit count is: {{ second_commit_count }}" - - name: check that no new commits have been recorded - assert: + - name: Check that no new commits have been recorded + ansible.builtin.assert: that: - first_commit_count == second_commit_count diff --git a/tests/playbooks/set-leaves.yml b/tests/playbooks/set-leaves.yml index 853675c..8b7311f 100644 --- a/tests/playbooks/set-leaves.yml +++ b/tests/playbooks/set-leaves.yml @@ -21,7 +21,8 @@ value: "test setting description" register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -34,5 +35,6 @@ register: get_response failed_when: (get_response.result[0].location != "Some location") or (get_response.result[0].contact != "Some contact") or (get_response.result[1] != "test setting description") - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-multiple-paths.yml b/tests/playbooks/set-multiple-paths.yml index 09f4a91..43e23bc 100644 --- a/tests/playbooks/set-multiple-paths.yml +++ b/tests/playbooks/set-multiple-paths.yml @@ -20,7 +20,8 @@ - path: /system/json-rpc-server/network-instance[name=mgmt]/https register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -35,5 +36,6 @@ register: get_response failed_when: (get_response.result[0] != "Some location") or (get_response.result[1] != ["request", "common"]) or (get_response.result[2] != {}) - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-oc-leaf.yml b/tests/playbooks/set-oc-leaf.yml index 27bbb2b..e89559f 100644 --- a/tests/playbooks/set-oc-leaf.yml +++ b/tests/playbooks/set-oc-leaf.yml @@ -15,7 +15,8 @@ yang_models: oc register: set_response - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response - name: Ensure changes were made to the device @@ -27,5 +28,6 @@ register: get_response failed_when: get_response.result[0] != "hey ansible" - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-tools.yml b/tests/playbooks/set-tools.yml index 8ea2828..3ae9a4a 100644 --- a/tests/playbooks/set-tools.yml +++ b/tests/playbooks/set-tools.yml @@ -20,5 +20,6 @@ register: get_response failed_when: get_response.result[0] != "active" - - debug: + - name: Print debug + ansible.builtin.debug: var: get_response diff --git a/tests/playbooks/set-wrong-value.yml b/tests/playbooks/set-wrong-value.yml index f7eddca..a43254e 100644 --- a/tests/playbooks/set-wrong-value.yml +++ b/tests/playbooks/set-wrong-value.yml @@ -15,5 +15,6 @@ register: set_response failed_when: (not set_response.failed) or ("has no local leaf with the name 'wrong'" not in set_response.msg) - - debug: + - name: Print debug + ansible.builtin.debug: var: set_response diff --git a/tests/playbooks/tls-missed-check-fail.yml b/tests/playbooks/tls-missed-check-fail.yml index dd4accd..1d93a6f 100644 --- a/tests/playbooks/tls-missed-check-fail.yml +++ b/tests/playbooks/tls-missed-check-fail.yml @@ -6,7 +6,7 @@ hosts: clab gather_facts: false vars: - ansible_httpapi_use_ssl: yes + ansible_httpapi_use_ssl: true tasks: - name: Get with TLS required but without setting skip verify or custom ca cert nokia.srlinux.get: @@ -16,5 +16,6 @@ register: get_return failed_when: not get_return.failed or "CERTIFICATE_VERIFY_FAILED" not in get_return.module_stderr - - debug: + - name: Print debug + ansible.builtin.debug: var: get_return diff --git a/tests/playbooks/tls-skipped-check.yml b/tests/playbooks/tls-skipped-check.yml index 1175be0..d7b7871 100644 --- a/tests/playbooks/tls-skipped-check.yml +++ b/tests/playbooks/tls-skipped-check.yml @@ -6,10 +6,10 @@ hosts: clab gather_facts: false vars: - ansible_httpapi_use_ssl: yes - ansible_httpapi_validate_certs: no + ansible_httpapi_use_ssl: true + ansible_httpapi_validate_certs: false tasks: - - name: json RPC get + - name: Get system information nokia.srlinux.get: paths: - path: /system/information @@ -17,5 +17,6 @@ register: get_return failed_when: get_return.failed - - debug: + - name: Print debug + ansible.builtin.debug: var: get_return diff --git a/tests/playbooks/tls-with-custom-ca.yml b/tests/playbooks/tls-with-custom-ca.yml index 47bf454..1d4e795 100644 --- a/tests/playbooks/tls-with-custom-ca.yml +++ b/tests/playbooks/tls-with-custom-ca.yml @@ -6,7 +6,7 @@ hosts: clab gather_facts: false vars: - ansible_httpapi_use_ssl: yes + ansible_httpapi_use_ssl: true ansible_httpapi_ca_path: "{{ playbook_dir }}/../../scripts/clab-ansible/.tls/ca/ca.pem" tasks: - name: Get with TLS required and custom ca cert @@ -17,5 +17,6 @@ register: get_return failed_when: get_return.failed - - debug: + - name: Print debug + ansible.builtin.debug: var: get_return diff --git a/tests/playbooks/validate.yml b/tests/playbooks/validate.yml index 3816052..08ed91e 100644 --- a/tests/playbooks/validate.yml +++ b/tests/playbooks/validate.yml @@ -15,7 +15,8 @@ contact: Some contact register: response - - debug: + - name: Print debug + ansible.builtin.debug: var: response - name: Validate a valid change set using the non dict value @@ -25,7 +26,8 @@ value: Some location register: response - - debug: + - name: Print debug + ansible.builtin.debug: var: response - name: Validate an invalid change set @@ -38,5 +40,6 @@ register: response failed_when: (response.failed == false) or ("has no local leaf with the name 'wrong'" not in response.msg) - - debug: + - name: Print debug + ansible.builtin.debug: var: response diff --git a/uv.lock b/uv.lock new file mode 100644 index 0000000..004a92f --- /dev/null +++ b/uv.lock @@ -0,0 +1,227 @@ +version = 1 +requires-python = ">=3.11" + +[[package]] +name = "ansible-core" +version = "2.16.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "jinja2" }, + { name = "packaging" }, + { name = "pyyaml" }, + { name = "resolvelib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/66/5f/3098fac361ca16fc42ac30a2da09939286afd9af289f156ac9fbe87595e9/ansible-core-2.16.2.tar.gz", hash = "sha256:e4ab559e7e525b1c6f99084fca873bb014775d5ecbe845b7c07b8e9d6c9c048b", size = 3163899 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/0b/c28a50e7fbb7f6c6eb7bef4f023c5b408b0ff70934c2682be85e412b454d/ansible_core-2.16.2-py3-none-any.whl", hash = "sha256:494f002edcb17b02baef661ff27b8c9c750a534bdc0537ab29dc02e680817d92", size = 2249791 }, +] + +[[package]] +name = "cffi" +version = "1.17.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fc/97/c783634659c2920c3fc70419e3af40972dbaf758daa229a7d6ea6135c90d/cffi-1.17.1.tar.gz", hash = "sha256:1c39c6016c32bc48dd54561950ebd6836e1670f2ae46128f67cf49e789c52824", size = 516621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/f4/927e3a8899e52a27fa57a48607ff7dc91a9ebe97399b357b85a0c7892e00/cffi-1.17.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a45e3c6913c5b87b3ff120dcdc03f6131fa0065027d0ed7ee6190736a74cd401", size = 182264 }, + { url = "https://files.pythonhosted.org/packages/6c/f5/6c3a8efe5f503175aaddcbea6ad0d2c96dad6f5abb205750d1b3df44ef29/cffi-1.17.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:30c5e0cb5ae493c04c8b42916e52ca38079f1b235c2f8ae5f4527b963c401caf", size = 178651 }, + { url = "https://files.pythonhosted.org/packages/94/dd/a3f0118e688d1b1a57553da23b16bdade96d2f9bcda4d32e7d2838047ff7/cffi-1.17.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f75c7ab1f9e4aca5414ed4d8e5c0e303a34f4421f8a0d47a4d019ceff0ab6af4", size = 445259 }, + { url = "https://files.pythonhosted.org/packages/2e/ea/70ce63780f096e16ce8588efe039d3c4f91deb1dc01e9c73a287939c79a6/cffi-1.17.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a1ed2dd2972641495a3ec98445e09766f077aee98a1c896dcb4ad0d303628e41", size = 469200 }, + { url = "https://files.pythonhosted.org/packages/1c/a0/a4fa9f4f781bda074c3ddd57a572b060fa0df7655d2a4247bbe277200146/cffi-1.17.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:46bf43160c1a35f7ec506d254e5c890f3c03648a4dbac12d624e4490a7046cd1", size = 477235 }, + { url = "https://files.pythonhosted.org/packages/62/12/ce8710b5b8affbcdd5c6e367217c242524ad17a02fe5beec3ee339f69f85/cffi-1.17.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a24ed04c8ffd54b0729c07cee15a81d964e6fee0e3d4d342a27b020d22959dc6", size = 459721 }, + { url = "https://files.pythonhosted.org/packages/ff/6b/d45873c5e0242196f042d555526f92aa9e0c32355a1be1ff8c27f077fd37/cffi-1.17.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:610faea79c43e44c71e1ec53a554553fa22321b65fae24889706c0a84d4ad86d", size = 467242 }, + { url = "https://files.pythonhosted.org/packages/1a/52/d9a0e523a572fbccf2955f5abe883cfa8bcc570d7faeee06336fbd50c9fc/cffi-1.17.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a9b15d491f3ad5d692e11f6b71f7857e7835eb677955c00cc0aefcd0669adaf6", size = 477999 }, + { url = "https://files.pythonhosted.org/packages/44/74/f2a2460684a1a2d00ca799ad880d54652841a780c4c97b87754f660c7603/cffi-1.17.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:de2ea4b5833625383e464549fec1bc395c1bdeeb5f25c4a3a82b5a8c756ec22f", size = 454242 }, + { url = "https://files.pythonhosted.org/packages/f8/4a/34599cac7dfcd888ff54e801afe06a19c17787dfd94495ab0c8d35fe99fb/cffi-1.17.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fc48c783f9c87e60831201f2cce7f3b2e4846bf4d8728eabe54d60700b318a0b", size = 478604 }, + { url = "https://files.pythonhosted.org/packages/34/33/e1b8a1ba29025adbdcda5fb3a36f94c03d771c1b7b12f726ff7fef2ebe36/cffi-1.17.1-cp311-cp311-win32.whl", hash = "sha256:85a950a4ac9c359340d5963966e3e0a94a676bd6245a4b55bc43949eee26a655", size = 171727 }, + { url = "https://files.pythonhosted.org/packages/3d/97/50228be003bb2802627d28ec0627837ac0bf35c90cf769812056f235b2d1/cffi-1.17.1-cp311-cp311-win_amd64.whl", hash = "sha256:caaf0640ef5f5517f49bc275eca1406b0ffa6aa184892812030f04c2abf589a0", size = 181400 }, + { url = "https://files.pythonhosted.org/packages/5a/84/e94227139ee5fb4d600a7a4927f322e1d4aea6fdc50bd3fca8493caba23f/cffi-1.17.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:805b4371bf7197c329fcb3ead37e710d1bca9da5d583f5073b799d5c5bd1eee4", size = 183178 }, + { url = "https://files.pythonhosted.org/packages/da/ee/fb72c2b48656111c4ef27f0f91da355e130a923473bf5ee75c5643d00cca/cffi-1.17.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:733e99bc2df47476e3848417c5a4540522f234dfd4ef3ab7fafdf555b082ec0c", size = 178840 }, + { url = "https://files.pythonhosted.org/packages/cc/b6/db007700f67d151abadf508cbfd6a1884f57eab90b1bb985c4c8c02b0f28/cffi-1.17.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1257bdabf294dceb59f5e70c64a3e2f462c30c7ad68092d01bbbfb1c16b1ba36", size = 454803 }, + { url = "https://files.pythonhosted.org/packages/1a/df/f8d151540d8c200eb1c6fba8cd0dfd40904f1b0682ea705c36e6c2e97ab3/cffi-1.17.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da95af8214998d77a98cc14e3a3bd00aa191526343078b530ceb0bd710fb48a5", size = 478850 }, + { url = "https://files.pythonhosted.org/packages/28/c0/b31116332a547fd2677ae5b78a2ef662dfc8023d67f41b2a83f7c2aa78b1/cffi-1.17.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d63afe322132c194cf832bfec0dc69a99fb9bb6bbd550f161a49e9e855cc78ff", size = 485729 }, + { url = "https://files.pythonhosted.org/packages/91/2b/9a1ddfa5c7f13cab007a2c9cc295b70fbbda7cb10a286aa6810338e60ea1/cffi-1.17.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f79fc4fc25f1c8698ff97788206bb3c2598949bfe0fef03d299eb1b5356ada99", size = 471256 }, + { url = "https://files.pythonhosted.org/packages/b2/d5/da47df7004cb17e4955df6a43d14b3b4ae77737dff8bf7f8f333196717bf/cffi-1.17.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b62ce867176a75d03a665bad002af8e6d54644fad99a3c70905c543130e39d93", size = 479424 }, + { url = "https://files.pythonhosted.org/packages/0b/ac/2a28bcf513e93a219c8a4e8e125534f4f6db03e3179ba1c45e949b76212c/cffi-1.17.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:386c8bf53c502fff58903061338ce4f4950cbdcb23e2902d86c0f722b786bbe3", size = 484568 }, + { url = "https://files.pythonhosted.org/packages/d4/38/ca8a4f639065f14ae0f1d9751e70447a261f1a30fa7547a828ae08142465/cffi-1.17.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4ceb10419a9adf4460ea14cfd6bc43d08701f0835e979bf821052f1805850fe8", size = 488736 }, + { url = "https://files.pythonhosted.org/packages/86/c5/28b2d6f799ec0bdecf44dced2ec5ed43e0eb63097b0f58c293583b406582/cffi-1.17.1-cp312-cp312-win32.whl", hash = "sha256:a08d7e755f8ed21095a310a693525137cfe756ce62d066e53f502a83dc550f65", size = 172448 }, + { url = "https://files.pythonhosted.org/packages/50/b9/db34c4755a7bd1cb2d1603ac3863f22bcecbd1ba29e5ee841a4bc510b294/cffi-1.17.1-cp312-cp312-win_amd64.whl", hash = "sha256:51392eae71afec0d0c8fb1a53b204dbb3bcabcb3c9b807eedf3e1e6ccf2de903", size = 181976 }, + { url = "https://files.pythonhosted.org/packages/8d/f8/dd6c246b148639254dad4d6803eb6a54e8c85c6e11ec9df2cffa87571dbe/cffi-1.17.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f3a2b4222ce6b60e2e8b337bb9596923045681d71e5a082783484d845390938e", size = 182989 }, + { url = "https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2", size = 178802 }, + { url = "https://files.pythonhosted.org/packages/0e/2d/eab2e858a91fdff70533cab61dcff4a1f55ec60425832ddfdc9cd36bc8af/cffi-1.17.1-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d01b12eeeb4427d3110de311e1774046ad344f5b1a7403101878976ecd7a10f3", size = 454792 }, + { url = "https://files.pythonhosted.org/packages/75/b2/fbaec7c4455c604e29388d55599b99ebcc250a60050610fadde58932b7ee/cffi-1.17.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:706510fe141c86a69c8ddc029c7910003a17353970cff3b904ff0686a5927683", size = 478893 }, + { url = "https://files.pythonhosted.org/packages/4f/b7/6e4a2162178bf1935c336d4da8a9352cccab4d3a5d7914065490f08c0690/cffi-1.17.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de55b766c7aa2e2a3092c51e0483d700341182f08e67c63630d5b6f200bb28e5", size = 485810 }, + { url = "https://files.pythonhosted.org/packages/c7/8a/1d0e4a9c26e54746dc08c2c6c037889124d4f59dffd853a659fa545f1b40/cffi-1.17.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c59d6e989d07460165cc5ad3c61f9fd8f1b4796eacbd81cee78957842b834af4", size = 471200 }, + { url = "https://files.pythonhosted.org/packages/26/9f/1aab65a6c0db35f43c4d1b4f580e8df53914310afc10ae0397d29d697af4/cffi-1.17.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd398dbc6773384a17fe0d3e7eeb8d1a21c2200473ee6806bb5e6a8e62bb73dd", size = 479447 }, + { url = "https://files.pythonhosted.org/packages/5f/e4/fb8b3dd8dc0e98edf1135ff067ae070bb32ef9d509d6cb0f538cd6f7483f/cffi-1.17.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:3edc8d958eb099c634dace3c7e16560ae474aa3803a5df240542b305d14e14ed", size = 484358 }, + { url = "https://files.pythonhosted.org/packages/f1/47/d7145bf2dc04684935d57d67dff9d6d795b2ba2796806bb109864be3a151/cffi-1.17.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:72e72408cad3d5419375fc87d289076ee319835bdfa2caad331e377589aebba9", size = 488469 }, + { url = "https://files.pythonhosted.org/packages/bf/ee/f94057fa6426481d663b88637a9a10e859e492c73d0384514a17d78ee205/cffi-1.17.1-cp313-cp313-win32.whl", hash = "sha256:e03eab0a8677fa80d646b5ddece1cbeaf556c313dcfac435ba11f107ba117b5d", size = 172475 }, + { url = "https://files.pythonhosted.org/packages/7c/fc/6a8cb64e5f0324877d503c854da15d76c1e50eb722e320b15345c4d0c6de/cffi-1.17.1-cp313-cp313-win_amd64.whl", hash = "sha256:f6a16c31041f09ead72d69f583767292f750d24913dadacf5756b966aacb3f1a", size = 182009 }, +] + +[[package]] +name = "cryptography" +version = "44.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/4c/45dfa6829acffa344e3967d6006ee4ae8be57af746ae2eba1c431949b32c/cryptography-44.0.0.tar.gz", hash = "sha256:cd4e834f340b4293430701e772ec543b0fbe6c2dea510a5286fe0acabe153a02", size = 710657 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/55/09/8cc67f9b84730ad330b3b72cf867150744bf07ff113cda21a15a1c6d2c7c/cryptography-44.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:84111ad4ff3f6253820e6d3e58be2cc2a00adb29335d4cacb5ab4d4d34f2a123", size = 6541833 }, + { url = "https://files.pythonhosted.org/packages/7e/5b/3759e30a103144e29632e7cb72aec28cedc79e514b2ea8896bb17163c19b/cryptography-44.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b15492a11f9e1b62ba9d73c210e2416724633167de94607ec6069ef724fad092", size = 3922710 }, + { url = "https://files.pythonhosted.org/packages/5f/58/3b14bf39f1a0cfd679e753e8647ada56cddbf5acebffe7db90e184c76168/cryptography-44.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:831c3c4d0774e488fdc83a1923b49b9957d33287de923d58ebd3cec47a0ae43f", size = 4137546 }, + { url = "https://files.pythonhosted.org/packages/98/65/13d9e76ca19b0ba5603d71ac8424b5694415b348e719db277b5edc985ff5/cryptography-44.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:761817a3377ef15ac23cd7834715081791d4ec77f9297ee694ca1ee9c2c7e5eb", size = 3915420 }, + { url = "https://files.pythonhosted.org/packages/b1/07/40fe09ce96b91fc9276a9ad272832ead0fddedcba87f1190372af8e3039c/cryptography-44.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:3c672a53c0fb4725a29c303be906d3c1fa99c32f58abe008a82705f9ee96f40b", size = 4154498 }, + { url = "https://files.pythonhosted.org/packages/75/ea/af65619c800ec0a7e4034207aec543acdf248d9bffba0533342d1bd435e1/cryptography-44.0.0-cp37-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:4ac4c9f37eba52cb6fbeaf5b59c152ea976726b865bd4cf87883a7e7006cc543", size = 3932569 }, + { url = "https://files.pythonhosted.org/packages/c7/af/d1deb0c04d59612e3d5e54203159e284d3e7a6921e565bb0eeb6269bdd8a/cryptography-44.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ed3534eb1090483c96178fcb0f8893719d96d5274dfde98aa6add34614e97c8e", size = 4016721 }, + { url = "https://files.pythonhosted.org/packages/bd/69/7ca326c55698d0688db867795134bdfac87136b80ef373aaa42b225d6dd5/cryptography-44.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:f3f6fdfa89ee2d9d496e2c087cebef9d4fcbb0ad63c40e821b39f74bf48d9c5e", size = 4240915 }, + { url = "https://files.pythonhosted.org/packages/ef/d4/cae11bf68c0f981e0413906c6dd03ae7fa864347ed5fac40021df1ef467c/cryptography-44.0.0-cp37-abi3-win32.whl", hash = "sha256:eb33480f1bad5b78233b0ad3e1b0be21e8ef1da745d8d2aecbb20671658b9053", size = 2757925 }, + { url = "https://files.pythonhosted.org/packages/64/b1/50d7739254d2002acae64eed4fc43b24ac0cc44bf0a0d388d1ca06ec5bb1/cryptography-44.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:abc998e0c0eee3c8a1904221d3f67dcfa76422b23620173e28c11d3e626c21bd", size = 3202055 }, + { url = "https://files.pythonhosted.org/packages/11/18/61e52a3d28fc1514a43b0ac291177acd1b4de00e9301aaf7ef867076ff8a/cryptography-44.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:660cb7312a08bc38be15b696462fa7cc7cd85c3ed9c576e81f4dc4d8b2b31591", size = 6542801 }, + { url = "https://files.pythonhosted.org/packages/1a/07/5f165b6c65696ef75601b781a280fc3b33f1e0cd6aa5a92d9fb96c410e97/cryptography-44.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1923cb251c04be85eec9fda837661c67c1049063305d6be5721643c22dd4e2b7", size = 3922613 }, + { url = "https://files.pythonhosted.org/packages/28/34/6b3ac1d80fc174812486561cf25194338151780f27e438526f9c64e16869/cryptography-44.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:404fdc66ee5f83a1388be54300ae978b2efd538018de18556dde92575e05defc", size = 4137925 }, + { url = "https://files.pythonhosted.org/packages/d0/c7/c656eb08fd22255d21bc3129625ed9cd5ee305f33752ef2278711b3fa98b/cryptography-44.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:c5eb858beed7835e5ad1faba59e865109f3e52b3783b9ac21e7e47dc5554e289", size = 3915417 }, + { url = "https://files.pythonhosted.org/packages/ef/82/72403624f197af0db6bac4e58153bc9ac0e6020e57234115db9596eee85d/cryptography-44.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:f53c2c87e0fb4b0c00fa9571082a057e37690a8f12233306161c8f4b819960b7", size = 4155160 }, + { url = "https://files.pythonhosted.org/packages/a2/cd/2f3c440913d4329ade49b146d74f2e9766422e1732613f57097fea61f344/cryptography-44.0.0-cp39-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:9e6fc8a08e116fb7c7dd1f040074c9d7b51d74a8ea40d4df2fc7aa08b76b9e6c", size = 3932331 }, + { url = "https://files.pythonhosted.org/packages/7f/df/8be88797f0a1cca6e255189a57bb49237402b1880d6e8721690c5603ac23/cryptography-44.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:d2436114e46b36d00f8b72ff57e598978b37399d2786fd39793c36c6d5cb1c64", size = 4017372 }, + { url = "https://files.pythonhosted.org/packages/af/36/5ccc376f025a834e72b8e52e18746b927f34e4520487098e283a719c205e/cryptography-44.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a01956ddfa0a6790d594f5b34fc1bfa6098aca434696a03cfdbe469b8ed79285", size = 4239657 }, + { url = "https://files.pythonhosted.org/packages/46/b0/f4f7d0d0bcfbc8dd6296c1449be326d04217c57afb8b2594f017eed95533/cryptography-44.0.0-cp39-abi3-win32.whl", hash = "sha256:eca27345e1214d1b9f9490d200f9db5a874479be914199194e746c893788d417", size = 2758672 }, + { url = "https://files.pythonhosted.org/packages/97/9b/443270b9210f13f6ef240eff73fd32e02d381e7103969dc66ce8e89ee901/cryptography-44.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:708ee5f1bafe76d041b53a4f95eb28cdeb8d18da17e597d46d7833ee59b97ede", size = 3202071 }, +] + +[[package]] +name = "jinja2" +version = "3.1.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/af/92/b3130cbbf5591acf9ade8708c365f3238046ac7cb8ccba6e81abccb0ccff/jinja2-3.1.5.tar.gz", hash = "sha256:8fefff8dc3034e27bb80d67c671eb8a9bc424c0ef4c0826edbff304cceff43bb", size = 244674 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bd/0f/2ba5fbcd631e3e88689309dbe978c5769e883e4b84ebfe7da30b43275c5a/jinja2-3.1.5-py3-none-any.whl", hash = "sha256:aba0f4dc9ed8013c424088f68a5c226f7d6097ed89b246d7749c2ec4175c6adb", size = 134596 }, +] + +[[package]] +name = "markupsafe" +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, +] + +[[package]] +name = "packaging" +version = "24.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, +] + +[[package]] +name = "pycparser" +version = "2.22" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1d/b2/31537cf4b1ca988837256c910a668b553fceb8f069bedc4b1c826024b52c/pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6", size = 172736 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc", size = 117552 }, +] + +[[package]] +name = "pyyaml" +version = "6.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/ed/79a089b6be93607fa5cdaedf301d7dfb23af5f25c398d5ead2525b063e17/pyyaml-6.0.2.tar.gz", hash = "sha256:d584d9ec91ad65861cc08d42e834324ef890a082e591037abe114850ff7bbc3e", size = 130631 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f8/aa/7af4e81f7acba21a4c6be026da38fd2b872ca46226673c89a758ebdc4fd2/PyYAML-6.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cc1c1159b3d456576af7a3e4d1ba7e6924cb39de8f67111c735f6fc832082774", size = 184612 }, + { url = "https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1e2120ef853f59c7419231f3bf4e7021f1b936f6ebd222406c3b60212205d2ee", size = 172040 }, + { url = "https://files.pythonhosted.org/packages/ad/0c/c804f5f922a9a6563bab712d8dcc70251e8af811fce4524d57c2c0fd49a4/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d225db5a45f21e78dd9358e58a98702a0302f2659a3c6cd320564b75b86f47c", size = 736829 }, + { url = "https://files.pythonhosted.org/packages/51/16/6af8d6a6b210c8e54f1406a6b9481febf9c64a3109c541567e35a49aa2e7/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ac9328ec4831237bec75defaf839f7d4564be1e6b25ac710bd1a96321cc8317", size = 764167 }, + { url = "https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ad2a3decf9aaba3d29c8f537ac4b243e36bef957511b4766cb0057d32b0be85", size = 762952 }, + { url = "https://files.pythonhosted.org/packages/9b/97/ecc1abf4a823f5ac61941a9c00fe501b02ac3ab0e373c3857f7d4b83e2b6/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ff3824dc5261f50c9b0dfb3be22b4567a6f938ccce4587b38952d85fd9e9afe4", size = 735301 }, + { url = "https://files.pythonhosted.org/packages/45/73/0f49dacd6e82c9430e46f4a027baa4ca205e8b0a9dce1397f44edc23559d/PyYAML-6.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:797b4f722ffa07cc8d62053e4cff1486fa6dc094105d13fea7b1de7d8bf71c9e", size = 756638 }, + { url = "https://files.pythonhosted.org/packages/22/5f/956f0f9fc65223a58fbc14459bf34b4cc48dec52e00535c79b8db361aabd/PyYAML-6.0.2-cp311-cp311-win32.whl", hash = "sha256:11d8f3dd2b9c1207dcaf2ee0bbbfd5991f571186ec9cc78427ba5bd32afae4b5", size = 143850 }, + { url = "https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:e10ce637b18caea04431ce14fabcf5c64a1c61ec9c56b071a4b7ca131ca52d44", size = 161980 }, + { url = "https://files.pythonhosted.org/packages/86/0c/c581167fc46d6d6d7ddcfb8c843a4de25bdd27e4466938109ca68492292c/PyYAML-6.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:c70c95198c015b85feafc136515252a261a84561b7b1d51e3384e0655ddf25ab", size = 183873 }, + { url = "https://files.pythonhosted.org/packages/a8/0c/38374f5bb272c051e2a69281d71cba6fdb983413e6758b84482905e29a5d/PyYAML-6.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ce826d6ef20b1bc864f0a68340c8b3287705cae2f8b4b1d932177dcc76721725", size = 173302 }, + { url = "https://files.pythonhosted.org/packages/c3/93/9916574aa8c00aa06bbac729972eb1071d002b8e158bd0e83a3b9a20a1f7/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f71ea527786de97d1a0cc0eacd1defc0985dcf6b3f17bb77dcfc8c34bec4dc5", size = 739154 }, + { url = "https://files.pythonhosted.org/packages/95/0f/b8938f1cbd09739c6da569d172531567dbcc9789e0029aa070856f123984/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b22676e8097e9e22e36d6b7bda33190d0d400f345f23d4065d48f4ca7ae0425", size = 766223 }, + { url = "https://files.pythonhosted.org/packages/b9/2b/614b4752f2e127db5cc206abc23a8c19678e92b23c3db30fc86ab731d3bd/PyYAML-6.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80bab7bfc629882493af4aa31a4cfa43a4c57c83813253626916b8c7ada83476", size = 767542 }, + { url = "https://files.pythonhosted.org/packages/d4/00/dd137d5bcc7efea1836d6264f049359861cf548469d18da90cd8216cf05f/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0833f8694549e586547b576dcfaba4a6b55b9e96098b36cdc7ebefe667dfed48", size = 731164 }, + { url = "https://files.pythonhosted.org/packages/c9/1f/4f998c900485e5c0ef43838363ba4a9723ac0ad73a9dc42068b12aaba4e4/PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8b9c7197f7cb2738065c481a0461e50ad02f18c78cd75775628afb4d7137fb3b", size = 756611 }, + { url = "https://files.pythonhosted.org/packages/df/d1/f5a275fdb252768b7a11ec63585bc38d0e87c9e05668a139fea92b80634c/PyYAML-6.0.2-cp312-cp312-win32.whl", hash = "sha256:ef6107725bd54b262d6dedcc2af448a266975032bc85ef0172c5f059da6325b4", size = 140591 }, + { url = "https://files.pythonhosted.org/packages/0c/e8/4f648c598b17c3d06e8753d7d13d57542b30d56e6c2dedf9c331ae56312e/PyYAML-6.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7e7401d0de89a9a855c839bc697c079a4af81cf878373abd7dc625847d25cbd8", size = 156338 }, + { url = "https://files.pythonhosted.org/packages/ef/e3/3af305b830494fa85d95f6d95ef7fa73f2ee1cc8ef5b495c7c3269fb835f/PyYAML-6.0.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:efdca5630322a10774e8e98e1af481aad470dd62c3170801852d752aa7a783ba", size = 181309 }, + { url = "https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1", size = 171679 }, + { url = "https://files.pythonhosted.org/packages/7c/9a/337322f27005c33bcb656c655fa78325b730324c78620e8328ae28b64d0c/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0ffe8360bab4910ef1b9e87fb812d8bc0a308b0d0eef8c8f44e0254ab3b07133", size = 733428 }, + { url = "https://files.pythonhosted.org/packages/a3/69/864fbe19e6c18ea3cc196cbe5d392175b4cf3d5d0ac1403ec3f2d237ebb5/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:17e311b6c678207928d649faa7cb0d7b4c26a0ba73d41e99c4fff6b6c3276484", size = 763361 }, + { url = "https://files.pythonhosted.org/packages/04/24/b7721e4845c2f162d26f50521b825fb061bc0a5afcf9a386840f23ea19fa/PyYAML-6.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b189594dbe54f75ab3a1acec5f1e3faa7e8cf2f1e08d9b561cb41b845f69d5", size = 759523 }, + { url = "https://files.pythonhosted.org/packages/2b/b2/e3234f59ba06559c6ff63c4e10baea10e5e7df868092bf9ab40e5b9c56b6/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:41e4e3953a79407c794916fa277a82531dd93aad34e29c2a514c2c0c5fe971cc", size = 726660 }, + { url = "https://files.pythonhosted.org/packages/fe/0f/25911a9f080464c59fab9027482f822b86bf0608957a5fcc6eaac85aa515/PyYAML-6.0.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:68ccc6023a3400877818152ad9a1033e3db8625d899c72eacb5a668902e4d652", size = 751597 }, + { url = "https://files.pythonhosted.org/packages/14/0d/e2c3b43bbce3cf6bd97c840b46088a3031085179e596d4929729d8d68270/PyYAML-6.0.2-cp313-cp313-win32.whl", hash = "sha256:bc2fa7c6b47d6bc618dd7fb02ef6fdedb1090ec036abab80d4681424b84c1183", size = 140527 }, + { url = "https://files.pythonhosted.org/packages/fa/de/02b54f42487e3d3c6efb3f89428677074ca7bf43aae402517bc7cca949f3/PyYAML-6.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:8388ee1976c416731879ac16da0aff3f63b286ffdd57cdeb95f3f2e085687563", size = 156446 }, +] + +[[package]] +name = "resolvelib" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ce/10/f699366ce577423cbc3df3280063099054c23df70856465080798c6ebad6/resolvelib-1.0.1.tar.gz", hash = "sha256:04ce76cbd63fded2078ce224785da6ecd42b9564b1390793f64ddecbe997b309", size = 21065 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/fc/e9ccf0521607bcd244aa0b3fbd574f71b65e9ce6a112c83af988bbbe2e23/resolvelib-1.0.1-py2.py3-none-any.whl", hash = "sha256:d2da45d1a8dfee81bdd591647783e340ef3bcb104b54c383f70d422ef5cc7dbf", size = 17194 }, +] + +[[package]] +name = "srlinux-ansible-collection" +version = "0.6.0" +source = { virtual = "." } +dependencies = [ + { name = "ansible-core" }, +] + +[package.metadata] +requires-dist = [{ name = "ansible-core", specifier = "==2.16.2" }]