Skip to content

Commit

Permalink
fix: GetClusterTemplate
Browse files Browse the repository at this point in the history
returns directly template chart name and version instead of regular parsing
  • Loading branch information
xuzhu-591 committed Feb 28, 2023
1 parent ec6abc3 commit a3c1689
Show file tree
Hide file tree
Showing 10 changed files with 142 additions and 98 deletions.
30 changes: 18 additions & 12 deletions core/controller/cluster/controller_operation.go
Original file line number Diff line number Diff line change
Expand Up @@ -219,7 +219,7 @@ func (c *controller) Deploy(ctx context.Context, clusterID uint,

func (c *controller) Rollback(ctx context.Context,
clusterID uint, r *RollbackRequest) (_ *PipelinerunIDResponse, err error) {
const op = "cluster controller: rollback "
const op = "cluster controller: rollback"
defer wlog.Start(ctx, op).StopPrint()

// 1. get pipelinerun to rollback, and do some validation
Expand Down Expand Up @@ -673,16 +673,21 @@ func (c *controller) Upgrade(ctx context.Context, clusterID uint) error {
if err != nil {
return err
}
templateFromFile, err := c.clusterGitRepo.GetClusterTemplate(ctx, application.Name, cluster.Name)
templateChartFromFile, err := c.clusterGitRepo.GetTemplateChart(ctx, application.Name, cluster.Name)
if err != nil {
return err
}
sourceRelease, err := c.templateReleaseMgr.GetByChartNameAndVersion(ctx,
templateChartFromFile.Name, templateChartFromFile.Version)
if err != nil {
return err
}

// 2. match target template
targetTemplate, ok := c.templateUpgradeMapper[templateFromFile.Name]
targetTemplate, ok := c.templateUpgradeMapper[sourceRelease.TemplateName]
if !ok {
return perror.Wrapf(herrors.ErrParamInvalid,
"cluster template %s does not support upgrade", templateFromFile.Name)
"cluster template %s does not support upgrade", sourceRelease.TemplateName)
}
targetRelease, err := c.templateReleaseMgr.GetByTemplateNameAndRelease(ctx,
targetTemplate.Name, targetTemplate.Release)
Expand All @@ -700,7 +705,7 @@ func (c *controller) Upgrade(ctx context.Context, clusterID uint) error {
_, err = c.clusterGitRepo.UpgradeCluster(ctx, &gitrepo.UpgradeValuesParam{
Application: application.Name,
Cluster: cluster.Name,
Template: templateFromFile,
SourceRelease: sourceRelease,
TargetRelease: targetRelease,
BuildConfig: &targetTemplate.BuildConfig,
})
Expand Down Expand Up @@ -744,12 +749,17 @@ func (c *controller) updatePRStatus(ctx context.Context, action string, prID uin
// updateTemplateAndTagsFromFile syncs template and tags in db when git repo files are updated
func (c *controller) updateTemplateAndTagsFromFile(ctx context.Context,
application *amodels.Application, cluster *cmodels.Cluster) (*cmodels.Cluster, error) {
templateFromFile, err := c.clusterGitRepo.GetClusterTemplate(ctx, application.Name, cluster.Name)
templateChartFromFile, err := c.clusterGitRepo.GetTemplateChart(ctx, application.Name, cluster.Name)
if err != nil {
return nil, err
}
release, err := c.templateReleaseMgr.GetByChartNameAndVersion(ctx,
templateChartFromFile.Name, templateChartFromFile.Version)
if err != nil {
return nil, err
}
cluster.Template = templateFromFile.Name
cluster.TemplateRelease = templateFromFile.Release
cluster.Template = release.TemplateName
cluster.TemplateRelease = release.Name
cluster, err = c.clusterMgr.UpdateByID(ctx, cluster.ID, cluster)
if err != nil {
return nil, err
Expand All @@ -762,10 +772,6 @@ func (c *controller) updateTemplateAndTagsFromFile(ctx context.Context,

for _, file := range files {
if file.FileName == common.GitopsFileTags {
release, err := c.templateReleaseMgr.GetByTemplateNameAndRelease(ctx, cluster.Template, cluster.TemplateRelease)
if err != nil {
return nil, err
}
midMap := file.Content[release.ChartName].(map[string]interface{})
tagsMap := midMap[common.GitopsKeyTags].(map[string]interface{})
tags := make([]*tmodels.Tag, 0, len(tagsMap))
Expand Down
14 changes: 7 additions & 7 deletions core/controller/cluster/controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1028,10 +1028,10 @@ func test(t *testing.T) {
// test rollback
clusterGitRepo.EXPECT().Rollback(ctx, gomock.Any(), gomock.Any(), gomock.Any()).
Return("rollback-commit", nil).AnyTimes()
clusterGitRepo.EXPECT().GetClusterTemplate(ctx, application.Name, resp.Name).
Return(&gitrepo.ClusterTemplate{
clusterGitRepo.EXPECT().GetTemplateChart(ctx, application.Name, resp.Name).
Return(&gitrepo.ClusterTemplateChart{
Name: resp.Template.Name,
Release: resp.Template.Release,
Version: resp.Template.Release,
}, nil).AnyTimes()
clusterGitRepo.EXPECT().GetManifest(ctx, application.Name, resp.Name, gomock.Any()).
Return(nil, herrors.NewErrNotFound(herrors.GitlabResource, "")).Times(2)
Expand Down Expand Up @@ -1566,10 +1566,10 @@ func testUpgrade(t *testing.T) {
assert.Equal(t, resp.Application.ID, application.ID)
assert.Equal(t, resp.FullPath, "/"+group.Path+"/"+application.Name+"/"+createClusterName)

clusterGitRepo.EXPECT().GetClusterTemplate(ctx, application.Name, resp.Name).
Return(&gitrepo.ClusterTemplate{
Name: resp.Template.Name,
Release: resp.Template.Release,
clusterGitRepo.EXPECT().GetTemplateChart(ctx, application.Name, resp.Name).
Return(&gitrepo.ClusterTemplateChart{
Name: templateName,
Version: templateRelease,
}, nil).AnyTimes()
clusterGitRepo.EXPECT().UpgradeCluster(ctx, gomock.Any()).Return("", nil).Times(1)
clusterGitRepo.EXPECT().DefaultBranch().Return("master").AnyTimes()
Expand Down
30 changes: 15 additions & 15 deletions mock/pkg/cluster/gitrepo/gitrepo_cluster_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 0 additions & 15 deletions mock/pkg/cluster/manager/manager.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

15 changes: 15 additions & 0 deletions mock/pkg/templaterelease/manager/manager_mock.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

67 changes: 29 additions & 38 deletions pkg/cluster/gitrepo/gitrepo_cluster.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"context"
"encoding/json"
"fmt"
"regexp"
"strings"
"sync"

Expand Down Expand Up @@ -80,16 +79,16 @@ type ClusterCommit struct {
Gitops string
}

type ClusterTemplate struct {
type ClusterTemplateChart struct {
Name string
Release string
Version string
}

// Deprecated: for internal usage
type UpgradeValuesParam struct {
Application string
Cluster string
Template *ClusterTemplate
SourceRelease *trmodels.TemplateRelease
TargetRelease *trmodels.TemplateRelease
BuildConfig *template.BuildConfig
}
Expand All @@ -107,8 +106,8 @@ type ClusterGitRepo interface {
GetCluster(ctx context.Context, application, cluster, templateName string) (*ClusterFiles, error)
GetClusterValueFiles(ctx context.Context,
application, cluster string) ([]ClusterValueFile, error)
// GetClusterTemplate parses cluster's template name and release from GitopsFileChart
GetClusterTemplate(ctx context.Context, application, cluster string) (*ClusterTemplate, error)
// GetTemplateChart parses cluster's template name and release from GitopsFileChart
GetTemplateChart(ctx context.Context, application, cluster string) (*ClusterTemplateChart, error)
CreateCluster(ctx context.Context, params *CreateClusterParams) error
UpdateCluster(ctx context.Context, params *UpdateClusterParams) error
DeleteCluster(ctx context.Context, application, cluster string, clusterID uint) error
Expand Down Expand Up @@ -375,8 +374,8 @@ func (g *clusterGitRepo) GetClusterValueFiles(ctx context.Context,
return clusterValueFiles, nil
}

func (g *clusterGitRepo) GetClusterTemplate(ctx context.Context, application,
cluster string) (*ClusterTemplate, error) {
func (g *clusterGitRepo) GetTemplateChart(ctx context.Context, application,
cluster string) (*ClusterTemplateChart, error) {
const op = "cluster git repo: get cluster template"
defer wlog.Start(ctx, op).StopPrint()

Expand All @@ -395,29 +394,16 @@ func (g *clusterGitRepo) GetClusterTemplate(ctx context.Context, application,

for _, dependency := range chart.Dependencies {
if dependency.Name != "" && dependency.Version != "" {
// extract release
releaseName, err := func() (string, error) {
pattern := regexp.MustCompile("-([a-z0-9])+$")
b := []byte(dependency.Version)
loc := pattern.FindIndex(b)
if len(loc) == 0 {
return "", perror.Wrapf(herrors.ErrParamInvalid,
"failed to extract release from chart")
}
return string(b[0:loc[0]]), nil
}()
if err != nil {
return nil, err
}
return &ClusterTemplate{
return &ClusterTemplateChart{
Name: dependency.Name,
Release: releaseName,
Version: dependency.Version,
}, nil
}
}
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"failed to get cluster template from chart")
}

func (g *clusterGitRepo) CreateCluster(ctx context.Context, params *CreateClusterParams) (err error) {
const op = "cluster git repo: create cluster"
defer wlog.Start(ctx, op).StopPrint()
Expand Down Expand Up @@ -1309,10 +1295,11 @@ func (g *clusterGitRepo) UpgradeCluster(ctx context.Context,
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"yaml Unmarshal err, file = %s, err = %s", common.GitopsFileBase, err.Error())
}
baseValue, ok := valueMap[param.Template.Name][common.GitopsBaseValueNamespace]
baseValue, ok := valueMap[param.SourceRelease.TemplateName][common.GitopsBaseValueNamespace]
if !ok {
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"value parent err, file = %s, parent = %s", common.GitopsFileBase, param.Template.Name)
"value parent err, file = %s, parent = %s",
common.GitopsFileBase, param.SourceRelease.TemplateName)
}
baseValue.Template = &BaseValueTemplate{
Name: param.TargetRelease.TemplateName,
Expand Down Expand Up @@ -1351,11 +1338,11 @@ func (g *clusterGitRepo) UpgradeCluster(ctx context.Context,
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"yaml Unmarshal err, file = %s, err = %s", common.GitopsFilePipeline, err.Error())
}
antScript, ok := inMap[param.Template.Name]["buildxml"]
antScript, ok := inMap[param.SourceRelease.TemplateName]["buildxml"]
if !ok {
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"value parent err, file = %s, parent = %s",
common.GitopsFilePipeline, param.Template.Name)
common.GitopsFilePipeline, param.SourceRelease.TemplateName)
}
retMap := map[string]map[string]interface{}{
PipelineValueParent: {
Expand Down Expand Up @@ -1386,11 +1373,11 @@ func (g *clusterGitRepo) UpgradeCluster(ctx context.Context,
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"yaml Unmarshal err, file = %s, err = %s", common.GitopsFileApplication, err.Error())
}
midMap, ok := inMap[param.Template.Name]
midMap, ok := inMap[param.SourceRelease.TemplateName]
if !ok {
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"value parent err, file = %s, parent = %s",
common.GitopsFileApplication, param.Template.Name)
common.GitopsFileApplication, param.SourceRelease.TemplateName)
}
// convert params to envs
func() {
Expand Down Expand Up @@ -1431,10 +1418,11 @@ func (g *clusterGitRepo) UpgradeCluster(ctx context.Context,
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"yaml Unmarshal err, file = %s, err = %s", fileName, err.Error())
}
valueMap, ok := inMap[param.Template.Name]
valueMap, ok := inMap[param.SourceRelease.TemplateName]
if !ok {
return nil, perror.Wrapf(herrors.ErrParamInvalid,
"value parent err, file = %s, parent = %s", fileName, param.Template.Name)
"value parent err, file = %s, parent = %s",
fileName, param.SourceRelease.TemplateName)
}
retMap := map[string]interface{}{
param.TargetRelease.TemplateName: valueMap,
Expand Down Expand Up @@ -1520,13 +1508,16 @@ func (g *clusterGitRepo) UpgradeCluster(ctx context.Context,
Action: "upgrade cluster",
Cluster: angular.StringPtr(param.Cluster),
}, struct {
SourceTemplate ClusterTemplate `json:"sourceTemplate"`
TargetTemplate ClusterTemplate `json:"targetRelease"`
SourceRelease ClusterTemplateChart `json:"sourceRelease"`
TargetRelease ClusterTemplateChart `json:"targetRelease"`
}{
SourceTemplate: *param.Template,
TargetTemplate: ClusterTemplate{
Name: param.TargetRelease.TemplateName,
Release: param.TargetRelease.Name,
SourceRelease: ClusterTemplateChart{
Name: param.SourceRelease.ChartName,
Version: param.SourceRelease.ChartVersion,
},
TargetRelease: ClusterTemplateChart{
Name: param.TargetRelease.ChartName,
Version: param.TargetRelease.ChartVersion,
},
})
newCommit, err := g.gitlabLib.WriteFiles(ctx, pid, GitOpsBranch, commitMsg, nil, gitActions)
Expand Down
Loading

0 comments on commit a3c1689

Please sign in to comment.