@ -77,6 +77,26 @@ class DecortController(object):
' vinses ' ,
]
FIELDS_FOR_SORTING_ACCOUNT_VINS_LIST = [
' computes ' ,
' createdBy ' ,
' createdTime ' ,
' deletedBy ' ,
' deletedTime ' ,
' externalIP ' ,
' extnetId ' ,
' freeIPs ' ,
' id ' ,
' name ' ,
' network ' ,
' priVnfDevId ' ,
' rgId ' ,
' rgName ' ,
' status ' ,
' updatedBy ' ,
' updatedTime ' ,
]
COMPUTE_TECH_STATUSES = [
' BACKUP_RUNNING ' ,
' BACKUP_STOPPED ' ,
@ -2008,6 +2028,7 @@ class DecortController(object):
resource_consumption = False ,
resource_groups_params : None | dict = None ,
computes_params : None | dict = None ,
vinses_params : None | dict = None ,
fail_if_not_found = False ) :
"""
Find account specified by account ID or name and return
@ -2036,6 +2057,12 @@ class DecortController(object):
and ` * * computes_params ` . Result of the call will
be added to account info dict ( key ` computes ` ) .
@param ( None | dict ) vinses_params : If dict is
specified , then the method ` account_vinses `
will be called passing founded account ID
and ` * * vinses_params ` . Result of the call will
be added to account info dict ( key ` vinses ` ) .
@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 .
@ -2091,6 +2118,7 @@ class DecortController(object):
return 0 , None
account_details [ ' computes_amount ' ] = account_details . pop ( ' computes ' )
account_details [ ' vinses_amount ' ] = account_details . pop ( ' vinses ' )
account_details [ ' createdTime_readable ' ] = self . sec_to_dt_str (
account_details [ ' createdTime ' ]
@ -2129,6 +2157,12 @@ class DecortController(object):
* * computes_params
)
if vinses_params is not None :
account_details [ ' vinses ' ] = self . account_vinses (
account_id = account_details [ ' id ' ] ,
* * vinses_params
)
return account_details [ ' id ' ] , account_details
@waypoint
@ -2277,6 +2311,57 @@ class DecortController(object):
return computes
@waypoint
def account_vinses (
self ,
account_id : int ,
ext_ip : None | str = None ,
page_number : int = 1 ,
page_size : None | int = None ,
rg_id : None | int = None ,
sort_by_asc = True ,
sort_by_field : None | str = None ,
vins_id : None | int = None ,
vins_name : None | str = None ,
) - > list [ dict ] :
sort_by = None
if sort_by_field :
if not sort_by_field in self . FIELDS_FOR_SORTING_ACCOUNT_VINS_LIST :
self . result [ ' msg ' ] = (
f ' { sort_by_field } is not valid field for sorting '
f ' account vins 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 ,
' extIp ' : ext_ip ,
' name ' : vins_name ,
' page ' : page_number if page_size else None ,
' rgId ' : rg_id ,
' size ' : page_size ,
' sortBy ' : sort_by ,
' vinsId ' : vins_id ,
}
api_resp = self . decort_api_call (
arg_req_function = requests . post ,
arg_api_name = ' /restmachine/cloudapi/account/listVins ' ,
arg_params = api_params ,
)
vinses = api_resp . json ( ) [ ' data ' ]
for v in vinses :
v [ ' createdTime_readable ' ] = self . sec_to_dt_str ( v [ ' createdTime ' ] )
v [ ' deletedTime_readable ' ] = self . sec_to_dt_str ( v [ ' deletedTime ' ] )
v [ ' updatedTime_readable ' ] = self . sec_to_dt_str ( v [ ' updatedTime ' ] )
return vinses
###################################
# GPU resource manipulation methods
###################################