Один цикл над несколькими задачами Ansible

Я создал Ansible playbook, который создает экземпляр облака, а затем устанавливает некоторые программы на экземпляре. Я хочу запустить этот playbook несколько раз (без использования сценария bash). Можно ли использовать цикл для цикла этих двух задач вместе (т. е. один цикл для двух задач?). Все, что я смог найти до сих пор, это один цикл для каждой отдельной задачи

3 ответов


нет, в настоящее время это невозможно. with_items работал с include оператор в предыдущих версиях Ansible, но, к сожалению, был удален.

хотя он будет возвращен в Ansible 2.0, см. слайд 14/15 Что нового в v2-AnsibleFest London 2015

enter image description here

вы можете попробовать работать с ветвь v2 от github функция должна быть доступна там.

что вы можете сделать с 1.9.1 это переместить ваши задачи в роль и ссылаться на эту роль несколько раз в вашем учебнике.


обновление:

в 2.0 вы можете использовать with_ петли и задача включает в себя (но не playbook включает), это добавляет возможность цикла над набором задач в одном кадре. Есть несколько вещей, которые вам нужно иметь в виду, включенная задача, которая имеет свой собственный with_ loop перезапишет значение специальной переменной item. Поэтому, если вы хотите получить доступ как к элементу включения, так и к элементу текущей задачи, вы должны использовать set_fact создать псевдоним для внешней один.:

- include: test.yml
  with_items:
    - 1
    - 2
    - 3

в тесте.в формате YML:

- set_fact: outer_loop="{{item}}"
- debug: msg="outer item={{outer_loop}} inner item={{item}}"
  with_items:
    - a
    - b
    - c

источник: Ansible Docs


мне удалось сделать это, рекурсивно включив тот же файл yaml на основе условия. Вот суть:https://gist.github.com/ParagDoke/5ddfc3d5647ce9b0110d1b9790090092. Эффективно, в вашем playbook, включите файл с некоторыми vars:

  - name: Invoke poller
    vars:
      some_condition: '"failed" not in response.content and response.json.status=="running"'
    include_tasks: status-poller.yml

затем в status-poller.yml, включают в себя:

- include_tasks: includes/status-poller.yml
  when: some_condition