You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ansible中对已注册变量使用json_query提取audit_action_name

如何用Ansible的json_query提取数组中所有对象的audit_action_name字段?

问题描述

我在编写Ansible角色时,通过ansible.windows.win_powershell模块获取SQL Server的审计设置详情,注册变量list_of_audit_actions后,其output字段是一个包含多个对象的数组。尝试使用json_query提取所有audit_action_name的值,但当前写法返回空结果。

测试任务:

- name: Sample Test
  debug: 
    msg: "{{list_of_audit_actions.output}}"

list_of_audit_actions.output的核心结构:

[
    {"audit_action_name": "AUDIT_CHANGE_GROUP", ...},
    {"audit_action_name": "AUDIT_CHANGE_GROUP", ...},
    {"audit_action_name": "FAILED_LOGIN_GROUP", ...}
]

错误写法:

- name: Sample Test
  debug: 
    msg: "{{list_of_audit_actions.output| community.general.json_query('audit_action_name')}}" 

问题原因

list_of_audit_actions.output是数组(列表)类型,而非单个对象。直接使用audit_action_name会尝试从数组本身提取该字段,但数组不存在这个属性,因此返回空结果。需要遍历数组内的每个元素,逐一提取每个对象的audit_action_name字段。

正确写法

使用JSONPath的数组遍历语法[*].audit_action_name,表示遍历数组中所有元素,提取每个元素的audit_action_name字段:

- name: Extract all audit_action_name values
  debug: 
    msg: "{{ list_of_audit_actions.output | community.general.json_query('[*].audit_action_name') }}"

预期结果

执行后会得到包含所有目标字段值的列表:

ok: [target_host] => {
    "msg": [
        "AUDIT_CHANGE_GROUP",
        "AUDIT_CHANGE_GROUP",
        "FAILED_LOGIN_GROUP"
    ]
}

如果需要对结果去重,可以叠加unique过滤器:

- name: Extract unique audit_action_name values
  debug: 
    msg: "{{ (list_of_audit_actions.output | community.general.json_query('[*].audit_action_name')) | unique }}"

去重后的结果:

ok: [target_host] => {
    "msg": [
        "AUDIT_CHANGE_GROUP",
        "FAILED_LOGIN_GROUP"
    ]
}

内容的提问来源于stack exchange,提问作者user12007109

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:50:33