From ba2ad933acd602c221697344c606372b1885746d Mon Sep 17 00:00:00 2001 From: Youngjin Jo Date: Fri, 27 Sep 2024 16:33:05 +0900 Subject: [PATCH] fix: when add a workspace from A to B, update user_count of workspaces Signed-off-by: Youngjin Jo --- .../identity/model/user_profile/request.py | 1 + .../identity/model/user_profile/response.py | 2 +- .../identity/service/user_profile_service.py | 20 +++++----- .../identity/service/workspace_service.py | 39 ++++++++++++++++--- 4 files changed, 46 insertions(+), 16 deletions(-) diff --git a/src/spaceone/identity/model/user_profile/request.py b/src/spaceone/identity/model/user_profile/request.py index 007c5ba..4d8791c 100644 --- a/src/spaceone/identity/model/user_profile/request.py +++ b/src/spaceone/identity/model/user_profile/request.py @@ -12,6 +12,7 @@ "UserProfileConfirmMFARequest", "UserProfileGetRequest", "UserProfileGetWorkspacesRequest", + "UserProfileGetWorkspaceGroupsRequest", ] diff --git a/src/spaceone/identity/model/user_profile/response.py b/src/spaceone/identity/model/user_profile/response.py index 1d3f990..c6091d2 100644 --- a/src/spaceone/identity/model/user_profile/response.py +++ b/src/spaceone/identity/model/user_profile/response.py @@ -4,7 +4,7 @@ from pydantic import BaseModel from spaceone.core import utils -__all__ = ["MyWorkspaceResponse", "MyWorkspacesResponse"] +__all__ = ["MyWorkspaceResponse", "MyWorkspacesResponse", "MyWorkspaceGroupsResponse"] from spaceone.identity.model.role_binding.response import RoleBindingResponse diff --git a/src/spaceone/identity/service/user_profile_service.py b/src/spaceone/identity/service/user_profile_service.py index 61f4f9f..f6460ad 100644 --- a/src/spaceone/identity/service/user_profile_service.py +++ b/src/spaceone/identity/service/user_profile_service.py @@ -16,21 +16,23 @@ from spaceone.identity.manager.mfa_manager.base import MFAManager from spaceone.identity.manager.role_binding_manager import RoleBindingManager from spaceone.identity.manager.role_manager import RoleManager -from spaceone.identity.manager.token_manager.local_token_manager import \ - LocalTokenManager +from spaceone.identity.manager.token_manager.local_token_manager import ( + LocalTokenManager, +) from spaceone.identity.manager.user_manager import UserManager -from spaceone.identity.manager.workspace_group_manager import \ - WorkspaceGroupManager +from spaceone.identity.manager.workspace_group_manager import WorkspaceGroupManager from spaceone.identity.manager.workspace_manager import WorkspaceManager from spaceone.identity.model.user.database import User from spaceone.identity.model.user.response import * from spaceone.identity.model.user_profile.request import * -from spaceone.identity.model.user_profile.request import \ - UserProfileGetWorkspaceGroupsRequest +from spaceone.identity.model.user_profile.request import ( + UserProfileGetWorkspaceGroupsRequest, +) from spaceone.identity.model.user_profile.response import ( - MyWorkspaceGroupsResponse, MyWorkspacesResponse) -from spaceone.identity.service.workspace_group_service import \ - WorkspaceGroupService + MyWorkspaceGroupsResponse, + MyWorkspacesResponse, +) +from spaceone.identity.service.workspace_group_service import WorkspaceGroupService _LOGGER = logging.getLogger(__name__) diff --git a/src/spaceone/identity/service/workspace_service.py b/src/spaceone/identity/service/workspace_service.py index 71e755a..0da16c2 100644 --- a/src/spaceone/identity/service/workspace_service.py +++ b/src/spaceone/identity/service/workspace_service.py @@ -12,12 +12,9 @@ from spaceone.identity.manager.project_manager import ProjectManager from spaceone.identity.manager.resource_manager import ResourceManager from spaceone.identity.manager.role_binding_manager import RoleBindingManager -from spaceone.identity.manager.service_account_manager import \ - ServiceAccountManager -from spaceone.identity.manager.trusted_account_manager import \ - TrustedAccountManager -from spaceone.identity.manager.workspace_group_manager import \ - WorkspaceGroupManager +from spaceone.identity.manager.service_account_manager import ServiceAccountManager +from spaceone.identity.manager.trusted_account_manager import TrustedAccountManager +from spaceone.identity.manager.workspace_group_manager import WorkspaceGroupManager from spaceone.identity.manager.workspace_manager import WorkspaceManager from spaceone.identity.model import Workspace from spaceone.identity.model.workspace.request import * @@ -427,6 +424,36 @@ def _add_workspace_to_group( workspace_group_id, domain_id, ) + + workspaces_info, total_count = ( + self.workspace_mgr.list_workspace_group_workspaces( + old_workspace_group_id, + domain_id, + ) + ) + for workspace_info in workspaces_info: + workspace_vo = self.workspace_mgr.get_workspace( + workspace_info["workspace_id"], domain_id + ) + user_rb_ids = self.rb_mgr.stat_role_bindings( + query={ + "distinct": "user_id", + "filter": [ + { + "k": "workspace_id", + "v": workspace_info["workspace_id"], + "o": "eq", + }, + {"k": "domain_id", "v": domain_id, "o": "eq"}, + ], + } + ).get("results", []) + user_rb_total_count = len(user_rb_ids) + + workspace_vo = self.workspace_mgr.update_workspace_by_vo( + {"user_count": user_rb_total_count}, workspace_vo + ) + workspace_info.update({"user_count": workspace_vo.user_count}) else: is_updatable = False else: