Ansible配合loop使用register时如何提取返回结果中的stdout字段?
Ansible loop + register 场景提取stdout输出方案
output.results是列表类型,列表内的每个元素对应单次循环任务的返回结果,包含stdout、stdout_lines、item等属性,直接对整个列表调用stdout属性不会生效。
方法1:循环遍历输出每个命令的执行结果
遍历output.results列表,逐个读取每个元素的stdout属性:
- debug: msg: "命令 {{ item.item }} 执行输出:{{ item.stdout }}" loop: "{{ output.results }}"
如果需要提取多行输出的stdout_lines,替换item.stdout为item.stdout_lines即可。
方法2:批量提取所有命令的stdout为列表
使用Jinja2的map过滤器一次性提取所有结果的stdout属性,返回列表格式:
# 提取所有stdout - debug: msg: "{{ output.results | map(attribute='stdout') | list }}" # 提取所有stdout_lines - debug: msg: "{{ output.results | map(attribute='stdout_lines') | list }}"
可选:过滤特定命令的输出
如果需要获取指定命令的执行结果,可以搭配selectattr过滤器筛选:
# 仅提取date命令的stdout输出 - debug: msg: "{{ output.results | selectattr('item', 'equalto', 'date') | map(attribute='stdout') | first }}"
内容的提问来源于stack exchange,提问作者opensource engineer
相关产品推荐
相关产品推荐

