From 99d8173c153ce13a22c118e8950388db8b0fa83c Mon Sep 17 00:00:00 2001 From: Patrice Ferlet Date: Sun, 3 May 2026 21:20:38 +0200 Subject: [PATCH] Fixes same-pod problems --- internal/generator/chart.go | 3 ++- internal/generator/generator.go | 36 ++++++++++++++++++++++----------- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/internal/generator/chart.go b/internal/generator/chart.go index 93adf9a..397f46f 100644 --- a/internal/generator/chart.go +++ b/internal/generator/chart.go @@ -229,10 +229,11 @@ func (chart *HelmChart) generateDeployment(service types.ServiceConfig, deployme // get the same-pod label if exists, add it to the list. // We later will copy some parts to the target deployment and remove this one. if samePod, ok := service.Labels[labels.LabelSamePod]; ok && samePod != "" { - podToMerge[samePod] = &service + podToMerge[service.Name] = &service } // create the needed service for the container port + // NOTE: ports from same-pod services are now added in generator.go after all services are processed if len(service.Ports) > 0 { s := NewService(service, appName) services[service.Name] = s diff --git a/internal/generator/generator.go b/internal/generator/generator.go index 6170581..83ffbf0 100644 --- a/internal/generator/generator.go +++ b/internal/generator/generator.go @@ -79,6 +79,22 @@ func Generate(project *types.Project) (*HelmChart, error) { } } + // second pass, create services for services with ports (now podToMerge is fully populated) + for _, service := range project.Services { + if len(service.Ports) > 0 { + s := NewService(service, appName) + // add ports from same-pod services that target this service + for _, mergedSvc := range podToMerge { + if mergedSvc.Labels[labels.LabelSamePod] == service.Name { + for _, p := range mergedSvc.Ports { + s.AddPort(p) + } + } + } + services[service.Name] = s + } + } + // now we have all deployments, we can create PVC if needed (it's separated from // the above loop because we need all deployments to not duplicate PVC for "same-pod" services) // bind static volumes @@ -199,12 +215,9 @@ func Generate(project *types.Project) (*HelmChart, error) { // generate all services for _, s := range services { - // add the service ports to the target service if it's a "same-pod" service - if samePod, ok := podToMerge[s.service.Name]; ok { - // get the target service - target := services[samePod.Name] - // merge the services - s.Spec.Ports = append(s.Spec.Ports, target.Spec.Ports...) + // skip same-pod services - they are merged into target deployments + if _, isSamePod := podToMerge[s.service.Name]; isSamePod { + continue } y, _ := s.Yaml() chart.Templates[s.Filename()] = &ChartTemplate{ @@ -213,12 +226,11 @@ func Generate(project *types.Project) (*HelmChart, error) { } } - // drop all "same-pod" services - for _, s := range podToMerge { - // get the target service - target := services[s.Name] - if target != nil { - delete(chart.Templates, target.Filename()) + // drop all "same-pod" service templates (they are merged into target deployments) + for name := range podToMerge { + // find the service for this same-pod service + if svc, ok := services[name]; ok { + delete(chart.Templates, svc.Filename()) } }