我是撰寫 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": "" }
預先感謝您的幫助
uj5u.com熱心網友回復:
單引號在 JMESPath 中的作業方式與在幾乎任何其他“查詢語言”中的作業方式不同——您需要將`
字符包裹在 JSON 文字值周圍。此外,data:[]
您的回復中沒有暗示,所以如果您打算使用它,您需要.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}
uj5u.com熱心網友回復:
例如,給定下面的資料
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'
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/484853.html
上一篇:制作JSAPI:array.includes(key)未按預期作業
下一篇:無法使用谷歌appscript中的CoinMarketCapapi端點“/v1/cryptocurrency/quotes/latest”回傳報價中的價格詳細資訊