--- - name: Gather all pages of system inventory from Red Hat Insights API hosts: localhost gather_facts: false vars: insights_api_url: "https://console.redhat.com/api/inventory/v1/hosts" # Red Hat Insights Inventory API endpoint insights_api_token: "your_access_token" # Replace with your Red Hat API access token (offline token from console.redhat.com) per_page: 50 # Number of items per page (adjust as needed) all_hosts: [] # Accumulator for all host data tasks: - name: Fetch the first page to get total count uri: url: "{{ insights_api_url }}?per_page={{ per_page }}&page=1" method: GET headers: Authorization: "Bearer {{ insights_api_token }}" Accept: "application/json" return_content: true validate_certs: true register: first_page_response - name: Accumulate first page results set_fact: all_hosts: "{{ all_hosts + first_page_response.json.results }}" - name: Calculate total pages set_fact: total_pages: "{{ ((first_page_response.json.total | float / per_page) | round(0, 'ceil')) | int }}" - name: Fetch remaining pages uri: url: "{{ insights_api_url }}?per_page={{ per_page }}&page={{ item }}" method: GET headers: Authorization: "Bearer {{ insights_api_token }}" Accept: "application/json" return_content: true validate_certs: true register: page_response loop: "{{ range(2, total_pages + 1) | list }}" when: total_pages > 1 - name: Accumulate all remaining page results set_fact: all_hosts: "{{ all_hosts + item.json.results }}" loop: "{{ page_response.results }}" when: total_pages > 1 - name: Display the full inventory debug: var: all_hosts - name: Save full inventory to file copy: content: "{{ {'hosts': all_hosts} | to_nice_json }}" # Wrap in a dict for better structure dest: /root/rhel_insights_inventory_all.json # Notes: # - Obtain an offline API token from https://console.redhat.com/openshift/token # - Ensure your systems are registered with Red Hat Insights. # - For production, secure the token with ansible-vault. # - This handles pagination by calculating total pages from the first response and fetching accordingly. # - Assumes the API response includes 'total' and 'results' fields.