如何根据条件循环执行多个任务

时间:2019-06-19 13:50:14

标签: ansible ansible-2.x ansible-facts

我试图根据子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”覆盖,但仍会执行两次而不是退出。

我在这里想念什么?还是我们可以根据其中一项任务的输出来迭代多个任务的方法?

1 个答案:

答案 0 :(得分:0)

  

如果out.rc结果为零,则变量状态在第一次迭代中会被“已完成”覆盖,但仍会执行两次而不是退出

何时 应用于每个迭代,而不是整个 with_sequence 循环。使用 include_tasks 模块时, 何时条件未在迭代中更新似乎是一个问题。

  

要基于多个任务之一( shell

的输出
来迭代多个任务

最好在外壳中实现尽可能多的逻辑(例如,循环的内部计数器具有3种状态:在这种情况下为running-interrupted-completed。)