在寻求使某些网络环境自动化的过程中,我想知道如何遍历嵌套列表中的不同项目。为了更加清楚,我将使用现有的广告资源和剧本解释我要做什么。
库存如下,(虚拟内容)
parameters:
- mode: ""
speed: ""
duplex: ""
interfaces:
- Int_One
- Int_Two
如您所见,我有一个包含一些网络信息(参数)的列表,另一个包含两个接口的列表。我要在剧本中完成的操作是使用“参数”列表中的信息来配置这两个接口。换句话说,使用“参数”列表中的信息在“接口”上循环。但是到目前为止,我无法在正确的时间使用正确的数据
很高兴知道我在剧本中使用了预定义的“思科网络模块”。
Playbook如下,
- name: Deploy Network Interfaces
"Some network module":
mode: '{{ item.0.mode }}'
speed: '{{ item.0.speed }}'
duplex: '{{ item.0.duplex }}'
interface: '{{ item.1.interfaces }}'
state: present
delegate_to: localhost
loop:
- "{{ parameters }}"
- "{{ parameters|subelements('interfaces') }}"
如您所见,网络模块要求提供“接口”。因此,我再次想遍历“接口”列表,并使用“参数”列表中定义的数据来部署它们。
能告诉我如何处理此问题的人吗?
谢谢!
答案 0 :(得分:0)
给出您的示例,以下是一种解决方案:
- hosts:
- localhost
gather_facts: False
vars:
parameters:
- mode: "auto"
speed: "1000"
duplex: "full"
interfaces:
- Int_One
- Int_Two
tasks:
- name: DBEUG
debug:
msg: >
mode: {{parameters.0.mode}},
speed: {{parameters.0.speed}},
duplex: {{parameters.0.duplex}},
interface: {{item}}
loop:
"{{interfaces}}"
答案 1 :(得分:0)
您的问题有点令人困惑。您有两个变量;名为parameters
的列表:
parameters:
- mode: ""
speed: ""
duplex: ""
还有一个名为interfaces
的列表:
interfaces:
- Int_One
- Int_Two
parameters
有一个项目,而interfaces
有两个项目。它们具有不同数量的项目这一事实使得很难弄清它们之间的关系。如果每个接口都有 unique 参数,则您可能需要这样的东西:
interfaces:
- name: Int_One
mode: ""
speed: ""
duplex: ""
- name: Int_Two
mode: ""
speed: ""
duplex: ""
在这种情况下,您将像这样编写剧本:
- name: Deploy Network Interfaces
"Some network module":
mode: '{{ item.mode }}'
speed: '{{ item.speed }}'
duplex: '{{ item.duplex }}'
interface: '{{ item.name }}'
state: present
delegate_to: localhost
loop: "{{ interfaces }}"
另一方面,如果所有接口都具有相同参数,那么您可能会像这样构造数据:
parameters:
mode: ""
speed: ""
duplex: ""
interfaces:
- Int_One
- Int_Two
然后像这样写你的剧本:
- name: Deploy Network Interfaces
"Some network module":
mode: '{{ parameters.mode }}'
speed: '{{ parameters.speed }}'
duplex: '{{ parameters.duplex }}'
interface: '{{ item.name }}'
state: present
delegate_to: localhost
loop: "{{ interfaces }}"