Skip to content

Commit

Permalink
fix: 修复配置模版文件元数据缺少字段与多余字段以及脚本管理功能优化
Browse files Browse the repository at this point in the history
  • Loading branch information
Ambition9186 committed Jul 8, 2024
1 parent 9ba4af9 commit 593c572
Show file tree
Hide file tree
Showing 12 changed files with 7,092 additions and 6,252 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,62 @@ func (s *Service) GetTemplateRevision(ctx context.Context, req *pbcs.GetTemplate
Creator: tr.GetDetail().GetCreator(),
CreateAt: tr.GetDetail().GetCreateAt(),
Md5: tr.GetDetail().GetMd5(),
IsLatest: tr.GetDetail().GetIsLatest(),
},
}, nil
}

// UpdateTemplateRevision implements pbcs.ConfigServer.
func (s *Service) UpdateTemplateRevision(ctx context.Context, req *pbcs.UpdateTemplateRevisionReq) (
*pbcs.UpdateTemplateRevisionResp, error) {
grpcKit := kit.FromGrpcContext(ctx)

res := []*meta.ResourceAttribute{
{Basic: meta.Basic{Type: meta.Biz, Action: meta.FindBusinessResource}, BizID: req.BizId},
}
if err := s.authorizer.Authorize(grpcKit, res...); err != nil {
return nil, err
}

metadata, err := s.client.provider.Metadata(grpcKit, req.Sign)
if err != nil {
logs.Errorf("validate file content uploaded failed, err: %v, rid: %s", err, grpcKit.Rid)
return nil, err
}

r := &pbds.UpdateTemplateRevisionReq{
Attachment: &pbtr.TemplateRevisionAttachment{
BizId: grpcKit.BizID,
TemplateSpaceId: req.TemplateSpaceId,
TemplateId: req.TemplateId,
},
Spec: &pbtr.TemplateRevisionSpec{
RevisionName: req.RevisionName,
RevisionMemo: req.RevisionMemo,
Name: req.Name,
Path: req.Path,
FileType: req.FileType,
FileMode: req.FileMode,
Permission: &pbci.FilePermission{
User: req.User,
UserGroup: req.UserGroup,
Privilege: req.Privilege,
},
ContentSpec: &pbcontent.ContentSpec{
Signature: req.Sign,
ByteSize: req.ByteSize,
Md5: metadata.Md5,
},
},
}
rp, err := s.client.DS.UpdateTemplateRevision(grpcKit.RpcCtx(), r)
if err != nil {
logs.Errorf("update template Revision failed, err: %v, rid: %s", err, grpcKit.Rid)
return nil, err
}

resp := &pbcs.UpdateTemplateRevisionResp{
Id: rp.Id,
}
return resp, nil
}
102 changes: 100 additions & 2 deletions bcs-services/bcs-bscp/cmd/data-service/service/template_revision.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,13 +264,21 @@ func (s *Service) GetTemplateRevision(ctx context.Context, req *pbds.GetTemplate

var revision *table.TemplateRevision
var err error
var isLatest bool
if req.RevisionName == "" {
revision, err = s.dao.TemplateRevision().GetLatesTemplateRevision(kt, req.GetBizId(), req.GetTemplateId())
revision, err = s.dao.TemplateRevision().GetLatestTemplateRevision(kt, req.GetBizId(), req.GetTemplateId())
isLatest = true
} else {
revision, err = s.dao.TemplateRevision().GetByUniqueKey(kt, req.GetBizId(), req.GetTemplateId(),
req.GetRevisionName())
latestRevision, errL := s.dao.TemplateRevision().GetLatestTemplateRevision(kt, req.GetBizId(), req.GetTemplateId())
if errL != nil {
return nil, errL
}
if latestRevision.ID <= revision.ID {
isLatest = true
}
}

if err != nil {
return nil, errf.Errorf(errf.DBOpFailed, i18n.T(kt, fmt.Sprintf("get template revision failed, err: %v", err)))
}
Expand All @@ -293,6 +301,96 @@ func (s *Service) GetTemplateRevision(ctx context.Context, req *pbds.GetTemplate
Creator: revision.Revision.Creator,
CreateAt: revision.Revision.CreatedAt.Format(time.RFC3339),
Md5: revision.Spec.ContentSpec.Md5,
IsLatest: isLatest,
},
}, nil
}

// UpdateTemplateRevision implements pbds.DataServer.
func (s *Service) UpdateTemplateRevision(ctx context.Context, req *pbds.UpdateTemplateRevisionReq) (
*pbds.CreateResp, error) {
kt := kit.FromGrpcContext(ctx)

if _, err := s.dao.TemplateRevision().GetByUniqueKey(kt, req.Attachment.BizId, req.Attachment.TemplateId,
req.Spec.RevisionName); err == nil {
return nil, fmt.Errorf("template revision's same revision name %s already exists", req.Spec.RevisionName)
}

template, err := s.dao.Template().GetByID(kt, req.Attachment.BizId, req.Attachment.TemplateId)
if err != nil {
logs.Errorf("get template by id failed, err: %v, rid: %s", err, kt.Rid)
return nil, err
}

tx := s.dao.GenQuery().Begin()

// 1. create template revision
spec := req.Spec.TemplateRevisionSpec()
// if no revision name is specified, generate it by system
if spec.RevisionName == "" {
spec.RevisionName = tools.GenerateRevisionName()
}
spec.RevisionMemo = ""
// keep the revision's name and path same with template
spec.Name = template.Spec.Name
spec.Path = template.Spec.Path
templateRevision := &table.TemplateRevision{
Spec: spec,
Attachment: req.Attachment.TemplateRevisionAttachment(),
Revision: &table.CreatedRevision{
Creator: kt.User,
},
}
id, err := s.dao.TemplateRevision().CreateWithTx(kt, tx, templateRevision)
if err != nil {
logs.Errorf("create template revision failed, err: %v, rid: %s", err, kt.Rid)
if rErr := tx.Rollback(); rErr != nil {
logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid)
}
return nil, err
}

// update template
err = s.dao.Template().UpdateWithTx(kt, tx, &table.Template{
ID: template.ID,
Spec: &table.TemplateSpec{
Memo: req.Spec.RevisionMemo,
},
Attachment: template.Attachment,
Revision: &table.Revision{
Reviser: kt.User,
UpdatedAt: time.Now().UTC(),
},
})
if err != nil {
if rErr := tx.Rollback(); rErr != nil {
logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid)
}
return nil, err
}

// 2. update app template bindings if necessary
atbs, err := s.dao.TemplateBindingRelation().
ListLatestTmplBoundUnnamedApps(kt, req.Attachment.BizId, req.Attachment.TemplateId)
if err != nil {
logs.Errorf("list latest template bound app template bindings failed, err: %v, rid: %s", err, kt.Rid)
return nil, err
}
if len(atbs) > 0 {
for _, atb := range atbs {
if e := s.CascadeUpdateATB(kt, tx, atb); e != nil {
logs.Errorf("cascade update app template binding failed, err: %v, rid: %s", e, kt.Rid)
if rErr := tx.Rollback(); rErr != nil {
logs.Errorf("transaction rollback failed, err: %v, rid: %s", rErr, kt.Rid)
}
return nil, e
}
}
}

if e := tx.Commit(); e != nil {
logs.Errorf("commit transaction failed, err: %v, rid: %s", e, kt.Rid)
return nil, e
}
return &pbds.CreateResp{Id: id}, nil
}
3 changes: 2 additions & 1 deletion bcs-services/bcs-bscp/pkg/dal/dao/hook.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,8 @@ func (dao *hookDao) ListWithRefer(kit *kit.Kit, opt *types.ListHooksWithReferOpt
q = q.Where(rawgen.Cond(datatypes.JSONArrayQuery("tags").Contains(opt.Tag))...)
} else if opt.NotTag {
// when the length of tags is 2, it must be '[]'
q = q.Where(h.Tags.Length().Eq(2))
// It could also be null
q = q.Where(h.Tags.Length().Eq(2)).Or(h.Tags.Length().Eq(4))
}

if opt.SearchKey != "" {
Expand Down
41 changes: 41 additions & 0 deletions bcs-services/bcs-bscp/pkg/dal/dao/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ type Template interface {
CreateWithTx(kit *kit.Kit, tx *gen.QueryTx, template *table.Template) (uint32, error)
// Update one template's info.
Update(kit *kit.Kit, template *table.Template) error
// UpdateWithTx Update one template instance with transaction.
UpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, template *table.Template) error
// List templates with options.
List(kit *kit.Kit, bizID, templateSpaceID uint32, s search.Searcher,
opt *types.BasePage, topIds []uint32, searchValue string) ([]*table.Template, int64, error)
Expand Down Expand Up @@ -69,6 +71,45 @@ type templateDao struct {
auditDao AuditDao
}

// UpdateWithTx Update one template instance with transaction.
func (dao *templateDao) UpdateWithTx(kit *kit.Kit, tx *gen.QueryTx, g *table.Template) error {
if err := g.ValidateUpdate(); err != nil {
return err
}

// 更新操作, 获取当前记录做审计
m := tx.Template
q := tx.Template.WithContext(kit.Ctx)
oldOne, err := q.Where(m.ID.Eq(g.ID), m.BizID.Eq(g.Attachment.BizID)).Take()
if err != nil {
return err
}

ad := dao.auditDao.DecoratorV2(kit, g.Attachment.BizID).PrepareUpdate(g, oldOne)
if err := ad.Do(tx.Query); err != nil {
return err
}

if _, err := q.Where(m.BizID.Eq(g.Attachment.BizID), m.ID.Eq(g.ID)).
Select(m.Memo, m.Reviser, m.UpdatedAt).Updates(g); err != nil {
return err
}

return nil
}

// ListByExclusionIDs list templates by template exclusion ids.
func (dao *templateDao) ListByExclusionIDs(kit *kit.Kit, ids []uint32) ([]*table.Template, error) {
m := dao.genQ.Template
q := dao.genQ.Template.WithContext(kit.Ctx)
result, err := q.Where(m.ID.NotIn(ids...)).Find()
if err != nil {
return nil, err
}

return result, nil
}

// ListTemplateByTuple 按照多个字段in查询template 列表
func (dao *templateDao) ListTemplateByTuple(kit *kit.Kit, data [][]interface{}) ([]*table.Template, error) {
m := dao.genQ.Template
Expand Down
8 changes: 4 additions & 4 deletions bcs-services/bcs-bscp/pkg/dal/dao/template_revision.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ type TemplateRevision interface {
BatchCreateWithTx(kit *kit.Kit, tx *gen.QueryTx, revisions []*table.TemplateRevision) error
// ListLatestRevisionsGroupByTemplateIds Lists the latest version groups by template ids
ListLatestRevisionsGroupByTemplateIds(kit *kit.Kit, templateIDs []uint32) ([]*table.TemplateRevision, error)
// GetLatesTemplateRevision get lates template revision.
GetLatesTemplateRevision(kit *kit.Kit, bizID, templateID uint32) (*table.TemplateRevision, error)
// GetLatestTemplateRevision get latest template revision.
GetLatestTemplateRevision(kit *kit.Kit, bizID, templateID uint32) (*table.TemplateRevision, error)
}

var _ TemplateRevision = new(templateRevisionDao)
Expand All @@ -66,8 +66,8 @@ type templateRevisionDao struct {
auditDao AuditDao
}

// GetLatesTemplateRevision get lates template revision.
func (dao *templateRevisionDao) GetLatesTemplateRevision(kit *kit.Kit, bizID uint32, templateID uint32) (
// GetLatestTemplateRevision get latest template revision.
func (dao *templateRevisionDao) GetLatestTemplateRevision(kit *kit.Kit, bizID uint32, templateID uint32) (
*table.TemplateRevision, error) {
m := dao.genQ.TemplateRevision
q := dao.genQ.TemplateRevision.WithContext(kit.Ctx)
Expand Down
Loading

0 comments on commit 593c572

Please sign in to comment.