Как зациклить несколько задач на основе условия - PullRequest
0 голосов
/ 19 июня 2019

Я пытаюсь выполнить несколько задач на основе результата одной из задач в дочернем файле 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

Случай сбоя: поэтому здесь я должен перебирать файл включаемых задач до тех пор, пока не получу состояние «завершено» (попробуйте не более трех раз). Если не подведет Playbook.

успешный случай: если out.rc приводит к нулю, состояние переменной переопределяется как «завершено» в самой первой итерации, но все равно выполняется еще два раза вместо выхода.

Что мне здесь не хватает? или как-то иначе мы можем повторять несколько задач на основе вывода одной из задач?

1 Ответ

0 голосов
/ 19 июня 2019

"Если out.rc приводит к нулю, состояние переменной переопределяется как" завершено "в самой первой итерации, но все равно ее выполнение еще два раза вместо выхода ."

A: , когда применяется к каждой итерации , а не к циклу with_sequence в целом.Похоже, проблема заключается в том, что условие , когда не обновляется на итерациях, когда используется модуль include_tasks .

"Дляповторять несколько задач на основе вывода одной из задач ( shell ) "

A: Вам лучше будет внедрить как можно больше логики в оболочке (например, внутренний счетчик циклов с 3 состояниями: в этом случае выполнение-прерывание-завершение).

...