Loops 执行多个Ansible播放,一次执行一个变量列表项
我有一个Ansible剧本,可以在环境中自动进行网络更改。游戏1涉及Cisco Nexus端口通道,需要将多个VLAN从一个端口通道移动到另一个端口通道,游戏2涉及Cisco ACI,方法是在所需ACI租户内创建新的所需VLAN(创建BDs和EPG) My playbook&associates VAR文件、角色等。按预期为单个vlan执行此操作,在端口通道之间移动并创建ACI,但是当我有需要迁移的vlan ID列表时,我不需要在Nexus上执行所有vlan移动,然后以线性方法在ACI中创建所有vlan。我需要像执行单个vlan一样执行每个vlan移动和创建,然后将其循环回(我假设为循环)列表中的下一个项目(vlan)并再次执行 变量片段Loops 执行多个Ansible播放,一次执行一个变量列表项,loops,for-loop,ansible,nested-loops,Loops,For Loop,Ansible,Nested Loops,我有一个Ansible剧本,可以在环境中自动进行网络更改。游戏1涉及Cisco Nexus端口通道,需要将多个VLAN从一个端口通道移动到另一个端口通道,游戏2涉及Cisco ACI,方法是在所需ACI租户内创建新的所需VLAN(创建BDs和EPG) My playbook&associates VAR文件、角色等。按预期为单个vlan执行此操作,在端口通道之间移动并创建ACI,但是当我有需要迁移的vlan ID列表时,我不需要在Nexus上执行所有vlan移动,然后以线性方法在ACI中创建所有
vlan_id:
- 78
- 79
- 80
- 81
- 82
任务片段
- name: Remove VLAN from port-channel 1
nxos_l2_interface:
name: "{{ item[0] }}"
mode: "{{ mode }}"
trunk_vlans: "{{ item[1] }}"
state: "{{ INTERFACE_REMOVE_state | default('absent') }}"
with_nested:
- "{{ INTERFACE_REMOVE_interface }}"
- "{{ vlan_id }}"
- name: Add VLAN to port-channel 20
nxos_l2_interface:
name: "{{ item[0] }}"
mode: "{{ mode }}"
trunk_vlans: "{{ item[1] }}"
state: "{{ INTERFACE_ADD_state | default('present') }}"
with_nested:
- "{{ INTERFACE_ADD_interface }}"
- "{{ vlan_id }}"
当我执行剧本时,所有vlan_id的任务1完成,然后所有vlan_id的任务2完成。
我想尝试完成第一个vlan_id的任务1和任务2,然后完成第二个vlan_id的任务1和任务2,然后完成第三个vlan_id的任务1和任务2,等等
有人有我可以使用的解决方案吗?我想我知道你在尝试什么 在嵌套的_的主体部分中使用include如何。比如:
- name: Remove and Add VLAN
include add_remove_play.yml name="{{item[0]}}" trunc_vlans="{{item[1]}}"
with_nested:
- "[ {{ INTERFACE_REMOVE_interface }}, {{ INTERFACE_ADD_interface }} ]"
- "{{ vlan_id }}"
在add_remove_play.yml中,依次对删除和添加进行编码。name和trunc_vlan将在添加_删除_播放的调用中设置经过一个不安的夜晚&起床&凌晨5点开始制定解决方案,我有一个。 使用include_roles、loop、loop_control&使用loop_var定义内部和外部变量名,我的解决方案现在可以按预期工作 剧本片段
---
# Author: Albert Short
###############################################################################
#@ Play1 Legacy environment changes
- hosts: <removed>
connection: local
gather_facts: yes
#@ The variables required for the main playbook are defined in this variable file
vars_files:
- vars/deploy.yml
tasks:
- block:
- name:
include_role:
name: combined_roles
loop: "{{ vlan_id }}"
loop_control:
extended: yes
loop_var: outer_item
...
我的角色包含我需要执行的所有平台(Cisco Nexus交换机、Cisco APIC和Cisco MSC)&所有任务的执行都是在每个VLAN的基础上完成的,而不是每个任务。i、 e.在启动VLAN 888之前,完成VLAN 666的Nexus、ACI和MSC的所有任务
成功
vlan_id:
- "666"
- "888"
- "777"
- "667"
- "889"
- "778"