filter - ansible检查最大数量列表
问题描述
我在 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+).*','\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
}}
这使:
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
推荐阅读
- powershell - 需要帮助才能从故障排除日志中仅获取特定实例的最新条目
- matlab - CDF 输入参数不足
- r - 如何找到每个因子级别的行元素从负数切换到正数(周期)的次数
- python - 使用行的 jellyfish.metaphone() 值填充 CSV 中的行
- sql-server-2012 - 在 SQL Server 中将不同的变量与数值连接起来
- firebase - Angular 8 Firebase Login with Google 之前工作的项目失败
- html - 如何限制 GridView 中的模板字段宽度?
- scala - 在 Scala 中,如何在没有 asInstanceOf 的情况下转换值?
- swiftui - 在 SwiftUI 中居中视图时如何防止文本压缩?
- javascript - 将 enter keydown 视为跨多个模式按下“下一步”按钮