@ -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
###################################