首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ansible check最大数量列表

ansible check最大数量列表
EN

Stack Overflow用户
提问于 2020-06-27 00:40:39
回答 1查看 292关注 0票数 1

我在Ansible中遇到了脚本问题。我想检查Cisco NXOS中路由映射的最后一个序列号,然后执行下一步操作:

我的想法是显示输出,然后使用map(‘regex_replace’)删除除数字之外的所有内容。

在角色内部:

vars文件:

代码语言:javascript
复制
sequence: 10

任务文件:

代码语言:javascript
复制
---
- 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个,它就会失败。

这就是结果:

代码语言:javascript
复制
    "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它就不能工作。有什么想法吗?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-27 01:42:47

您正在将您的值作为字符串进行比较,因此结果完全是预期的。"90“(以9开头)在字母表中比"130”(以1开头)更靠前。

您需要与int进行比较,以获得更大的int值。

以下是解决方案的不同之处:

代码语言:javascript
复制
---
- 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
          }}

这就给出了:

代码语言:javascript
复制
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   
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62599212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档