From 0dbaba06d48c5ac812eb4280bb1aa2f1dd2b902f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B1=88=E8=BD=A9?= Date: Wed, 31 Jan 2024 15:05:29 +0800 Subject: [PATCH] fix(region): project mapping key match at end of list (#19381) --- pkg/apis/compute/project_mappings.go | 24 ++++++++++++++++++++++++ pkg/compute/models/project_mappings.go | 2 ++ 2 files changed, 26 insertions(+) diff --git a/pkg/apis/compute/project_mappings.go b/pkg/apis/compute/project_mappings.go index 4529a6a9a3..dc3d1d107f 100644 --- a/pkg/apis/compute/project_mappings.go +++ b/pkg/apis/compute/project_mappings.go @@ -55,8 +55,30 @@ type ProjectMappingRuleInfo struct { Domain string `json:"domain"` } +func (rule ProjectMappingRuleInfo) IsWide() bool { + for _, tag := range rule.Tags { + if len(tag.Value) == 0 { + return true + } + } + return false +} + type MappingRules []ProjectMappingRuleInfo +func (rules MappingRules) Rules() MappingRules { + normal := []ProjectMappingRuleInfo{} + wide := []ProjectMappingRuleInfo{} + for _, rule := range rules { + if rule.IsWide() { + wide = append(wide, rule) + } else { + normal = append(normal, rule) + } + } + return append(normal, wide...) +} + func (rule *ProjectMappingRuleInfo) Validate() error { if len(rule.Tags) == 0 { return httperrors.NewInputParameterError("missing tags") @@ -159,6 +181,7 @@ type ProjectMappingDetails struct { type ProjectMappingCreateInput struct { apis.EnabledStatusInfrasResourceBaseCreateInput + // 根据标签key匹配的规则会默认排到列表最后 Rules MappingRules } @@ -173,6 +196,7 @@ type ProjectMappingResourceInfo struct { type ProjectMappingUpdateInput struct { apis.EnabledStatusInfrasResourceBaseUpdateInput + // 根据标签key匹配的规则会默认排到列表最后 Rules MappingRules } diff --git a/pkg/compute/models/project_mappings.go b/pkg/compute/models/project_mappings.go index 84df5f6c83..3ae95e896f 100644 --- a/pkg/compute/models/project_mappings.go +++ b/pkg/compute/models/project_mappings.go @@ -113,6 +113,7 @@ func (manager *SProjectMappingManager) ValidateCreateData( input.Rules[i].Project = tenant.Name } } + input.Rules = input.Rules.Rules() input.SetEnabled() input.Status = api.PROJECT_MAPPING_STATUS_AVAILABLE input.EnabledStatusInfrasResourceBaseCreateInput, err = manager.SEnabledStatusInfrasResourceBaseManager.ValidateCreateData(ctx, userCred, ownerId, query, input.EnabledStatusInfrasResourceBaseCreateInput) @@ -249,6 +250,7 @@ func (self *SProjectMapping) ValidateUpdateData(ctx context.Context, userCred mc input.Rules[i].Project = tenant.Name } } + input.Rules = input.Rules.Rules() input.EnabledStatusInfrasResourceBaseUpdateInput, err = self.SEnabledStatusInfrasResourceBase.ValidateUpdateData(ctx, userCred, query, input.EnabledStatusInfrasResourceBaseUpdateInput) return input, err }