Skip to content

Commit 826489f

Browse files
committed
fix: add get previous version cluster info for rollback operation
Signed-off-by: YuTang Song <2313186065@qq.com>
1 parent 6e233d3 commit 826489f

3 files changed

Lines changed: 50 additions & 3 deletions

File tree

pkg/microservice/aslan/core/common/repository/models/env_svc_version.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type EnvServiceVersion struct {
3030
ProductName string `bson:"product_name" json:"product_name"`
3131
EnvName string `bson:"env_name" json:"env_name"`
3232
Namespace string `bson:"namespace" json:"namespace"`
33+
ClusterName string `bson:"cluster_name,omitempty" json:"cluster_name,omitempty"`
3334
Production bool `bson:"production" json:"production"`
3435
Revision int64 `bson:"revision" json:"revision"`
3536
Operation config.EnvOperation `bson:"operation" json:"operation"`

pkg/microservice/aslan/core/common/service/version.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,24 @@ func GetEnvServiceVersionYaml(ctx *internalhandler.Context, projectName, envName
157157
Namespace: envSvcRevision.Namespace,
158158
Production: envSvcRevision.Production,
159159
}
160-
parsedYaml, err := kube.RenderEnvService(fakeEnv, envSvcRevision.Service.GetServiceRender(), envSvcRevision.Service)
160+
clusterName := envSvcRevision.ClusterName
161+
if clusterName == "" {
162+
cluster, err := kube.GetCluster(env.ClusterID)
163+
if err != nil {
164+
return resp, err
165+
}
166+
clusterName = cluster.Name
167+
}
168+
svcTmpl, err := repository.QueryTemplateService(&commonrepo.ServiceFindOption{
169+
ServiceName: envSvcRevision.Service.ServiceName,
170+
ProductName: envSvcRevision.ProductName,
171+
Type: envSvcRevision.Service.Type,
172+
Revision: envSvcRevision.Service.Revision,
173+
}, envSvcRevision.Production)
174+
if err != nil {
175+
return resp, fmt.Errorf("failed to find %s/%s/%d service template, isProduction %v, error: %v", envSvcRevision.ProductName, envSvcRevision.Service.ServiceName, envSvcRevision.Service.Revision, envSvcRevision.Production, err)
176+
}
177+
parsedYaml, err := kube.RenderEnvServiceWithTempl(fakeEnv, envSvcRevision.Service.GetServiceRender(), envSvcRevision.Service, svcTmpl, clusterName)
161178
if err != nil {
162179
err = fmt.Errorf("Failed to render env Service %s, error: %v", envSvcRevision.Service.ServiceName, err)
163180
return resp, err
@@ -407,7 +424,8 @@ func RollbackEnvServiceVersion(ctx *internalhandler.Context, projectName, envNam
407424
VariableKVs: envSvcVersion.Service.GetServiceRender().OverrideYaml.RenderVariableKVs,
408425
Containers: envSvcVersion.Service.Containers,
409426
}
410-
_, _, resources, err := kube.GenerateRenderedYaml(option)
427+
var resources []*kube.WorkloadResource
428+
_, _, resources, err = kube.GenerateRenderedYaml(option)
411429
if err != nil {
412430
return nil, e.ErrRollbackEnvServiceVersion.AddErr(fmt.Errorf("failed to generate service yaml, error: %v", err))
413431
}
@@ -434,7 +452,24 @@ func RollbackEnvServiceVersion(ctx *internalhandler.Context, projectName, envNam
434452
Namespace: envSvcVersion.Namespace,
435453
Production: envSvcVersion.Production,
436454
}
437-
parsedYaml, err := kube.RenderEnvService(fakeEnv, envSvcVersion.Service.GetServiceRender(), envSvcVersion.Service)
455+
clusterName := envSvcVersion.ClusterName
456+
if clusterName == "" {
457+
cluster, err := kube.GetCluster(env.ClusterID)
458+
if err != nil {
459+
return nil, e.ErrRollbackEnvServiceVersion.AddErr(err)
460+
}
461+
clusterName = cluster.Name
462+
}
463+
svcTmpl, err := repository.QueryTemplateService(&commonrepo.ServiceFindOption{
464+
ServiceName: envSvcVersion.Service.ServiceName,
465+
ProductName: envSvcVersion.ProductName,
466+
Type: envSvcVersion.Service.Type,
467+
Revision: envSvcVersion.Service.Revision,
468+
}, envSvcVersion.Production)
469+
if err != nil {
470+
return nil, e.ErrRollbackEnvServiceVersion.AddErr(fmt.Errorf("failed to find %s/%s/%d service template, isProduction %v, error: %v", envSvcVersion.ProductName, envSvcVersion.Service.ServiceName, envSvcVersion.Service.Revision, envSvcVersion.Production, err))
471+
}
472+
parsedYaml, err := kube.RenderEnvServiceWithTempl(fakeEnv, envSvcVersion.Service.GetServiceRender(), envSvcVersion.Service, svcTmpl, clusterName)
438473
if err != nil {
439474
err = fmt.Errorf("Failed to render env %s, service %s, revision %d, error: %v", envSvcVersion.EnvName, envSvcVersion.Service.ServiceName, envSvcVersion.Service.Revision, err)
440475
return nil, e.ErrRollbackEnvServiceVersion.AddErr(err)

pkg/microservice/aslan/core/common/util/version.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,22 @@ func CreateEnvServiceVersion(env *models.Product, prodSvc *models.ProductService
5050
return fmt.Errorf("failed to find template product %s, error: %v", env.ProductName, err)
5151
}
5252

53+
clusterName := ""
54+
var cluster *models.K8SCluster
55+
if env.ClusterID != "" {
56+
cluster, err = commonrepo.NewK8SClusterColl().FindByID(env.ClusterID)
57+
if err != nil {
58+
return fmt.Errorf("failed to find cluster by id %s, error: %v", env.ClusterID, err)
59+
}
60+
clusterName = cluster.Name
61+
}
62+
5363
svcVersionColl := mongodb.NewEnvServiceVersionCollWithSession(session)
5464
version := &models.EnvServiceVersion{
5565
ProductName: env.ProductName,
5666
EnvName: env.EnvName,
5767
Namespace: env.Namespace,
68+
ClusterName: clusterName,
5869
Production: env.Production,
5970
Revision: revision,
6071
Service: prodSvc,

0 commit comments

Comments
 (0)