对于以下Ansible Console输出:
TASK [Run Ping Command] *********************************
Changed: [HostName]
TASK [Add Ping Command Results to Log] *********************************
ok: [HostName]
我如何将Changed: [HostName]
和ok: [HostName]
的输出保存到一个变量?
我尝试使用register:
,但它只是保存命令的输出,而不是在Ansible控制台打印的内容(更改,ok,跳过…)
寄存器将完成此任务,这些文本消息将根据从任务
的结果接收到的值显示假设你有这个任务:
- name: Run Ping Command
ansible.builtin.ping:
register: ping_result
变量ping_result
将具有任务
的结果。- name: Task changed
ansible.builtin.debug:
msg: "task changed"
when:
- not ping_result.skipped | default(false)
- ping_result.changed | default(false)
- name: Task failed
ansible.builtin.debug:
msg: "task failed"
when:
- not ping_result.skipped | default(false)
- ping_result.failed | default(false)
- name: Task succeeded
ansible.builtin.debug:
msg: "task succeeded"
when:
- not ping_result.skipped | default(false)
- (not ping_result.failed) | default(false)
- name: Task skipped
ansible.builtin.debug:
msg: "task skipped"
when:
- ping_result.skipped | default(false)
因为Ansible控制台输出是剧本本身之外的东西,是由Callback插件生成的,你需要
-
以某种方式实现您自己的功能,例如在这里给出的答案
-
或启用(另一个)回调插件,例如
log_plays
callback -写入剧本输出到日志文件,可以将剧本输出写入
/var/log/ansible/hosts
目录下的每个主机的文件,稍后再从另一个剧本中读取,以进行进一步处理。