[英]How can I solve the url pagination loop problem with Ansible?
我需要發送一個 URL 查詢並返回 JSON 結果,然后讀取 IP、用戶名、密碼並將其用作主機。
我的問題的第一步是當我發送 URL 查詢時有多個頁面,我會將所有這些頁面上的服務器信息保存為主機,然后將這些頁面中的信息保存為主機,訪問這些服務器,然后更新它們。
URL - http://apilink/virtual-machines
頁面結果 JSON
"meta": {
"pagination": {
"count": 16,
"current_page": 1,
"links": {
"next": "http://apilink/virtual-machines?page=2"
},
"per_page": 16,
"total": 169,
"total_pages": 11
}
}
我將繼續查詢下一個 URL並且我必須將結果寫在所有返回的頁面上作為主機。
"json": {
"data": [
{
"actual_mhz": 0,
"connectionParameters": {
"data": [
{
"description": "Secure Shell",
"ip_addr": "192.168.1.1",
"port": 22,
"protocol": "SSH"
}
]
},
"hostname": "hostnameserver1",
"name": "server1",
"os": null,
"password": "xXxXxXxXX",
"status": "running",
"username": "root",
[
},
從這樣返回的結果中,我將使用 IP,用戶名,密碼作為主機,通過下一個任務訪問這些主機,並運行系統更新命令。
在這種情況下,我將執行第一個 API 調用,只是為了獲取meta.pagination.total_pages
,然后基於此值,我將使用一對loop
和range
, 這是with_sequence
的替換。
那么你要知道的是,當你注冊一個命令的結果時,你已經可以從變量中訪問前面各項的結果了。
有一點需要理解,這是 Ansible 以一種非常奇特的方式創建結果的事實:
results
鍵,然后從所有結果中填充。就像是:
- hosts: localhost
gather_facts: no
tasks:
- uri:
url: https://example.org/virtual-machines
register: number_of_pages
- uri:
url: >-
{{
api_call.json.meta.pagination.links.next
if api_call is defined else 'https://example.org/virtual-machines'
}}
loop: "{{ range(number_of_pages.json.meta.pagination.total_pages) }}"
register: api_call
- debug:
msg: "{{ api_call }}"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.