mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-27 23:21:22 -07:00
DigitalOcean: new module: digital_ocean_volume_facts (#36004)
Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
1c43f7c482
commit
581a0637ba
2 changed files with 177 additions and 0 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue