当条件第一次为真时,有没有办法停止循环?在下面的例子中,我希望学生的值为 betty。但目前将设置为布拉德。如果我在when条件中添加“andstudent未定义”,那么它会起作用,但是有更好的方法吗?谢谢!
---
- hosts: localhost
vars:
marks:
- name: bob
grade: a
- name: betty
grade: c
- name: jenny
grade: d
- name: brad
grade: c
tasks:
- set_fact:
student: '{{ item.name }}'
loop: '{{ marks }}'
when: item.grade == 'c'
- debug:
var: student
Run Code Online (Sandbox Code Playgroud) 示例剧本 -
---
- hosts: localhost
vars:
lesson:
name: Physics
students:
- Bob
- Joe
tasks:
- name: Display student names
debug:
msg: '{{ item }}'
loop: "{{ lesson.students }}"
when: item | default("")
Run Code Online (Sandbox Code Playgroud)
上面的剧本可以很好地输出学生姓名。
但是,如果输入发生更改(如下所示)以致未定义学生姓名,则会发生错误。如果根据下面的输入未定义列表,是否有一种简单的方法可以让剧本跳过此任务?我意识到如果输入指定Students: [],那么它会起作用,但由于此输入来自简单用户,因此他们不会知道这一点。非常感谢!
vars:
lesson:
name: Physics
students:
Run Code Online (Sandbox Code Playgroud)
错误:致命:[localhost]:失败!=> msg: '无效数据传递给''循环'',它需要一个列表,改为: 。提示:如果您传递了仅包含一个元素的列表/字典,请尝试将 Wantlist=True 添加到查找调用中或使用 q/query 而不是查找。
更新 - 我已经尝试了以下变体,但仍然遇到相同的错误 -
---
- hosts: localhost
vars:
lesson:
name: Physics
students:
tasks:
- name: Display student names variation 1
debug:
msg: '{{ item }}'
loop: "{{ …
Run Code Online (Sandbox Code Playgroud) ansible ×2