Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

240618 release to develop ( back merge ) #521

Merged
merged 8 commits into from
Jun 18, 2024
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
Loading