ansible 检查最大数量列表
ansible check max number list
我在 Ansible 中遇到脚本问题。我想检查 Cisco NXOS 中路由映射的最后一个序列号,我做了下一个:
我的想法是显示输出,然后使用 map('regex_replace") 删除除数字以外的所有内容。
里面的角色:
变量文件:
sequence: 10
任务文件:
---
- 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)}}"
有效,但如果前缀数超过 90,则失败。
这是结果:
"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
}
有谁知道为什么最大数是 90 而不是 130?
如果我使用 90 之前的数字,它可以完美地工作,但超过 100 就不能工作。有什么想法吗?
谢谢
您将值作为字符串进行比较,因此结果完全符合预期。 “90”(以 9
开头)在字母表中比“130”(以 1
开头)更远。
您需要比较 int 以获得更大的 int 值。
与解法的区别如下:
---
- 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+).*','')
| max
}}
- name: show max int value
debug:
msg: >-
{{
output.stdout_lines[0]
| map ('regex_replace','route-map TEST-MAP, permit, sequence (\d+).*','')
| map('int')
| max
}}
给出:
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
我在 Ansible 中遇到脚本问题。我想检查 Cisco NXOS 中路由映射的最后一个序列号,我做了下一个:
我的想法是显示输出,然后使用 map('regex_replace") 删除除数字以外的所有内容。
里面的角色:
变量文件:
sequence: 10
任务文件:
---
- 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)}}"
有效,但如果前缀数超过 90,则失败。
这是结果:
"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
}
有谁知道为什么最大数是 90 而不是 130?
如果我使用 90 之前的数字,它可以完美地工作,但超过 100 就不能工作。有什么想法吗?
谢谢
您将值作为字符串进行比较,因此结果完全符合预期。 “90”(以 9
开头)在字母表中比“130”(以 1
开头)更远。
您需要比较 int 以获得更大的 int 值。
与解法的区别如下:
---
- 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+).*','')
| max
}}
- name: show max int value
debug:
msg: >-
{{
output.stdout_lines[0]
| map ('regex_replace','route-map TEST-MAP, permit, sequence (\d+).*','')
| map('int')
| max
}}
给出:
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