如何在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:可使用哪些回调函数分别实现任务开始和结束时的输出操作?
分两种场景说明:
- 整个循环任务的开始/结束
- 任务开始:用你猜测的
v2_playbook_on_task_start(self, task, is_conditional),这个方法会在整个任务(含所有循环item)启动时触发。 - 任务结束:用
v2_playbook_on_task_end(self, task, host, start, end, runtime),但注意你的任务是异步模式(poll:0),这个回调会在任务提交到后台后立即触发,并非脚本实际执行完成的时间点。
- 任务开始:用你猜测的
- 单个循环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)覆盖所有结果状态。
- item执行开始:
关于你猜测的回调方法是否正确?
你猜测的def v2_playbook_on_task_start(self, task, is_conditional):完全正确,这个方法就是用来捕获整个任务(包括循环任务)的启动事件,适合输出任务开始的提示信息。
内容的提问来源于stack exchange,提问作者Akash-BLR
相关产品推荐
相关产品推荐

