I am having issues with script in Ansible. I want to check the last sequence number the route-map in Cisco NXOS and I did the next:
My idea was to show the output and then, with map('regex_replace") remove all except the numbers.
Inside the role:
vars file:
sequence: 10
tasks file:
---
- name: check route-map
nxos_command:
commands: sh route-map |inc TEST-MAP
register: output
- name: Calculate max number
set_fact:
max_seq_number: |
{{ output.stdout_lines[0] | map ('regex_replace','route-map TEST-MAP, permit, sequence','') | list |max}}
- name: Calculate number to use
set_fact:
sum: "{{ (max_seq_number |int) + (sequence |int)}}"
That it works but if the number of prefixes is more than 90 it fails.
This is the result:
"stdout_lines": [
[
"route-map TEST-MAP, permit, sequence 1 ",
"route-map TEST-MAP, permit, sequence 10 ",
"route-map TEST-MAP, permit, sequence 20 ",
"route-map TEST-MAP, permit, sequence 30 ",
"route-map TEST-MAP, permit, sequence 40 ",
"route-map TEST-MAP, permit, sequence 50 ",
"route-map TEST-MAP, permit, sequence 60 ",
"route-map TEST-MAP, permit, sequence 70 ",
"route-map TEST-MAP, permit, sequence 80 ",
"route-map TEST-MAP, permit, sequence 90 ",
"route-map TEST-MAP, permit, sequence 100 ",
"route-map TEST-MAP, permit, sequence 110 ",
"route-map TEST-MAP, permit, sequence 120 ",
"route-map TEST-MAP, permit, sequence 130"
]
]
}
TASK [checks : Calculate max number] **********************************************************************************************************************************************************************
task path: /ansible/Config-Generator/roles/checks/tasks/Route-map-SequenceNumber.yml:6
ok: [localhost] => {
"ansible_facts": {
"**max_seq_number": " 90 \n"**
},
"changed": false
}
TASK [checks : Calculate number to use] *******************************************************************************************************************************************************************
task path: /ansible/Config-Generator/roles/checks/tasks/Route-map-SequenceNumber.yml:10
ok: [localhost] => {
"ansible_facts": {
"sum": "100"
},
"changed": false
}
Does anyone know why the Max number is 90 instead of 130?
If I use numbers until 90 it works perfectly, but more than 100 it does not work. Any idea?
Thanks
You are comparing your values as string so the result is totally expected. "90" (starts with 9) is further in the alphabet than "130" (starts with 1).
You need to compare as int to get the greater int value.
The following shows the differences with the solution:
---
- hosts: localhost
gather_facts: false
vars:
# simple one-liner with your original data for demo
output: {"stdout_lines": [["route-map TEST-MAP, permit, sequence 1 ", "route-map TEST-MAP, permit, sequence 10 ", "route-map TEST-MAP, permit, sequence 20 ", "route-map TEST-MAP, permit, sequence 30 ", "route-map TEST-MAP, permit, sequence 40 ", "route-map TEST-MAP, permit, sequence 50 ", "route-map TEST-MAP, permit, sequence 60 ", "route-map TEST-MAP, permit, sequence 70 ", "route-map TEST-MAP, permit, sequence 80 ", "route-map TEST-MAP, permit, sequence 90 ", "route-map TEST-MAP, permit, sequence 100 ", "route-map TEST-MAP, permit, sequence 110 ", "route-map TEST-MAP, permit, sequence 120 ", "route-map TEST-MAP, permit, sequence 130"]]}
tasks:
- name: show max string value
debug:
msg: >-
{{
output.stdout_lines[0]
| map ('regex_replace','route-map TEST-MAP, permit, sequence (\d+).*','\1')
| max
}}
- name: show max int value
debug:
msg: >-
{{
output.stdout_lines[0]
| map ('regex_replace','route-map TEST-MAP, permit, sequence (\d+).*','\1')
| map('int')
| max
}}
which gives:
PLAY [localhost] ***********************************************************************************************************************************************************************************************************************
TASK [show max string value] ***********************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "90"
}
TASK [show max int value] **************************************************************************************************************************************************************************************************************
ok: [localhost] => {
"msg": "130"
}
PLAY RECAP *****************************************************************************************************************************************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With