我想根据现有VLAN的最后数量创建新的VLAN。例如,我在eos上的最后一个VLAN编号是100,因此我想运行我的行动手册并创建VLAN 101。然而,当我运行我的剧本时,它看起来set_fact迭代并不是顺序的,并且为我创建了VLAN15而不是VLAN101的剧本。
即使我在使用排序过滤器,看起来asnible也没有按顺序进行迭代。有人知道怎么做吗?
我的攻略
- name: CHECK VLAN
hosts: eos
connection: local
tasks:
- name: CHECK FOR VLAN NUMBERS
eos_command:
commands: show vlan | json
provider: "{{ cli }}"
ignore_errors: yes
register: sh_vlan_output
- debug: var=sh_vlan_output.stdout[0].vlans.keys()
- name: SET VLAN NUMBER
set_fact:
vlan_index: "{{ item | int +1 }}"
with_items:
- "{{ sh_vlan_output.stdout[0].vlans.keys() | sort }}"
- debug: var=vlan_index
- name: CREATE VLAN
eos_config:
lines:
- vlan {{ vlan_index }}
provider: "{{ cli }}"
authorize: yes
PLAY [CHECK VLAN] **************************************************************
TASK [setup] *******************************************************************
ok: [eos-1]
TASK [CHECK FOR VLAN NUMBERS] **************************************************
ok: [eos-1]
TASK [debug] *******************************************************************
ok: [eos-1] => {
"sh_vlan_output.stdout[0].vlans.keys()": [
"11",
"10",
"13",
"12",
"14",
"1",
"100"
]
}
TASK [SET VLAN NUMBER] *********************************************************
ok: [eos-1] => (item=10)
ok: [eos-1] => (item=1)
ok: [eos-1] => (item=100)
ok: [eos-1] => (item=11)
ok: [eos-1] => (item=12)
ok: [eos-1] => (item=13)
ok: [eos-1] => (item=14)
TASK [debug] *******************************************************************
ok: [eos-1] => {
"vlan_index": "15"
}
TASK [CREATE VLAN] *************************************************************
changed: [eos-1]
PLAY RECAP *********************************************************************
eos-1 发布于 2017-02-05 04:12:12
您可以使用以下jinja表达式获取max + 1:
{{ sh_vlan_output.stdout[0].vlans.keys() | map('int') | max + 1 }}https://stackoverflow.com/questions/42044785
复制相似问题