我试图根据子yml文件中任务之一的结果来迭代多个任务。
由于无法在块上循环,因此我将所有任务都包含在任务文件中,并且包括了主要剧本中的那个子文件。
main.yml:
- hosts: host01
vars:
state: "running"
tasks:
- name: include tasks file
include_tasks: ./abc.yml
when: state == "running"
with_sequence: start=1 end=3
abc.yml:
- name: get the value from the system
shell: echo something
register: out
- name: override the variable state as completed
set_fact:
state: "completed"
when: out.rc == 0
失败情况:因此,在这里,我应该迭代include任务文件,直到获得“完成”状态(最多尝试3次)。如果没有失败,那么Playbook。
成功的情况:如果out.rc结果为零,则变量状态在第一次迭代中会被“ completed”覆盖,但仍会执行两次而不是退出。
我在这里想念什么?还是我们可以根据其中一项任务的输出来迭代多个任务的方法?
答案 0 :(得分:0)
如果out.rc结果为零,则变量状态在第一次迭代中会被“已完成”覆盖,但仍会执行两次而不是退出。
何时 应用于每个迭代,而不是整个 with_sequence 循环。使用 include_tasks 模块时, 何时条件未在迭代中更新似乎是一个问题。
要基于多个任务之一( shell )
的输出来迭代多个任务
最好在外壳中实现尽可能多的逻辑(例如,循环的内部计数器具有3种状态:在这种情况下为running-interrupted-completed。)>