小编Gre*_*joy的帖子

Ansible:当条件第一次为真时停止循环

当条件第一次为真时,有没有办法停止循环?在下面的例子中,我希望学生的值为 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)

ansible

4
推荐指数
1
解决办法
3200
查看次数

Ansible:当列表未定义时跳过循环

示例剧本 -

---
- 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

1
推荐指数
1
解决办法
4965
查看次数

标签 统计

ansible ×2