![](/img/trans.png)
[英]how to get json_query display property name in ansible playbook
[英]JSON query in Ansible Playbook failing to select desired data
我是編寫 Ansible 劇本的新手,遇到了障礙。 我正在嘗試使用 Site24x7 API 來安排維護,並且需要從監視器組列表中獲取特定 ID。 我創建了以下內容:
- name: Download Monitor Groups from Site24x7
uri:
url: https://www.site24x7.com/api/monitor_groups
method: GET
return_content: yes
headers:
Accept: "application/json; version=2.1"
Authorization: "Zoho-oauthtoken {{authtoken.json.access_token}}"
body:
return_content: yes
register: monitor_groups
- name: Get Monitor Group ID
set_fact:
monitorGroupID_query: "[?display_name=='{{hostname.stdout}}'].group_id"
- name: Assign Monitor Group ID
set_fact:
monitorGroupID: "{{ monitor_groups.json | json_query(monitor_group_id_query) }}"
- debug:
var: monitorGroupID
我的 API 調用返回如下所示的數據
"monitor_groups.json": {
"code": 0,
"data": [
{
"description": "System Generated",
"display_name": "server1",
"group_id": "319283000000505864",
"group_type": 1,
"health_threshold_count": 1,
"monitors": [
"319283000000483017"
]
},
{
"display_name": "server2",
"group_id": "319283000004701003",
"group_type": 3,
"health_threshold_count": 1,
"monitors": [
"319283000003989345",
"319283000004061005"
]
}
],
"message": "success"
}
我的查詢不斷返回一個空字符串。
任務 [分配監視器組 ID] ******************************************* ************************************************ 好的:[server1 .fdu.edu] => {"ansible_facts": {"monitorGroupID": ""}, "changed": false}
任務[調試] ********************************************** ******************************************* 好的:[server1.fdu. edu] => { "monitorGroupID": "" }
預先感謝您的幫助
單引號在 JMESPath 中的工作方式與在幾乎任何其他“查詢語言”中的工作方式不同——您需要將`
字符包裹在 JSON 文字值周圍。 此外,您的響應中的data:[]
不是隱含的,因此如果您打算使用它,則需要.json.data | json_query
.json.data | json_query
或更改您的 JMESPath 以添加data[?display...
部分
- name: Assign Monitor Group ID
set_fact:
monitorGroupID: "{{ monitor_groups.json | json_query( monitorGroupID_query ) }}"
vars:
monitorGroupID_query: 'data[?display_name==`"{{hostname.stdout}}"`].group_id'
給定hostname.stdout=server2
產量
ok: [localhost] => {"ansible_facts": {"monitorGroupID": ["319283000004701003"]}, "changed": false}
例如,給定下面的數據
monitor_groups:
json:
code: 0
data:
- description: System Generated
display_name: server1
group_id: '319283000000505864'
group_type: 1
health_threshold_count: 1
monitors:
- '319283000000483017'
- display_name: server2
group_id: '319283000004701003'
group_type: 3
health_threshold_count: 1
monitors:
- '319283000003989345'
- '319283000004061005'
message: success
創建主機名及其group_id的字典。 使用它來評估變量monitorGroupID
name_id: "{{ monitor_groups.json.data|
items2dict(key_name='display_name', value_name='group_id') }}"
monitorGroupID: "{{ name_id[hostname.stdout] }}"
給
name_id:
server1: '319283000000505864'
server2: '319283000004701003'
然后,下面的任務
- debug:
var: monitorGroupID
給
TASK [debug] **********************************************************
ok: [server1] =>
monitorGroupID: '319283000000505864'
ok: [server2] =>
monitorGroupID: '319283000004701003'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.