Skip to content

Commit 2f01dd4

Browse files
committed
feat: 模板文件支持多选模板文件进行部署
1 parent 6026cf9 commit 2f01dd4

9 files changed

Lines changed: 4186 additions & 3622 deletions

File tree

bcs-services/cluster-resources/pkg/action/template/template.go

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ import (
1818
"path"
1919
"regexp"
2020
"strings"
21+
"path/filepath"
2122

2223
"github.com/Tencent/bk-bcs/bcs-common/pkg/odm/operator"
2324
"github.com/feiin/go-xss"
@@ -214,6 +215,69 @@ func (t *TemplateAction) List(ctx context.Context, templateSpaceID string) ([]ma
214215
return m, nil
215216
}
216217

218+
// ListTemplateMetadataVersions 通过模板文件夹 ID 获取模板文件列表(含版本 ID 和版本号)
219+
func (t *TemplateAction) ListTemplateMetadataVersions(ctx context.Context, spaceID string) (
220+
[]map[string]interface{}, error) {
221+
if err := t.checkAccess(ctx); err != nil {
222+
return nil, err
223+
}
224+
225+
p, err := project.FromContext(ctx)
226+
if err != nil {
227+
return nil, err
228+
}
229+
230+
templateSpace, err := t.model.GetTemplateSpace(ctx, spaceID)
231+
if err != nil {
232+
return nil, err
233+
}
234+
235+
// 权限校验
236+
if templateSpace.ProjectCode != p.Code {
237+
return nil, errorx.New(errcode.NoPerm, i18n.GetMsg(ctx, "无权限访问"))
238+
}
239+
240+
// 通过项目编码、文件夹名称检索模板元数据
241+
cond := operator.NewLeafCondition(operator.Eq, operator.M{
242+
entity.FieldKeyProjectCode: p.Code,
243+
entity.FieldKeyTemplateSpace: templateSpace.Name,
244+
})
245+
templates, err := t.model.ListTemplate(ctx, cond)
246+
if err != nil {
247+
return nil, err
248+
}
249+
250+
// 获取该文件夹下所有版本信息
251+
versions, err := t.model.ListTemplateVersion(ctx, operator.NewLeafCondition(operator.Eq, operator.M{
252+
entity.FieldKeyProjectCode: p.Code,
253+
entity.FieldKeyTemplateSpace: templateSpace.Name,
254+
}))
255+
if err != nil {
256+
return nil, err
257+
}
258+
259+
// 存放模板文件,及版本号列表
260+
m := make([]map[string]interface{}, 0)
261+
for _, value := range templates {
262+
mm := map[string]interface{}{
263+
"templateName": filepath.Join(templateSpace.Name, value.Name),
264+
"latestVersion": value.Version,
265+
"versionList": []map[string]interface{}{},
266+
}
267+
// 匹配当前模板的版本信息,填充 versionID 和 version
268+
for _, v := range versions {
269+
if v.TemplateName == value.Name {
270+
mm["versionList"] = append(mm["versionList"].([]map[string]interface{}), map[string]interface{}{
271+
"version": v.Version,
272+
"versionID": v.ID.Hex(),
273+
})
274+
}
275+
}
276+
m = append(m, mm)
277+
}
278+
return m, nil
279+
}
280+
217281
// Create xxx
218282
// nolint:funlen
219283
func (t *TemplateAction) Create(ctx context.Context, req *clusterRes.CreateTemplateMetadataReq) (

bcs-services/cluster-resources/pkg/handler/templateset/template_set.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,20 @@ func (h *Handler) ListTemplateMetadata(
167167
return nil
168168
}
169169

170+
// ListTemplateMetadataVersions 通过模板文件夹 ID 获取模板文件列表(含版本信息)
171+
func (h *Handler) ListTemplateMetadataVersions(
172+
ctx context.Context, in *clusterRes.ListTemplateMetadataVersionsReq, out *clusterRes.CommonListResp) error {
173+
action := template.NewTemplateAction(h.model)
174+
data, err := action.ListTemplateMetadataVersions(ctx, in.GetTemplateSpaceID())
175+
if err != nil {
176+
return err
177+
}
178+
if out.Data, err = pbstruct.MapSlice2ListValue(data); err != nil {
179+
return err
180+
}
181+
return nil
182+
}
183+
170184
// CreateTemplateMetadata 创建模板文件元数据
171185
func (h *Handler) CreateTemplateMetadata(
172186
ctx context.Context, in *clusterRes.CreateTemplateMetadataReq, out *clusterRes.CommonResp) error {

bcs-services/cluster-resources/pkg/resource/form/parser/workload/po.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ func ParsePoSpec(manifest map[string]interface{}, spec *model.PoSpec) {
5353
func ParseNodeSelect(podSpec map[string]interface{}, nodeSelect *model.NodeSelect) {
5454
nodeSelect.Type = resCsts.NodeSelectTypeAnyAvailable
5555
nodeSelector := mapx.GetMap(podSpec, "nodeSelector")
56-
if nodeSelector != nil {
56+
if len(nodeSelector) != 0 {
5757
nodeSelect.Type = resCsts.NodeSelectTypeSchedulingRule
5858
for k := range nodeSelector {
5959
nodeSelect.Selector = append(nodeSelect.Selector,

0 commit comments

Comments
 (0)