Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 执行多个Ansible播放,一次执行一个变量列表项_Loops_For Loop_Ansible_Nested Loops - Fatal编程技术网

Loops 执行多个Ansible播放,一次执行一个变量列表项

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中创建所有

我有一个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)并再次执行

变量片段

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"