Skip to content

Commit

Permalink
feat: aggregate_resource_types support any (#2085)
Browse files Browse the repository at this point in the history
  • Loading branch information
zhu327 authored Jul 13, 2023
1 parent e98b20c commit 8435ad4
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 5 deletions.
2 changes: 1 addition & 1 deletion saas/backend/apps/application/base_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class AggActionSLZ(serializers.Serializer):
class BaseAggActionListSLZ(serializers.Serializer):
actions = serializers.ListField(label="操作策略", child=AggActionSLZ(label="策略"), allow_empty=False)
aggregate_resource_types = serializers.ListField(
label="聚合资源类型列表", child=AggResourceTypeSLZ(label="聚合资源类型"), allow_empty=False
label="聚合资源类型列表", child=AggResourceTypeSLZ(label="聚合资源类型"), allow_empty=True
)


Expand Down
15 changes: 11 additions & 4 deletions saas/backend/trans/policy.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
主要是将API请求里的操作或操作组合等权限数据,转换为PolicyBean或List[PolicyBean],便于进行下一步处理
"""
from collections import defaultdict
from typing import Any, Dict, List
from typing import Any, Dict, List, Optional

from pydantic.tools import parse_obj_as

Expand All @@ -34,7 +34,9 @@ class PolicyTrans:
action_biz = ActionBiz()
action_check_biz = ActionCheckBiz()

def _gen_instance_condition_by_aggregate_resources(self, aggregate_resource_types: List[Dict]) -> ConditionBean:
def _gen_instance_condition_by_aggregate_resources(
self, aggregate_resource_types: List[Dict]
) -> Optional[ConditionBean]:
"""
将操作聚合里选择的资源实例转换为Policy里资源的Condition
[{
Expand All @@ -46,6 +48,9 @@ def _gen_instance_condition_by_aggregate_resources(self, aggregate_resource_type
]
}]
"""
if not aggregate_resource_types:
return None

instance_beans: List[InstanceBean] = []
for aggregate_resource_type in aggregate_resource_types:
system_id, resource_type_id, instances = (
Expand All @@ -67,7 +72,7 @@ def _gen_instance_condition_by_aggregate_resources(self, aggregate_resource_type
return ConditionBean(instances=instance_beans, attributes=[])

def _gen_policy_by_action_and_condition(
self, action: ActionBean, condition: ConditionBean, expired_at: int
self, action: ActionBean, condition: Optional[ConditionBean], expired_at: int
) -> PolicyBean:
"""通过操作模型和选择里实例的Condition生成对应策略"""
return PolicyBean(
Expand All @@ -76,7 +81,9 @@ def _gen_policy_by_action_and_condition(
ResourceGroup(
id=gen_uuid(),
related_resource_types=[
RelatedResourceBean(system_id=rrt.system_id, type=rrt.id, condition=[condition])
RelatedResourceBean(
system_id=rrt.system_id, type=rrt.id, condition=[condition] if condition else []
)
for rrt in action.related_resource_types
],
)
Expand Down

0 comments on commit 8435ad4

Please sign in to comment.