From 9ef961ae7cb218716394f29e565e822afb68ee3a Mon Sep 17 00:00:00 2001 From: Patrice Ferlet Date: Sun, 19 Jan 2025 23:38:17 +0100 Subject: [PATCH] issue(107): Really drop ignored services It's, at this time, not needed to keep the ignored services inside the project. Maybe later someone will ask to keep env variables, or something like this... But at this time, it's a source of bug like #107. --- generator/generator.go | 81 ++++++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 30 deletions(-) diff --git a/generator/generator.go b/generator/generator.go index 6509b18..cb8d5ee 100644 --- a/generator/generator.go +++ b/generator/generator.go @@ -45,37 +45,12 @@ func Generate(project *types.Project) (*HelmChart, error) { Annotations[labels.LabelName("compose-hash")] = hash chart.composeHash = &hash + // drop all services with the "ignore" label + dropIngoredServices(project) + // rename all services name to remove dashes - for i, service := range project.Services { - if service.Name != utils.AsResourceName(service.Name) { - fixed := utils.AsResourceName(service.Name) - for j, s := range project.Services { - // for the same-pod services, we need to keep the original name - if samepod, ok := s.Labels[labels.LabelSamePod]; ok && samepod == service.Name { - s.Labels[labels.LabelSamePod] = fixed - project.Services[j] = s - } - // also, the value-from label should be updated - if valuefrom, ok := s.Labels[labels.LabelValueFrom]; ok { - vf, err := labelStructs.GetValueFrom(valuefrom) - if err != nil { - return nil, err - } - for varname, bind := range *vf { - log.Printf("service %s, varname %s, bind %s", service.Name, varname, bind) - bind := strings.ReplaceAll(bind, service.Name, fixed) - (*vf)[varname] = bind - } - output, err := yaml.Marshal(vf) - if err != nil { - return nil, err - } - s.Labels[labels.LabelValueFrom] = string(output) - } - } - service.Name = fixed - project.Services[i] = service - } + if err := fixResourceNames(project); err != nil { + return nil, err } // find the "main-app" label, and set chart.AppVersion to the tag if exists @@ -222,6 +197,52 @@ func Generate(project *types.Project) (*HelmChart, error) { return chart, nil } +// dropIngoredServices removes all services with the "ignore" label set to true (or yes). +func dropIngoredServices(project *types.Project) { + for i, service := range project.Services { + if isIgnored(service) { + project.Services = append(project.Services[:i], project.Services[i+1:]...) + } + } +} + +// fixResourceNames renames all services and related resources to remove dashes. +func fixResourceNames(project *types.Project) error { + // rename all services name to remove dashes + for i, service := range project.Services { + if service.Name != utils.AsResourceName(service.Name) { + fixed := utils.AsResourceName(service.Name) + for j, s := range project.Services { + // for the same-pod services, we need to keep the original name + if samepod, ok := s.Labels[labels.LabelSamePod]; ok && samepod == service.Name { + s.Labels[labels.LabelSamePod] = fixed + project.Services[j] = s + } + // also, the value-from label should be updated + if valuefrom, ok := s.Labels[labels.LabelValueFrom]; ok { + vf, err := labelStructs.GetValueFrom(valuefrom) + if err != nil { + return err + } + for varname, bind := range *vf { + log.Printf("service %s, varname %s, bind %s", service.Name, varname, bind) + bind := strings.ReplaceAll(bind, service.Name, fixed) + (*vf)[varname] = bind + } + output, err := yaml.Marshal(vf) + if err != nil { + return err + } + s.Labels[labels.LabelValueFrom] = string(output) + } + } + service.Name = fixed + project.Services[i] = service + } + } + return nil +} + // serviceIsMain returns true if the service is the main app. func serviceIsMain(service types.ServiceConfig) bool { if main, ok := service.Labels[labels.LabelMainApp]; ok {