Ansible教程:如何从字典结构中提取所有ptag字段
提取Ansible输出中所有ptag字段的方法
你的Ansible任务输出里,msg下的stdout和stdout_lines结构完全一致,核心数据路径是:msg -> stdout[0] -> TABLE_ctx -> ROW_ctx,其中ROW_ctx是包含多个字典的列表,每个字典都带有ptag字段。你之前的写法错误在于误将stdout_lines[0]当成列表,实际上它是个字典,不能用[0]索引。
下面是两种可行的提取方法:
方法1:使用json_query过滤器(推荐)
json_query通过JMESPath表达式可以直接批量提取目标字段,写法简洁高效:
- name: 提取所有ptag到列表 set_fact: all_ptags: "{{ OSPF_process_output.msg.stdout | json_query('[0].TABLE_ctx.ROW_ctx[*].ptag') }}"
执行后all_ptags会得到结果:["UNDERLAY", "TEST1", "TEST2"]。如果想用stdout_lines替换stdout,写法完全一致,因为两者结构相同。
方法2:循环遍历收集
如果不想用json_query,可以通过循环遍历ROW_ctx列表,逐个提取ptag并整合到列表中:
- name: 遍历提取ptag set_fact: all_ptags: "{{ all_ptags | default([]) + [item.ptag] }}" loop: "{{ OSPF_process_output.msg.stdout[0].TABLE_ctx.ROW_ctx }}"
执行后同样会得到包含所有ptag的列表。
内容的提问来源于stack exchange,提问作者user17314281
相关产品推荐
相关产品推荐

