You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 12:17:15