解决和循环Ansible中正确变量的问题

时间:2019-05-13 14:38:28

标签: ansible yaml ansible-inventory

因此,使用Cisco提供的Ansible ACI网络模块来实现某些网络配置时遇到麻烦。 我想使用Ansible在EndPointGroups上自动化静态路径绑定的部署,但是我似乎无法让剧本在正确的时间使用正确的变量。

我正在使用“主”变量/清单文件,在其中声明我的所有配置都可以在剧本本身中使用。看起来如下,(为了便于阅读,将其缩短了一点)

endpoints:
  # First Endpoint
  - tenant: Some_Tenant
    ap: Some_Ap
    deploy_immediacy: Some_Immediacy
    interface_mode: Some_Mode
    interface_type: Som_Type
    pod_id: 1
    leafs: 20
    interface: '1/1'
    epg:
      - EPG_1
      - EPG_2
  #Second Endpoint
  - tenant: Some_Tenant
    ap: Some_Ap
    deploy_immediacy: Some_Immediacy
    interface_mode: Some_Mode
    interface_type: Som_Type
    pod_id: 1
    leafs: 20
    interface: '1/2'
    epg:
      - EPG_1
      - EPG_3

如您目前所见,我有两个“端点”,其中包含一些由网络模块用来执行配置的参数。除此之外,您还看到每个“端点”都有一个“ epg”,我要在其上配置所提供的端点。换句话说,请使用提供的参数配置EPG 1和2,并使用其他端点参数配置EPG 1和3。

当然,如果没有剧本,您什么也做不了,所以这就是我的样子(为了便于阅读,将其缩短了一点)

---
- name: Deploy endpoint static path bindings
  aci_static_binding_to_epg:
    tenant: '{{ endpoints.0.tenant  }}'
    ap: '{{ endpoints.0.ap }}'
    epg: '{{ item.1 }}'
    encap_id: '{{ item.1 | regex_replace(''^|_EPG$'', '''') | int }}'
    deploy_immediacy: '{{ endpoints.0.deploy_immediacy }}'
    interface_mode: '{{ endpoints.0.interface_mode  }}'
    interface_type: '{{ endpoints.0.interface_type  }}'
    pod_id: '{{ endpoints.0.pod_id  }}'
    leafs: '{{ endpoints.0.leafs  }}'
    interface: '{{ endpoints.0.interface }}'
    state: present
  delegate_to: localhost
  loop: "{{ endpoints|subelements('epg') }}"

现在,剧本实际上可以运行并且在功能上可以正确执行所有操作,但事实是他没有在正确的时间使用正确的变量。 例如,当我运行剧本时,第一个端点将按照清单中的定义进行部署(端口1将在EPG 1和2上进行配置)。但是在第二个问题开始。当他想配置第二个EPG时,当他应该使用第二个端点的参数时,他使用第一个的参数。在Verbose中运行剧本时,此行为清晰可见。

任何可以帮助我或知道他为什么这样做的人?我使用循环或子元素的方式吗?

0 个答案:

没有答案