Implement functionality of the API method cloudapi/account/listDisks

This commit is contained in:
2024-07-22 13:35:59 +03:00
parent cd663a4a01
commit b73a57dd0d
3 changed files with 162 additions and 3 deletions

View File

@@ -63,6 +63,16 @@ class DecortController(object):
'vinsConnected',
]
FIELDS_FOR_SORTING_ACCOUNT_DISK_LIST = [
'id',
'name',
'pool',
'sepId',
'shareable',
'sizeMax',
'type',
]
FIELDS_FOR_SORTING_ACCOUNT_RG_LIST = [
'createdBy',
'createdTime',
@@ -2045,6 +2055,7 @@ class DecortController(object):
account_id=0,
account_name: str = '',
computes_args: None | dict = None,
disks_args: None | dict = None,
fail_if_not_found=False,
resource_consumption=False,
resource_groups_args: None | dict = None,
@@ -2064,6 +2075,12 @@ class DecortController(object):
and `**computes_args`. Result of the call will
be added to account info dict (key `computes`).
@param (None | dict) disks_args: If dict is
specified, then the method `self.account_disks`
will be called passing founded account ID
and `**disks_args`. Result of the call will
be added to account info dict (key `disks`).
@param (bool) fail_if_not_found: If `True` is specified, then
the method `self.amodule.fail_json(**self.result)` will be
called if account is not found.
@@ -2182,6 +2199,13 @@ class DecortController(object):
**vinses_args
)
if disks_args is not None:
account_details['disks'] =\
self.account_disks(
account_id=account_details['id'],
**disks_args
)
return account_details['id'], account_details
@waypoint
@@ -2406,6 +2430,57 @@ class DecortController(object):
return vinses
@waypoint
def account_disks(
self,
account_id: int,
disk_id: None | int = None,
disk_name: None | str = None,
disk_size: None | int = None,
disk_type: None | str = None,
page_number: int = 1,
page_size: None | int = None,
sort_by_asc=True,
sort_by_field: None | str = None,
) -> list[dict]:
"""
Implementation of functionality of the API method
`/cloudapi/account/listDisks`.
"""
sort_by = None
if sort_by_field:
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_DISK_LIST:
self.result['msg'] = (
f'{sort_by_field} is not valid field for sorting'
f' account disks list.'
)
self.amodule.fail_json(**self.result)
sort_by_prefix = '+' if sort_by_asc else '-'
sort_by = f'{sort_by_prefix}{sort_by_field}'
api_params = {
'accountId': account_id,
'diskId': disk_id,
'diskMaxSize': disk_size,
'name': disk_name,
'page': page_number if page_size else None,
'size': page_size,
'sortBy': sort_by,
'type': disk_type,
}
api_resp = self.decort_api_call(
arg_req_function=requests.post,
arg_api_name='/restmachine/cloudapi/account/listDisks',
arg_params=api_params,
)
disks = api_resp.json()['data']
return disks
###################################
# GPU resource manipulation methods
###################################