@ -41,6 +41,34 @@ class DecortController(object):
based on the requested authentication type .
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_NOT = 0
VM_RESIZE_DOWN = 1
VM_RESIZE_DOWN = 1
VM_RESIZE_UP = 2
VM_RESIZE_UP = 2
@ -1930,7 +1958,9 @@ class DecortController(object):
return
return
def account_find ( self , account_name , account_id = 0 ,
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
""" 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 ) .
required for certain cloud resource management tasks ( e . g . creating new RG ) .
@ -2012,6 +2042,13 @@ class DecortController(object):
account_details [ ' resource_reserved ' ] = \
account_details [ ' resource_reserved ' ] = \
resource_consumption [ ' 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
return account_details [ ' id ' ] , account_details
def account_resource_consumption ( self , account_id : int ,
def account_resource_consumption ( self , account_id : int ,
@ -2033,6 +2070,67 @@ class DecortController(object):
" account specified. " )
" account specified. " )
self . amodule . fail_json ( * * self . result )
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
# GPU resource manipulation methods
###################################
###################################