ansible - 通过嵌套循环迭代
问题描述
该packages.yml
文件定义为:
---
- packages:
- name: Some description 1,
packageList:
- package1,
- package2,
- package3
- name: Some description 2,
package: package4
第一项包含一个字段packageList
,第二项没有它,只有package
字段。
剧本:
---
- hosts: all
become: yes
vars_files:
- packages.yml
仅当为项目定义时,如何遍历列表的所有packageList
项目。packages
packageList
以下是我如何遍历包含package
字段的项目:
- name: iteration
debug:
msg: "name: {{ item.package }}"
when: item.package is defined
with_items: "{{ packages }}"
解决方案
正如@ceving 提到的,您可以使用default
:
---
- hosts: localhost
connection: local
vars_files:
- packages.yml
tasks:
- name: iteration
debug:
msg: "name: {{ item.packageList | default([item.package]) }}"
with_items: "{{ packages }}"
如果packageList
存在,它将使用它,否则package
放入一个单元素数组以匹配的形式packageList
:
PLAY [localhost] **********************************************************************************************
TASK [Gathering Facts] ****************************************************************************************
ok: [localhost]
TASK [iteration] **********************************************************************************************
ok: [localhost] => (item=None) => {
"msg": "name: [u'package1,', u'package2,', u'package3']"
}
ok: [localhost] => (item=None) => {
"msg": "name: [u'package4']"
}
PLAY RECAP ****************************************************************************************************
localhost : ok=2 changed=0 unreachable=0 failed=0