Один цикл над несколькими задачами Ansible
Я создал Ansible playbook, который создает экземпляр облака, а затем устанавливает некоторые программы на экземпляре. Я хочу запустить этот playbook несколько раз (без использования сценария bash). Можно ли использовать цикл для цикла этих двух задач вместе (т. е. один цикл для двух задач?). Все, что я смог найти до сих пор, это один цикл для каждой отдельной задачи
3 ответов
нет, в настоящее время это невозможно. with_items
работал с include
оператор в предыдущих версиях Ansible, но, к сожалению, был удален.
хотя он будет возвращен в Ansible 2.0, см. слайд 14/15 Что нового в v2-AnsibleFest London 2015
вы можете попробовать работать с ветвь 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