簡體   English   中英

如何解決 Ansible 的 url 分頁循環問題?

[英]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 ,然后基於此值,我將使用一對looprange這是with_sequence的替換

那么你要知道的是,當你注冊一個命令的結果時,你已經可以從變量中訪問前面各項的結果了。
有一點需要理解,這是 Ansible 以一種非常奇特的方式創建結果的事實:

  1. 這些項目的注冊就像您根本不使用循環一樣,您可以通過注冊的變量引用前一個元素。
  2. 當您存在循環時,將在字典中創建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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM