Skip to content

Commit 1a49c97

Browse files
authored
Merge pull request #3654 from PetrusZ/fix/helm_svc_gone
fix update helm services cause all service disappear
2 parents 0011561 + a337594 commit 1a49c97

File tree

3 files changed

+60
-4
lines changed

3 files changed

+60
-4
lines changed

pkg/microservice/aslan/core/common/service/kube/helm.go

+24-4
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ import (
4242
commonmodels "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/models"
4343
templatemodels "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/models/template"
4444
commonrepo "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/mongodb"
45+
"github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/repository/mongodb/template"
4546
"github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/service/notify"
4647
"github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/service/repository"
4748
commonutil "github.com/koderover/zadig/v2/pkg/microservice/aslan/core/common/util"
@@ -366,12 +367,31 @@ func UpgradeHelmRelease(product *commonmodels.Product, productSvc *commonmodels.
366367
}
367368
}
368369

369-
newProductInfo.Services = [][]*commonmodels.ProductService{{}}
370-
for _, service := range productSvcMap {
371-
newProductInfo.Services[0] = append(newProductInfo.Services[0], service)
370+
templateProduct, err := template.NewProductCollWithSess(session).Find(product.ProductName)
371+
if err != nil {
372+
mongo.AbortTransaction(session)
373+
return errors.Wrapf(err, "failed to find template product %s", product.ProductName)
374+
}
375+
376+
newProductInfo.Services = [][]*commonmodels.ProductService{}
377+
serviceOrchestration := templateProduct.Services
378+
if product.Production {
379+
serviceOrchestration = templateProduct.ProductionServices
380+
}
381+
382+
for i, svcGroup := range serviceOrchestration {
383+
if len(newProductInfo.Services) >= i {
384+
newProductInfo.Services = append(newProductInfo.Services, []*commonmodels.ProductService{})
385+
}
386+
387+
for _, svc := range svcGroup {
388+
if productSvcMap[svc] != nil {
389+
newProductInfo.Services[i] = append(newProductInfo.Services[i], productSvcMap[svc])
390+
}
391+
}
372392
}
373393
for _, service := range productChartSvcMap {
374-
newProductInfo.Services[0] = append(newProductInfo.Services[0], service)
394+
newProductInfo.Services[len(newProductInfo.Services)-1] = append(newProductInfo.Services[len(newProductInfo.Services)-1], service)
375395
}
376396

377397
if productSvc.DeployStrategy == setting.ServiceDeployStrategyDeploy {

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

+34
Original file line numberDiff line numberDiff line change
@@ -1796,6 +1796,40 @@ func CreateNewHelmDeliveryVersion(args *CreateHelmDeliveryVersionArgs, logger *z
17961796
return e.ErrCreateDeliveryVersion.AddErr(err)
17971797
}
17981798

1799+
registryMap, err := buildRegistryMap()
1800+
if err != nil {
1801+
return fmt.Errorf("failed to build registry map")
1802+
}
1803+
1804+
var targetRegistry *commonmodels.RegistryNamespace
1805+
if len(args.ImageRegistryID) != 0 {
1806+
for _, registry := range registryMap {
1807+
if registry.ID.Hex() == args.ImageRegistryID {
1808+
targetRegistry = registry
1809+
break
1810+
}
1811+
}
1812+
targetRegistryProjectSet := sets.NewString()
1813+
for _, project := range targetRegistry.Projects {
1814+
targetRegistryProjectSet.Insert(project)
1815+
}
1816+
if !targetRegistryProjectSet.Has(productInfo.ProductName) && !targetRegistryProjectSet.Has(setting.AllProjects) {
1817+
return fmt.Errorf("registry %s/%s not support project %s", targetRegistry.RegAddr, targetRegistry.Namespace, productInfo.ProductName)
1818+
}
1819+
}
1820+
1821+
for _, chartData := range args.ChartDatas {
1822+
for _, imageData := range chartData.ImageData {
1823+
if !imageData.Selected {
1824+
continue
1825+
}
1826+
_, err := getImageSourceRegistry(imageData, registryMap)
1827+
if err != nil {
1828+
return fmt.Errorf("failed to check registry, err: %v", err)
1829+
}
1830+
}
1831+
}
1832+
17991833
productInfo.ID, _ = primitive.ObjectIDFromHex("")
18001834

18011835
workflowName := generateDeliveryWorkflowName(args.ProductName)

pkg/microservice/aslan/core/environment/service/helm.go

+2
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,7 @@ func getReleaseStatus(re *release.Release) ReleaseStatus {
135135
}
136136

137137
type ImageData struct {
138+
Image string `json:"image"`
138139
ImageName string `json:"imageName"`
139140
ImageTag string `json:"imageTag"`
140141
Selected bool `json:"selected"`
@@ -585,6 +586,7 @@ func GetImageInfos(productName, envName, serviceNames string, production bool, l
585586
}
586587

587588
svcImage.Images = append(svcImage.Images, &ImageData{
589+
imageUrl,
588590
util.GetImageNameFromContainerInfo(container.ImageName, container.Name),
589591
commonservice.ExtractImageTag(imageUrl),
590592
containerNameSet.Has(container.ImageName),

0 commit comments

Comments
 (0)