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

如何在Ansible回调插件中访问任务变量及选择任务起止回调函数

Ansible回调插件问题解答

先贴出你用到的Playbook:

---
  - name: Test Playbook
    hosts: localhost
    vars:
      hostinfo_input: "{{ lookup('file','hostinfo.json') | from_json }}"

    tasks:
    - name: Check Server
      command: python3 check.py {{item}}
      register: async_out
      async: 100
      poll: 0
      with_items: "{{hostinfo_input.hosts}}"

问题1:如何在回调函数中访问{{item}}变量?

要区分整个循环任务的生命周期和单个item的执行生命周期:

  • 若要获取单个循环item的值,只能在针对runner实例的回调方法里获取,比如v2_runner_on_start(item开始执行时)、v2_runner_on_ok(item执行成功时),直接通过event_data['item']就能拿到当前item的内容。
  • v2_playbook_on_task_start是整个循环任务的启动回调,此时还未开始执行具体item,所以拿不到单个item的值。

问题2:可使用哪些回调函数分别实现任务开始和结束时的输出操作?

分两种场景说明:

  1. 整个循环任务的开始/结束
    • 任务开始:用你猜测的v2_playbook_on_task_start(self, task, is_conditional),这个方法会在整个任务(含所有循环item)启动时触发。
    • 任务结束:用v2_playbook_on_task_end(self, task, host, start, end, runtime),但注意你的任务是异步模式(poll:0),这个回调会在任务提交到后台后立即触发,并非脚本实际执行完成的时间点。
  2. 单个循环item的开始/结束
    • item执行开始:v2_runner_on_start(self, host, task),每个item启动时触发,同时能拿到当前item的值。
    • item执行结束:根据结果状态选择,成功用v2_runner_on_ok(self, result),失败用v2_runner_on_failed(self, result, ignore_errors=False),也可以用通用的v2_runner_on_complete(self, result)覆盖所有结果状态。

关于你猜测的回调方法是否正确?

你猜测的def v2_playbook_on_task_start(self, task, is_conditional):完全正确,这个方法就是用来捕获整个任务(包括循环任务)的启动事件,适合输出任务开始的提示信息。

内容的提问来源于stack exchange,提问作者Akash-BLR

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:25:28