如何用Ansible实现A、B并发后执行任务C的DAG流水线?
解决方案
你需要先保存任务A、B的异步任务ID,新增两个独立任务等待A、B完成并获取输出,之后再执行依赖前两者输出的任务C。具体配置如下:
完整任务代码
tasks: - name: 任务A shell: cmd: "sleep 30" async: 1000 poll: 0 register: job_a # 保存异步任务A的ID - name: 任务B shell: cmd: "sleep 30" async: 1000 poll: 0 register: job_b # 保存异步任务B的ID - name: 等待任务A完成并获取输出 async_status: job: "{{ job_a.ansible_job_id }}" register: result_a until: result_a.finished retries: 10 # 根据实际超时需求调整重试次数 delay: 3 # 每3秒轮询一次任务状态 - name: 等待任务B完成并获取输出 async_status: job: "{{ job_b.ansible_job_id }}" register: result_b until: result_b.finished retries: 10 delay: 3 - name: 任务C(使用A、B的stdout数据) shell: cmd: "sleep 30 && echo 'A的输出: {{ result_a.stdout }}, B的输出: {{ result_b.stdout }}'"
关键说明
- 任务A、B通过
register字段保存异步任务的唯一ID(ansible_job_id),供后续查询任务状态使用。 - 新增的两个等待任务,通过
async_status模块轮询任务状态,until条件判断任务是否执行完成(finished为True时表示完成),retries和delay控制轮询的次数和间隔,确保等到A、B全部执行完毕。 - 任务C可直接通过
result_a.stdout和result_b.stdout调用前两个任务的输出数据,满足依赖需求。
此配置下,A、B并发执行耗时30秒,C执行耗时30秒,总耗时符合预期的60秒。
内容的提问来源于stack exchange,提问作者vetements
相关产品推荐
相关产品推荐

