Implement functionality of /cloudapi/account/listRG API method in decort_account_info module
This commit is contained in:
@@ -41,6 +41,34 @@ class DecortController(object):
|
||||
based on the requested authentication type.
|
||||
"""
|
||||
|
||||
FIELDS_FOR_SORTING_ACCOUNT_RG_LIST = [
|
||||
'createdBy',
|
||||
'createdTime',
|
||||
'deletedBy',
|
||||
'deletedTime',
|
||||
'id',
|
||||
'milestones',
|
||||
'name',
|
||||
'status',
|
||||
'updatedBy',
|
||||
'updatedTime',
|
||||
'vinses',
|
||||
]
|
||||
|
||||
RESOURCE_GROUP_STATUSES = [
|
||||
'CREATED',
|
||||
'DELETED',
|
||||
'DELETING',
|
||||
'DESTROYED',
|
||||
'DESTROYING',
|
||||
'DISABLED',
|
||||
'DISABLING',
|
||||
'ENABLED',
|
||||
'ENABLING',
|
||||
'MODELED',
|
||||
'RESTORING',
|
||||
]
|
||||
|
||||
VM_RESIZE_NOT = 0
|
||||
VM_RESIZE_DOWN = 1
|
||||
VM_RESIZE_UP = 2
|
||||
@@ -1930,7 +1958,9 @@ class DecortController(object):
|
||||
return
|
||||
|
||||
def account_find(self, account_name, account_id=0,
|
||||
resource_consumption=False, fail_if_not_found=False):
|
||||
resource_consumption=False,
|
||||
resource_groups_params: None | dict = None,
|
||||
fail_if_not_found=False):
|
||||
"""Find cloud account specified by the name and return facts about the account. Knowing account is
|
||||
required for certain cloud resource management tasks (e.g. creating new RG).
|
||||
|
||||
@@ -2012,6 +2042,13 @@ class DecortController(object):
|
||||
account_details['resource_reserved'] =\
|
||||
resource_consumption['Reserved']
|
||||
|
||||
if resource_groups_params is not None:
|
||||
account_details['resource_groups'] =\
|
||||
self.account_resource_groups(
|
||||
account_id=account_details['id'],
|
||||
**resource_groups_params
|
||||
)
|
||||
|
||||
return account_details['id'], account_details
|
||||
|
||||
def account_resource_consumption(self, account_id: int,
|
||||
@@ -2033,6 +2070,67 @@ class DecortController(object):
|
||||
" account specified.")
|
||||
self.amodule.fail_json(**self.result)
|
||||
|
||||
def account_resource_groups(
|
||||
self,
|
||||
account_id: int,
|
||||
page_number: int = 1,
|
||||
page_size: None | int = None,
|
||||
rg_id: None | int = None,
|
||||
rg_name: None | str = None,
|
||||
rg_status: None | str = None,
|
||||
sort_by_field: None | str = None,
|
||||
sort_by_asc=True,
|
||||
vins_id: None | int = None,
|
||||
vm_id: None | int = None,
|
||||
) -> list[dict]:
|
||||
self.result['waypoints'] += f' -> account_resource_groups'
|
||||
|
||||
if rg_status and not rg_status in self.RESOURCE_GROUP_STATUSES:
|
||||
self.result['msg'] = (
|
||||
f'{rg_status} is not valid RG status for filtering'
|
||||
f' account resource groups list.'
|
||||
)
|
||||
self.amodule.fail_json(**self.result)
|
||||
|
||||
sort_by = None
|
||||
if sort_by_field:
|
||||
if not sort_by_field in self.FIELDS_FOR_SORTING_ACCOUNT_RG_LIST:
|
||||
self.result['msg'] = (
|
||||
f'{sort_by_field} is not valid field for sorting'
|
||||
f' account resource groups 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,
|
||||
'name': rg_name,
|
||||
'page': page_number if page_size else None,
|
||||
'rgId': rg_id,
|
||||
'size': page_size,
|
||||
'sortBy': sort_by,
|
||||
'status': rg_status,
|
||||
'vinsId': vins_id,
|
||||
'vmId': vm_id,
|
||||
}
|
||||
|
||||
api_resp = self.decort_api_call(
|
||||
arg_req_function=requests.post,
|
||||
arg_api_name='/restmachine/cloudapi/account/listRG',
|
||||
arg_params=api_params,
|
||||
)
|
||||
|
||||
resource_groups = api_resp.json()['data']
|
||||
|
||||
for rg in resource_groups:
|
||||
rg['createdTime_readable'] = self.sec_to_dt_str(rg['createdTime'])
|
||||
rg['deletedTime_readable'] = self.sec_to_dt_str(rg['deletedTime'])
|
||||
rg['updatedTime_readable'] = self.sec_to_dt_str(rg['updatedTime'])
|
||||
|
||||
return resource_groups
|
||||
|
||||
###################################
|
||||
# GPU resource manipulation methods
|
||||
###################################
|
||||
|
||||
Reference in New Issue
Block a user