mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-07 13:52:54 +00:00
DigitalOcean: new module: digital_ocean_volume_facts (#36004)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
@@ -109,3 +109,38 @@ class DigitalOceanHelper:
|
||||
),
|
||||
timeout=dict(type='int', default=30),
|
||||
)
|
||||
|
||||
def get_paginated_data(self, base_url=None, data_key_name=None, data_per_page=40, expected_status_code=200):
|
||||
"""
|
||||
Function to get all paginated data from given URL
|
||||
Args:
|
||||
base_url: Base URL to get data from
|
||||
data_key_name: Name of data key value
|
||||
data_per_page: Number results per page (Default: 40)
|
||||
expected_status_code: Expected returned code from DigitalOcean (Default: 200)
|
||||
Returns: List of data
|
||||
|
||||
"""
|
||||
page = 1
|
||||
has_next = True
|
||||
ret_data = []
|
||||
status_code = None
|
||||
response = None
|
||||
while has_next or status_code != expected_status_code:
|
||||
required_url = "{0}page={1}&per_page={2}".format(base_url, page, data_per_page)
|
||||
response = self.get(required_url)
|
||||
status_code = response.status_code
|
||||
# stop if any error during pagination
|
||||
if status_code != expected_status_code:
|
||||
break
|
||||
page += 1
|
||||
ret_data.extend(response.json[data_key_name])
|
||||
has_next = "pages" in response.json["links"] and "next" in response.json["links"]["pages"]
|
||||
|
||||
if status_code != expected_status_code:
|
||||
msg = "Failed to fetch %s from %s" % (data_key_name, base_url)
|
||||
if response:
|
||||
msg += " due to error : %s" % response.json['message']
|
||||
self.module.fail_json(msg=msg)
|
||||
|
||||
return ret_data
|
||||
|
||||
Reference in New Issue
Block a user