1
1
import logging
2
+ from datetime import datetime
2
3
from typing import Dict , List , Union
3
4
4
5
from spaceone .core .error import *
11
12
from spaceone .identity .manager .project_manager import ProjectManager
12
13
from spaceone .identity .manager .resource_manager import ResourceManager
13
14
from spaceone .identity .manager .role_binding_manager import RoleBindingManager
14
- from spaceone .identity .manager .service_account_manager import \
15
- ServiceAccountManager
16
- from spaceone .identity .manager .trusted_account_manager import \
17
- TrustedAccountManager
18
- from spaceone .identity .manager .workspace_group_manager import \
19
- WorkspaceGroupManager
15
+ from spaceone .identity .manager .service_account_manager import ServiceAccountManager
16
+ from spaceone .identity .manager .trusted_account_manager import TrustedAccountManager
17
+ from spaceone .identity .manager .workspace_group_manager import WorkspaceGroupManager
20
18
from spaceone .identity .manager .workspace_manager import WorkspaceManager
21
19
from spaceone .identity .model import Workspace
22
20
from spaceone .identity .model .workspace .request import *
@@ -125,7 +123,9 @@ def change_workspace_group(
125
123
workspace_group_vo = self .workspace_group_mgr .get_workspace_group (
126
124
old_workspace_group_id , domain_id
127
125
)
128
- self ._remove_workspace_from_group (old_workspace_group_id , domain_id )
126
+ self ._remove_workspace_from_group (
127
+ workspace_id , old_workspace_group_id , domain_id
128
+ )
129
129
130
130
if is_updatable :
131
131
workspace_vo = self .workspace_mgr .update_workspace_by_vo (
@@ -141,9 +141,11 @@ def change_workspace_group(
141
141
workspace_vos = self .workspace_mgr .filter_workspaces (
142
142
workspace_group_id = old_workspace_group_id , domain_id = domain_id
143
143
)
144
- self .workspace_group_mgr .update_workspace_group_by_vo (
145
- {"workspace_count" : len (workspace_vos )}, workspace_group_vo
146
- )
144
+
145
+ if workspace_vos :
146
+ self .workspace_group_mgr .update_workspace_group_by_vo (
147
+ {"workspace_count" : len (workspace_vos )}, workspace_group_vo
148
+ )
147
149
148
150
return WorkspaceResponse (** workspace_vo .to_dict ())
149
151
@@ -299,9 +301,20 @@ def list(
299
301
"""
300
302
301
303
query = params .query or {}
302
- workspace_vos , total_count = self .workspace_mgr .list_workspaces (query )
304
+ workspace_group_id = params .workspace_group_id
305
+
306
+ if not workspace_group_id :
307
+ workspace_vos , total_count = self .workspace_mgr .list_workspaces (query )
308
+
309
+ workspaces_info = [workspace_vo .to_dict () for workspace_vo in workspace_vos ]
310
+ else :
311
+ workspaces_info , total_count = (
312
+ self .workspace_mgr .list_workspace_group_workspaces (
313
+ params .workspace_group_id ,
314
+ params .domain_id ,
315
+ )
316
+ )
303
317
304
- workspaces_info = [workspace_vo .to_dict () for workspace_vo in workspace_vos ]
305
318
return WorkspacesResponse (results = workspaces_info , total_count = total_count )
306
319
307
320
@transaction (permission = "identity:Workspace.read" , role_types = ["DOMAIN_ADMIN" ])
@@ -431,13 +444,28 @@ def _add_workspace_to_group(
431
444
domain_id ,
432
445
)
433
446
447
+ if is_updatable :
448
+ workspace_vo .changed_at = datetime .utcnow ()
449
+ self .workspace_mgr .update_workspace_by_vo (
450
+ {"changed_at" : workspace_vo .changed_at }, workspace_vo
451
+ )
452
+
434
453
return is_updatable
435
454
436
455
def _remove_workspace_from_group (
437
- self , old_workspace_group_id : str , domain_id : str
456
+ self , workspace_id : str , old_workspace_group_id : str , domain_id : str
438
457
) -> None :
439
458
self ._delete_role_bindings (old_workspace_group_id , domain_id )
440
459
460
+ if old_workspace_group_id :
461
+ workspace_vo = self .workspace_mgr .get_workspace (
462
+ workspace_id = workspace_id , domain_id = domain_id
463
+ )
464
+ workspace_vo .changed_at = datetime .utcnow ()
465
+ self .workspace_mgr .update_workspace_by_vo (
466
+ {"changed_at" : workspace_vo .changed_at }, workspace_vo
467
+ )
468
+
441
469
@staticmethod
442
470
def _delete_role_bindings (existing_workspace_group_id : str , domain_id : str ):
443
471
rb_mgr = RoleBindingManager ()
0 commit comments