Я много искал то же самое, что хотел сделать, но ничего не нашел. Итак, я здесь, чтобы спросить:
У меня есть playbook.yml, где определены некоторые задачи. Первая задача этой пьесы - проверка существования файла, и, если файл существует, я хочу выполнить только задачи, которые определены в файле tasks.yml, и прекращают выполнение задач из playbook.yml (или наоборот). Я, конечно, прежде всего прочитал документацию по Ansible. Но я все еще не понимаю, могу ли я делать именно то, что хочу, с модулями import / include_tasks (пробовал их оба).
Вопрос: "Проверка наличия файла"
A: Используйте стат. Например
- stat:
path: /etc/foo.conf
register: st
Вопрос: "Если файл существует, выполнить задачи, которые определены в файле tasks.yml"
A: Используйте include_tasks. Например
- include_tasks: tasks.yml
when: st.stat.exists
Q: "Прекратить выполнение задач из playbook.yml"
A: Используйте мета. Например
- meta: end_play
when: st.stat.exists
роли / includeandend / задачи / main.yml
---
- name: Unconditional include
include_tasks: include.yml
- name: include only if file exists
include_tasks: '{{ item }}'
vars:
params:
files:
- includeandend.yml
# query() returns a blank list for the loop if no files are found.
loop: "{{ q('first_found', params, errors='ignore') }}"
- debug:
msg: "If included, this will not execute"
роли / includeandend / задачи / include.yml
---
- debug:
msg: "In an included file. Play will continue."
роли / includeandend / задачи / includeandend.yml
---
- debug:
msg: "In an included file. Play will end now."
- meta: end_play
playbook.yml
---
- hosts: localhost
gather_facts: False
roles:
- includeandend
В Ansible обычно предполагается, что файл задач существует в данном проекте. Так напишет автор пьесы.
Моя реализация работает вокруг этого, только включая, если существует с first_found
уважать.
Из-за требования остановить playbook.yml я использую meta: end_play
.