如何将Ansible控制台的Changed/ok状态输出保存至变量?
问题描述
我有如下Ansible控制台输出:
TASK [Run Ping Command] ********************************* Changed: [HostName] TASK [Add Ping Command Results to Log] ********************************* ok: [HostName]
请问怎么把输出里的Changed: [HostName]和ok: [HostName]这类状态信息保存到变量里?我试过用register:,但它只保存了命令的输出内容,没保存控制台显示的Changed、ok这些状态标识。
解决方法
Ansible的
register捕获的任务结果是结构化数据,状态信息存在注册变量的属性中,而非直接存储控制台字符串:- 任务状态为
changed时,注册变量的changed属性值为true - 任务状态为
ok时,changed属性值为false - 额外还可通过
failed属性判断任务是否失败,skipped属性判断任务是否被跳过
- 任务状态为
实际示例:
- name: Run Ping Command ping: register: ping_result - name: 输出任务状态 debug: msg: "任务状态: {{ 'Changed' if ping_result.changed else 'ok' }}: [{{ inventory_hostname }}]"这里通过
ping_result.changed判断状态,拼接后就能得到和控制台格式一致的内容,也可直接将拼接结果存入新变量。若要直接生成目标格式的字符串变量,可使用
set_fact:- set_fact: ping_task_status: "{{ 'Changed' if ping_result.changed else 'ok' }}: [{{ inventory_hostname }}]"执行后
ping_task_status变量就会存储Changed: [HostName]或ok: [HostName]这类内容。
内容的提问来源于stack exchange,提问作者uncowandy
相关产品推荐
相关产品推荐

