Skip to content

Commit 91fe1b1

Browse files
committed
fix: fix reset api for data source account
1 parent 52754e9 commit 91fe1b1

File tree

5 files changed

+54
-42
lines changed

5 files changed

+54
-42
lines changed

src/spaceone/cost_analysis/manager/cost_manager.py

+4
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ def _rollback(vo: Cost):
6060
if v_workspace_id:
6161
params["workspace_id"] = v_workspace_id
6262

63+
_LOGGER.debug(
64+
f"[create_cost] v-workspace_id:{v_workspace_id}, v-workspace_id: {workspace_id}"
65+
)
66+
6367
params = self.data_source_rule_mgr.change_cost_data(params, workspace_id)
6468

6569
cost_vo: Cost = self.cost_model.create(params)

src/spaceone/cost_analysis/manager/data_source_account_manager.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -96,12 +96,15 @@ def get_workspace_id_from_account_id(
9696
if use_account_routing:
9797
account_match_key_value = plugin_info_metadata.get("account_match_key")
9898
if account_match_key_value:
99-
ds_account_vo = self.get_data_source_account(
100-
data_source_id, account_match_key_value, domain_id
99+
ds_account_vos = self.filter_data_source_accounts(
100+
data_source_id=data_source_id,
101+
account_id=account_match_key_value,
102+
domain_id=domain_id,
101103
)
102-
103-
workspace_id = ds_account_vo.workspace_id
104-
v_workspace_id = ds_account_vo.v_workspace_id
104+
if ds_account_vos.count() > 0:
105+
ds_account_vo = ds_account_vos[0]
106+
workspace_id = ds_account_vo.workspace_id
107+
v_workspace_id = ds_account_vo.v_workspace_id
105108

106109
return workspace_id, v_workspace_id
107110

src/spaceone/cost_analysis/manager/data_source_rule_manager.py

+17-17
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def delete_data_source_rule_by_vo(data_source_rule_vo):
6666
data_source_rule_vo.delete()
6767

6868
def get_data_source_rule(
69-
self, data_source_rule_id: str, domain_id: str, workspace_id: str = None
69+
self, data_source_rule_id: str, domain_id: str, workspace_id: str = None
7070
):
7171
conditions = {
7272
"data_source_rule_id": data_source_rule_id,
@@ -106,11 +106,11 @@ def change_cost_data(self, cost_data: dict, workspace_id: str = None) -> dict:
106106
return cost_data
107107

108108
def _apply_data_source_rule_to_cost_data(
109-
self,
110-
cost_data: dict,
111-
data_source_rule_vos: QuerySet,
112-
domain_id: str,
113-
workspace_id: str = None,
109+
self,
110+
cost_data: dict,
111+
data_source_rule_vos: QuerySet,
112+
domain_id: str,
113+
workspace_id: str = None,
114114
):
115115
for data_source_rule_vo in data_source_rule_vos:
116116
is_match = self._change_cost_data_by_rule(cost_data, data_source_rule_vo)
@@ -128,11 +128,11 @@ def _apply_data_source_rule_to_cost_data(
128128
return cost_data
129129

130130
def _change_cost_data_with_actions(
131-
self,
132-
cost_data: dict,
133-
actions: dict,
134-
domain_id: str,
135-
workspace_id: str = None,
131+
self,
132+
cost_data: dict,
133+
actions: dict,
134+
domain_id: str,
135+
workspace_id: str = None,
136136
):
137137
for action, value in actions.items():
138138
if action == "change_project" and value:
@@ -148,7 +148,7 @@ def _change_cost_data_with_actions(
148148
)
149149
if project_info:
150150
cost_data["project_id"] = project_info["project_id"]
151-
if not workspace_id:
151+
if cost_data.get("workspace_id") is None:
152152
cost_data["workspace_id"] = project_info["workspace_id"]
153153

154154
elif action == "match_service_account" and value:
@@ -164,7 +164,7 @@ def _change_cost_data_with_actions(
164164
"service_account_id"
165165
]
166166
cost_data["project_id"] = service_account_info.get("project_id")
167-
if not workspace_id:
167+
if cost_data.get("workspace_id") is None:
168168
cost_data["workspace_id"] = service_account_info.get(
169169
"workspace_id"
170170
)
@@ -176,11 +176,11 @@ def _change_cost_data_with_actions(
176176
return cost_data
177177

178178
def _get_service_account(
179-
self, target_key, target_value, domain_id: str, workspace_id: str = None
179+
self, target_key, target_value, domain_id: str, workspace_id: str = None
180180
):
181181
if (
182-
f"service-account:{domain_id}:{target_key}:{target_value}"
183-
in self._service_account_info
182+
f"service-account:{domain_id}:{target_key}:{target_value}"
183+
in self._service_account_info
184184
):
185185
return self._service_account_info[
186186
f"service-account:{domain_id}:{target_key}:{target_value}"
@@ -212,7 +212,7 @@ def _get_service_account(
212212
return service_account_info
213213

214214
def _get_project(
215-
self, target_key, target_value, domain_id: str, workspace_id: str = None
215+
self, target_key, target_value, domain_id: str, workspace_id: str = None
216216
):
217217
if f"project:{domain_id}:{target_key}:{target_value}" in self._project_info:
218218
return self._project_info[

src/spaceone/cost_analysis/model/data_source_account/request.py

+1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class DataSourceAccountUpdateRequest(BaseModel):
1919

2020
class DataSourceAccountResetRequest(BaseModel):
2121
data_source_id: str
22+
account_id: Union[str, None] = None
2223
workspace_id: Union[str, None] = None
2324
domain_id: str
2425

src/spaceone/cost_analysis/service/data_source_account_service.py

+24-20
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,23 @@ def update(
7171
permission="cost-analysis:DataSourceAccount.write",
7272
role_types=["DOMAIN_ADMIN", "WORKSPACE_OWNER"],
7373
)
74+
@convert_model
7475
def reset(
7576
self, params: DataSourceAccountResetRequest
7677
) -> Union[DataSourceAccountsResponse, dict]:
7778
"""Reset data source account
7879
Args:
7980
params (dict): {
8081
'data_source_id': 'str', # required
82+
'account_id': 'str', # optional
8183
'workspace_id': 'str', # injected from auth
8284
'domain_id': 'str' # injected from auth
8385
}
8486
Returns:
8587
dict
8688
"""
8789
data_source_id = params.data_source_id
90+
account_id = params.account_id
8891
workspace_id = params.workspace_id
8992
domain_id = params.domain_id
9093

@@ -93,40 +96,41 @@ def reset(
9396
data_source_id, domain_id, workspace_id
9497
)
9598

96-
query = {
97-
"filter": [
98-
{"k": "data_source_id", "v": data_source_id, "o": "eq"},
99-
{"k": "domain_id", "v": domain_id, "o": "eq"},
100-
]
99+
conditions = {
100+
"data_source_id": data_source_id,
101+
"domain_id": domain_id,
101102
}
102-
if data_source_vo.resource_group == "WORKSPACE":
103-
query["filter"].append({"k": "workspace_id", "v": workspace_id, "o": "eq"})
104-
105-
(
106-
data_source_account_vos,
107-
total_count,
108-
) = self.data_source_account_mgr.list_data_source_accounts(query)
109-
103+
if account_id:
104+
conditions["account_id"] = account_id
105+
if workspace_id:
106+
conditions["workspace_id"] = workspace_id
107+
108+
updated_data_source_account_vos = []
109+
data_source_account_vos = (
110+
self.data_source_account_mgr.filter_data_source_accounts(**conditions)
111+
)
110112
for data_source_account_vo in data_source_account_vos:
111113
update_params = {
112-
"project_id": None,
113-
"service_account_id": None,
114114
"is_sync": False,
115115
"updated_at": datetime.utcnow(),
116116
}
117117
if data_source_vo.resource_group == "DOMAIN":
118118
update_params["workspace_id"] = None
119-
self.data_source_account_mgr.update_data_source_account_by_vo(
120-
update_params, data_source_account_vo
119+
data_source_account_vo = (
120+
self.data_source_account_mgr.update_data_source_account_by_vo(
121+
update_params, data_source_account_vo
122+
)
121123
)
124+
updated_data_source_account_vos.append(data_source_account_vo)
122125

123126
data_source_accounts_info = [
124-
data_source_account_vo.to_dict()
125-
for data_source_account_vo in data_source_account_vos
127+
updated_data_source_account_vo.to_dict()
128+
for updated_data_source_account_vo in updated_data_source_account_vos
126129
]
127130

128131
return DataSourceAccountsResponse(
129-
results=data_source_accounts_info, total_count=total_count
132+
results=data_source_accounts_info,
133+
total_count=len(data_source_accounts_info),
130134
)
131135

132136
@transaction(

0 commit comments

Comments
 (0)