我搜索了很多与我想做的事情完全相同的东西,但一无所获。所以,我在这里问:
我有一个 playbook.yml,其中定义了一些任务。该剧本的第一个任务是检查文件是否存在,如果文件存在,我想执行仅有的在tasks.yml文件中定义的任务,并停止执行playbook.yml中的任务(反之亦然)。当然,我首先已经阅读了Ansible文档。但我仍然不明白我是否能够使用import/include_tasks模块(尝试了两者)准确地完成我想要做的事情。
答案1
答案2
角色/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
剧本.yml
---
- hosts: localhost
gather_facts: False
roles:
- includeandend
在 Ansible 中,通常假设给定项目中存在一个任务文件。剧本作者将以此方式编写它。
我的实现解决了这个问题,通过仅包含查找是否存在first_found
。
因为需要停止playbook.yml,所以我使用meta: end_play
。