I am writing an Ansible role to fetch current details of Audit settings from SQL Server through ansible.windoww.win_powershell
module. In doing so, I am trying to use json_query
in Ansible that has the following structure in the output but json_query
is returning empty values. Please help.
This is the Ansible task:
- name: Sample Test debug:
msg: "{{list_of_audit_actions.output}}"
This variable list_of_audit_actions.output
has this structure:
"msg": [
{
"HasErrors": false,
"ItemArray": [
"Test-Audit_Specification_SCM",
"AUDIT_CHANGE_GROUP",
"SUCCESS AND FAILURE",
"APPLICATION LOG"
],
"RowError": "",
"RowState": {
"String": "Detached",
"Type": "System.Data.DataRowState",
"Value": 1
},
"Table": {
"CaseSensitive": false,
"ChildRelations": "",
"Columns": "name audit_action_name audited_result type_desc",
"Constraints": "",
"Container": null,
"ContainsListCollection": false,
"DataSet": null,
"DefaultView": "",
"DesignMode": false,
"DisplayExpression": "",
"ExtendedProperties": "System.Data.PropertyCollection",
"HasErrors": false,
"IsInitialized": true,
"Locale": "en-GB",
"MinimumCapacity": 50,
"Namespace": "",
"ParentRelations": "",
"Prefix": "",
"PrimaryKey": "",
"RemotingFormat": 0,
"Rows": "",
"Site": null,
"TableName": ""
},
"audit_action_name": "AUDIT_CHANGE_GROUP",
"audited_result": "SUCCESS AND FAILURE",
"name": "Test-Audit_Specification_SCM",
"type_desc": "APPLICATION LOG"
},
{
"HasErrors": false,
"ItemArray": [
"TestAuditSpec1",
"AUDIT_CHANGE_GROUP",
"SUCCESS AND FAILURE",
"APPLICATION LOG"
],
"RowError": "",
"RowState": {
"String": "Detached",
"Type": "System.Data.DataRowState",
"Value": 1
},
"Table": {
"CaseSensitive": false,
"ChildRelations": "",
"Columns": "name audit_action_name audited_result type_desc",
"Constraints": "",
"Container": null,
"ContainsListCollection": false,
"DataSet": null,
"DefaultView": "",
"DesignMode": false,
"DisplayExpression": "",
"ExtendedProperties": "System.Data.PropertyCollection",
"HasErrors": false,
"IsInitialized": true,
"Locale": "en-GB",
"MinimumCapacity": 50,
"Namespace": "",
"ParentRelations": "",
"Prefix": "",
"PrimaryKey": "",
"RemotingFormat": 0,
"Rows": "",
"Site": null,
"TableName": ""
},
"audit_action_name": "AUDIT_CHANGE_GROUP",
"audited_result": "SUCCESS AND FAILURE",
"name": "TestAuditSpec1",
"type_desc": "APPLICATION LOG"
},
{
"HasErrors": false,
"ItemArray": [
"TestAuditSpec1",
"FAILED_LOGIN_GROUP",
"SUCCESS AND FAILURE",
"APPLICATION LOG"
],
"RowError": "",
"RowState": {
"String": "Detached",
"Type": "System.Data.DataRowState",
"Value": 1
},
"Table": {
"CaseSensitive": false,
"ChildRelations": "",
"Columns": "name audit_action_name audited_result type_desc",
"Constraints": "",
"Container": null,
"ContainsListCollection": false,
"DataSet": null,
"DefaultView": "",
"DesignMode": false,
"DisplayExpression": "",
"ExtendedProperties": "System.Data.PropertyCollection",
"HasErrors": false,
"IsInitialized": true,
"Locale": "en-GB",
"MinimumCapacity": 50,
"Namespace": "",
"ParentRelations": "",
"Prefix": "",
"PrimaryKey": "",
"RemotingFormat": 0,
"Rows": "",
"Site": null,
"TableName": ""
},
"audit_action_name": "FAILED_LOGIN_GROUP",
"audited_result": "SUCCESS AND FAILURE",
"name": "TestAuditSpec1",
"type_desc": "APPLICATION LOG"
}
]
}
How do I use json_query
to filter all the values of audit_action_name
in the above output?
I tried something like
- name: Sample Test
debug:
msg: "{{list_of_audit_actions.output| community.general.json_query('audit_action_name')}}"
But that does not yield anything but empty output
For building a query to use with the json_query
filter, I like to use the jp
command line tool to experiment with queries.
The contents of list_of_audit_actions.output
is a list, so a query for audit_action_name
doesn't make sense -- it's not a dictionary and does not have an audit_action_name
attribute.
We want to extract the audti_action_name
attribute from every item in the list, which we can do like this:
- debug:
var: list_of_audit_actions.output | json_query('[].audit_action_name')
Which will produce as output:
TASK [debug] ******************************************************************************************************************************************************************************************************
ok: [localhost] => {
"list_of_audit_actions.output | json_query('[].audit_action_name')": [
"AUDIT_CHANGE_GROUP",
"AUDIT_CHANGE_GROUP",
"FAILED_LOGIN_GROUP"
]
}