Skip to content

Commit

Permalink
Merge pull request #521 from openinfradev/release
Browse files Browse the repository at this point in the history
240618 release to develop ( back merge )
  • Loading branch information
ktkfree authored Jun 18, 2024
2 parents 0fdb646 + 41d0e59 commit 80f4c71
Show file tree
Hide file tree
Showing 5 changed files with 51 additions and 7 deletions.
4 changes: 2 additions & 2 deletions internal/delivery/http/policy-template.go
Original file line number Diff line number Diff line change
Expand Up @@ -716,7 +716,7 @@ func (h *PolicyTemplateHandler) Admin_DeletePolicyTemplateVersion(w http.Respons
// Admin_ExistsPolicyTemplateName godoc
//
// @Tags PolicyTemplate
// @Summary [Admin_ExistsPolicyTemplateName] 정책 템플릿 아름 존재 여부 확인
// @Summary [Admin_ExistsPolicyTemplateName] 정책 템플릿 이름 존재 여부 확인
// @Description 해당 이름을 가진 정책 템플릿이 이미 존재하는지 확인한다.
// @Accept json
// @Produce json
Expand Down Expand Up @@ -1624,7 +1624,7 @@ func (h *PolicyTemplateHandler) DeletePolicyTemplateVersion(w http.ResponseWrite
// ExistsPolicyTemplateName godoc
//
// @Tags PolicyTemplate
// @Summary [ExistsPolicyTemplateName] 정책 템플릿 아름 존재 여부 확인
// @Summary [ExistsPolicyTemplateName] 정책 템플릿 이름 존재 여부 확인
// @Description 해당 이름을 가진 정책 템플릿이 이미 존재하는지 확인한다.
// @Accept json
// @Produce json
Expand Down
21 changes: 19 additions & 2 deletions internal/policy-template/policy-template-rego.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ const (
obj_get_pattern = `object\.get\((input|input\.parameters|input\.parameters\.[^,]+), \"([^\"]+)\", [^\)]+\)`
ref_by_key_pattern = `\[\"([\w-]+)\"\]`
package_name_regex = `package ([\w\.]+)[\n\r]+`
import_regex = `import ([\w\.]+)[\n\r]+`
lib_import_regex = `import data\.lib\.([\w\.]+)[\n\r]+`
)

var (
Expand Down Expand Up @@ -620,11 +620,28 @@ func MergeRegoAndLibs(rego string, libs []string) string {
return rego
}

var re = regexp.MustCompile(import_regex)
var re = regexp.MustCompile(lib_import_regex)
var re2 = regexp.MustCompile(package_name_regex)

// data.lib import 모두 제거
result := re.ReplaceAllString(rego, "")

lib_imports := re.FindAllStringSubmatch(rego, -1)

// data.lib import 시 data.lib.<라이브러리 이름>인 경우 소스에서 <라이브러리 이름>.<정책 이름>으로 참조됨
// 이 경우 임프로를 제거했으므로 <라이브러리 이름>.<정책 이름>을 <정책 이름>으로 바꾸기 위해 제거
// <라이브러리 이름>.<정책 이름>.<규칙 이름> 등의 형식은 <규칙 이름>으로 참조되기 때문에 처리할 필요 없음
for _, lib_import := range lib_imports {
lib_and_rule := lib_import[1]

if !strings.Contains(lib_and_rule, ".") {
remove_lib_prefix := lib_and_rule + "."
fmt.Printf("'%s'\n", remove_lib_prefix)
result = strings.ReplaceAll(result, remove_lib_prefix, "")
}
}
// "<라이브러리 이름>." 제거 로직 끝

for _, lib := range processLibs(libs) {
result += re2.ReplaceAllString(lib, "")
}
Expand Down
4 changes: 2 additions & 2 deletions internal/repository/policy-template.go
Original file line number Diff line number Diff line change
Expand Up @@ -137,7 +137,7 @@ func (r *PolicyTemplateRepository) FetchForOrganization(ctx context.Context, org
_, res := pg.Fetch(r.db.WithContext(ctx).
Preload("SupportedVersions", func(db *gorm.DB) *gorm.DB {
// 최신 버전만
return db.Order("policy_template_supported_versions.version DESC")
return db.Order("policy_template_supported_versions.created_at DESC")
}).
Preload("Creator").Preload("Updator"). // organization을 기준으로 조회할 때에는 PermittedOrganizations는 로딩하지 않아도 됨
Model(&model.PolicyTemplate{}).
Expand Down Expand Up @@ -274,7 +274,7 @@ func (r *PolicyTemplateRepository) GetBy(ctx context.Context, key string, value
res := r.db.WithContext(ctx).
Preload("SupportedVersions", func(db *gorm.DB) *gorm.DB {
// 최신 버전만
return db.Order("policy_template_supported_versions.version DESC").Limit(1)
return db.Order("policy_template_supported_versions.created_at DESC").Limit(1)
}).
Preload("PermittedOrganizations").Preload("Creator").Preload("Updator").
Where(query, value).
Expand Down
27 changes: 27 additions & 0 deletions internal/usecase/policy-template.go
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,33 @@ func (u *PolicyTemplateUsecase) Get(ctx context.Context, organizationId *string,
}
}

if organizationId != nil {
(*policyTemplate).LatestVersion = policyTemplate.Version

var primaryClusterId string

org, err := u.organizationRepo.Get(ctx, *organizationId)

if err != nil {
log.Errorf(ctx, "error is :%s(%T)", err.Error(), err)
} else {
// 에러 없이 primaryClusterId를 가져왔을 때만 처리
primaryClusterId = org.PrimaryClusterId

templateCR, err := policytemplate.GetTksPolicyTemplateCR(ctx, primaryClusterId, policyTemplate.ResoureName())

if err == nil && templateCR != nil {
(*policyTemplate).CurrentVersion = templateCR.Spec.Version
} else if errors.IsNotFound(err) || templateCR == nil {
// 템플릿이 존재하지 않으면 최신 버전으로 배포되므로
(*policyTemplate).CurrentVersion = policyTemplate.LatestVersion
} else {
// 통신 실패 등 기타 에러, 버전을 세팅하지 않아 에러임을 알수 있도록 로그를 남김
log.Errorf(ctx, "error is :%s(%T)", err.Error(), err)
}
}
}

return policyTemplate, nil
}

Expand Down
2 changes: 1 addition & 1 deletion pkg/domain/policy-template.go
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,7 @@ type CreatePolicyTemplateVersionResponse struct {
}

type GetPolicyTemplateResponse struct {
PolicyTemplate PolicyTemplateResponse `json:"policyTemplate"`
PolicyTemplate PolicyTemplateTwoVersionResponse `json:"policyTemplate"`
}

type ListPolicyTemplateResponse struct {
Expand Down

0 comments on commit 80f4c71

Please sign in to comment.