From cbc54fd96cad0cd7f0c6a18e85e87c5c18375777 Mon Sep 17 00:00:00 2001 From: UJESH2K Date: Sun, 7 Dec 2025 17:58:25 +0530 Subject: [PATCH 1/2] Include generic Services in Helm v2-alpha chart generation --- .../internal/kustomize/resource_organizer.go | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/resource_organizer.go b/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/resource_organizer.go index 6dff347829b..849b55b38ef 100644 --- a/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/resource_organizer.go +++ b/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/resource_organizer.go @@ -83,6 +83,12 @@ func (o *ResourceOrganizer) OrganizeByFunction() map[string][]*unstructured.Unst groups["other"] = o.resources.Other } + // Generic Services - Services that are neither webhook nor metrics + genericServices := o.collectGenericServices() + if len(genericServices) > 0 { + groups["services"] = genericServices + } + return groups } @@ -150,6 +156,18 @@ func (o *ResourceOrganizer) collectMetricsResources() []*unstructured.Unstructur return metricsResources } +// collectGenericServices gathers all other service resources +func (o *ResourceOrganizer) collectGenericServices() []*unstructured.Unstructured { + var generic []*unstructured.Unstructured + + for _, service := range o.resources.Services { + if o.isGenericService(service) { + generic = append(generic, service) + } + } + return generic +} + // collectPrometheusResources gathers prometheus related resources func (o *ResourceOrganizer) collectPrometheusResources() []*unstructured.Unstructured { var prometheusResources []*unstructured.Unstructured @@ -171,3 +189,9 @@ func (o *ResourceOrganizer) isMetricsService(service *unstructured.Unstructured) serviceName := service.GetName() return strings.Contains(serviceName, "metrics") } + +// isGenericService determines if a service is a generic service to +// include all remaining Services that are not webhook or metrics +func (o *ResourceOrganizer) isGenericService(service *unstructured.Unstructured) bool { + return !o.isWebhookService(service) && !o.isMetricsService(service) +} From cda7069e930572909274f44c35a386947f074a35 Mon Sep 17 00:00:00 2001 From: UJESH2K Date: Sun, 7 Dec 2025 18:28:27 +0530 Subject: [PATCH 2/2] test: add generic service grouping test --- .../kustomize/generic_services_test.go | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/generic_services_test.go diff --git a/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/generic_services_test.go b/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/generic_services_test.go new file mode 100644 index 00000000000..34959d8a5e8 --- /dev/null +++ b/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize/generic_services_test.go @@ -0,0 +1,34 @@ +package kustomize_test + +import ( + . "github.com/onsi/ginkgo/v2" + . "github.com/onsi/gomega" + + "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + kust "sigs.k8s.io/kubebuilder/v4/pkg/plugins/optional/helm/v2alpha/scaffolds/internal/kustomize" +) + +var _ = Describe("Generic Services", func() { + It("should place non-webhook, non-metrics services into the 'services' group", func() { + + // 1. Create a fake Service + service := &unstructured.Unstructured{} + service.SetKind("Service") + service.SetAPIVersion("v1") + service.SetName("my-alert-service") // does NOT contain 'metrics' or 'webhook' + + // 2. Put it inside ParsedResources + parsed := &kust.ParsedResources{ + Services: []*unstructured.Unstructured{service}, + } + + // 3. Run the ResourceOrganizer + organizer := kust.NewResourceOrganizer(parsed) + groups := organizer.OrganizeByFunction() + + // 4. Expect it inside the "services" group + Expect(groups).To(HaveKey("services")) + Expect(groups["services"]).To(HaveLen(1)) + Expect(groups["services"][0].GetName()).To(Equal("my-alert-service")) + }) +})