11from typing import Optional
22
3+ from ..controllers .rgw import RgwRESTController
34from ..security import Scope
45from ..services .rgw_iam import RgwAccounts
56from ..tools import str_to_bool
89
910@APIRouter ('rgw/accounts' , Scope .RGW )
1011@APIDoc ("RGW User Accounts API" , "RgwUserAccounts" )
11- class RgwUserAccountsController (RESTController ):
12+ class RgwUserAccountsController (RgwRESTController ):
1213 @EndpointDoc ("Update RGW account info" ,
1314 parameters = {'account_name' : (str , 'Account name' ),
1415 'email' : (str , 'Email' ),
@@ -17,12 +18,13 @@ class RgwUserAccountsController(RESTController):
1718 'max_users' : (int , 'Max users' ),
1819 'max_roles' : (int , 'Max roles' ),
1920 'max_group' : (int , 'Max groups' ),
20- 'max_access_keys' : (int , 'Max access keys' )})
21+ 'max_access_keys' : (int , 'Max access keys' ),
22+ 'daemon_name' : (str , 'Name of the daemon' )})
2123 @allow_empty_body
2224 def create (self , account_name : str , tenant : Optional [str ] = None ,
2325 email : Optional [str ] = None , max_buckets : Optional [int ] = None ,
2426 max_users : Optional [int ] = None , max_roles : Optional [int ] = None ,
25- max_group : Optional [int ] = None ,
27+ max_group : Optional [int ] = None , daemon_name = None ,
2628 max_access_keys : Optional [int ] = None ):
2729 """
2830 Create an account
@@ -31,38 +33,64 @@ def create(self, account_name: str, tenant: Optional[str] = None,
3133 :return: Returns account resource.
3234 :rtype: Dict[str, Any]
3335 """
34- return RgwAccounts .create_account (account_name , tenant , email ,
35- max_buckets , max_users , max_roles ,
36- max_group , max_access_keys )
36+ params = {'name' : account_name }
37+ if tenant :
38+ params ['tenant' ] = tenant
39+ if email :
40+ params ['email' ] = email
41+ if max_buckets :
42+ params ['max-buckets' ] = str (max_buckets )
43+ if max_users :
44+ params ['max-users' ] = str (max_users )
45+ if max_roles :
46+ params ['max-roles' ] = str (max_roles )
47+ if max_group :
48+ params ['max-group' ] = str (max_group )
49+ if max_access_keys :
50+ params ['max-access-keys' ] = str (max_access_keys )
3751
38- def list (self , detailed : bool = False ):
52+ result = self .proxy (daemon_name , 'POST' , 'account' , params )
53+ return result
54+
55+ def list (self , daemon_name = None , detailed : bool = False ):
3956 """
4057 List all account ids or all detailed account info based on the 'detailed' query parameter.
4158
4259 - If detailed=True, returns detailed account info.
4360 - If detailed=False, returns only account ids.
4461 """
4562 detailed = str_to_bool (detailed )
46- return RgwAccounts .get_accounts (detailed )
63+ account_list = RgwAccounts .get_accounts ()
64+ detailed_account_list = []
65+ if detailed :
66+ for account in account_list :
67+ detailed_account_list .append (self .get_account (account , daemon_name ))
68+ return detailed_account_list
69+ return account_list
4770
4871 @EndpointDoc ("Get RGW Account by id" ,
49- parameters = {'account_id' : (str , 'Account id' )})
50- def get (self , account_id : str ):
72+ parameters = {'account_id' : (str , 'Account id' ),
73+ 'daemon_name' : (str , 'Name of the daemon' )})
74+ def get (self , account_id : str , daemon_name = None ):
5175 """
5276 Get an account by account id
5377 """
54- return RgwAccounts .get_account (account_id )
78+ return self .get_account (account_id , daemon_name )
79+
80+ def get_account (self , account_id , daemon_name = None ) -> dict :
81+ return self .proxy (daemon_name , 'GET' , 'account' , {'id' : account_id })
5582
5683 @EndpointDoc ("Delete RGW Account" ,
57- parameters = {'account_id' : (str , 'Account id' )})
58- def delete (self , account_id ):
84+ parameters = {'account_id' : (str , 'Account id' ),
85+ 'daemon_name' : (str , 'Name of the daemon' )})
86+ def delete (self , account_id , daemon_name = None ):
5987 """
6088 Removes an account
6189
6290 :param account_id: account identifier
6391 :return: None.
6492 """
65- return RgwAccounts . delete_account ( account_id )
93+ return self . proxy ( daemon_name , 'DELETE' , 'account' , { 'id' : account_id }, json_response = False )
6694
6795 @EndpointDoc ("Update RGW account info" ,
6896 parameters = {'account_id' : (str , 'Account id' ),
@@ -73,23 +101,41 @@ def delete(self, account_id):
73101 'max_users' : (int , 'Max users' ),
74102 'max_roles' : (int , 'Max roles' ),
75103 'max_group' : (int , 'Max groups' ),
76- 'max_access_keys' : (int , 'Max access keys' )})
104+ 'max_access_keys' : (int , 'Max access keys' ),
105+ 'daemon_name' : (str , 'Name of the daemon' )})
77106 @allow_empty_body
78107 def set (self , account_id : str , account_name : str ,
79108 email : Optional [str ] = None , tenant : Optional [str ] = None ,
80109 max_buckets : Optional [int ] = None , max_users : Optional [int ] = None ,
81110 max_roles : Optional [int ] = None , max_group : Optional [int ] = None ,
82- max_access_keys : Optional [int ] = None ):
111+ max_access_keys : Optional [int ] = None , daemon_name = None ):
83112 """
84113 Modifies an account
85114
86115 :param account_id: Account identifier
87116 :return: Returns modified account resource.
88117 :rtype: Dict[str, Any]
89118 """
90- return RgwAccounts .modify_account (account_id , account_name , email , tenant ,
91- max_buckets , max_users , max_roles ,
92- max_group , max_access_keys )
119+
120+ params = {'id' : account_id }
121+ if account_name :
122+ params ['name' ] = account_name
123+ if tenant :
124+ params ['tenant' ] = tenant
125+ if email :
126+ params ['email' ] = email
127+ if max_buckets :
128+ params ['max-buckets' ] = str (max_buckets )
129+ if max_users :
130+ params ['max-users' ] = str (max_users )
131+ if max_roles :
132+ params ['max-roles' ] = str (max_roles )
133+ if max_group :
134+ params ['max-group' ] = str (max_group )
135+ if max_access_keys :
136+ params ['max-access-keys' ] = str (max_access_keys )
137+
138+ return self .proxy (daemon_name , 'PUT' , 'account' , params )
93139
94140 @EndpointDoc ("Set RGW Account/Bucket quota" ,
95141 parameters = {'account_id' : (str , 'Account id' ),
0 commit comments