Я создал сценарий Ansible, который создает экземпляр облака, а затем устанавливает на нем некоторые программы. Я хочу запустить эту книгу несколько раз (без использования сценария bash). Можно ли использовать цикл для одновременного выполнения этих двух задач (например, один цикл для двух задач?). Все, что мне удалось найти, это один цикл для каждой отдельной задачи.
Один цикл для нескольких задач Ansible
Ответы (3)
Нет, в настоящее время это невозможно. with_items
раньше работал с оператором include
в предыдущих версиях Ansible, но, к сожалению, был удален.
Хотя он будет возвращен в Ansible 2.0, см. Слайд 14/15 в Что нового в версии 2 - AnsibleFest London 2015
Вы можете попробовать работать с веткой v2 из github, эта функция должна быть доступна там .
Что вы можете сделать с помощью 1.9.1, так это переместить свои задачи в роль и несколько раз ссылаться на эту роль в своем учебнике.
Обновление:
В 2.0 вы можете использовать
with_
циклы и включения задач (но не включения в playbook), это добавляет возможность перебирать набор задач за один раз. Следует помнить о нескольких вещах: включенная задача, имеющая собственный циклwith_
, перезапишет значение специальной переменной элемента. Поэтому, если вам нужен доступ как к элементу include, так и к элементу текущей задачи, вы должны использоватьset_fact
для создания псевдонима для внешнего элемента:
- include_tasks: test.yml
with_items:
- 1
- 2
- 3
в test.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/5ddfc3d5647ce9b011092d1b97900 Фактически, в ваш playbook включите файл с некоторыми варами:
- 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
with_items
с блоками, что похоже на это было бы идиоматическим способом сделать это. - person Nick Chammas   schedule 15.09.2017