gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:17:59 24 4
gpt4 key购买 nike

有没有办法在条件第一次为真时停止循环?在下面的例子中,我希望学生的值(value)是贝蒂。但它目前将被设置为 brad。如果我将 "and student is undefined" 添加到 when 条件,那么它将起作用,但是有更好的方法吗?谢谢!

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

最佳答案

Q: " ... when the conditional is true the first time ..."

过滤器而不是循环

还有更多选择。比如选择第一个满足条件的item

  - set_fact:
student: "{{ marks|
selectattr('grade', 'eq', 'c')|
map(attribute='name')|
first }}"

json_query 给出相同的结果

  - set_fact:
student: "{{ marks|
json_query('[?grade==`c`].name')|
first }}"

循环

当缺少合适的过滤器或数据是在循环中创建时,使用循环(迭代列表)。在这种情况下,可以跳过循环的其余部分。例如,让我们模拟迭代命令直到成功的用例。下面的任务迭代列表[1,2,3,4,5]并且命令test the item is greater than 3.满足条件后循环将跳过列表的其余部分

    - command: '[ "{{ item }}" -gt "3" ]'
loop: "{{ range(1, 5 + 1)|list }}"
register: result
ignore_errors: true
when: not condition
vars:
condition: "{{ (result|default({'rc': 1})).rc == 0 }}"
- debug:
msg: "{{ result.results|
json_query('[?rc==`0`].item')|
first }}"

给出(选定的相关部分)

failed: [localhost] (item=3) => changed=true
...
item: 3
msg: non-zero return code
rc: 1
...
changed: [localhost] => (item=4)
skipping: [localhost] => (item=5)
...ignoring

TASK [debug] ****
ok: [localhost] =>
msg: '4'

查看线程中的详细信息Looping a task until it succeeds .

关于Ansible:当条件第一次为真时停止循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63991427/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com