From 03a08a9cecd8e0e57c250c871389339687e5d22b Mon Sep 17 00:00:00 2001 From: Camila Macedo <7708031+camilamacedo86@users.noreply.github.com> Date: Thu, 20 Feb 2025 10:10:34 +0000 Subject: [PATCH] (helm/v1-alpha): Use namePrefix from kustomization.yaml instead of project name in RBAC and Helm templates --- .../optional/helm/v1alpha/scaffolds/init.go | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/pkg/plugins/optional/helm/v1alpha/scaffolds/init.go b/pkg/plugins/optional/helm/v1alpha/scaffolds/init.go index 0a6c0496761..46f0ac95aa0 100644 --- a/pkg/plugins/optional/helm/v1alpha/scaffolds/init.go +++ b/pkg/plugins/optional/helm/v1alpha/scaffolds/init.go @@ -124,6 +124,24 @@ func (s *initScaffolder) Scaffold() error { return nil } +func (s *initScaffolder) getNamePrefix() (string, error) { + filePath := "config/default/kustomization.yaml" + content, err := os.ReadFile(filePath) + if err != nil { + return "", fmt.Errorf("failed to read kustomization.yaml: %w", err) + } + + var kustomization struct { + NamePrefix string `yaml:"namePrefix"` + } + + if err := yaml.Unmarshal(content, &kustomization); err != nil { + return "", fmt.Errorf("failed to parse kustomization.yaml: %w", err) + } + + return strings.TrimSpace(kustomization.NamePrefix), nil +} + // getDeployImagesEnvVars will return the values to append the envvars for projects // which has the APIs scaffolded with DeployImage plugin func (s *initScaffolder) getDeployImagesEnvVars() map[string]string { @@ -243,7 +261,12 @@ func (s *initScaffolder) copyConfigFiles() error { for _, srcFile := range files { destFile := filepath.Join(dir.DestDir, filepath.Base(srcFile)) - err := copyFileWithHelmLogic(srcFile, destFile, dir.SubDir, s.config.GetProjectName()) + namePrefix, err := s.getNamePrefix() + if err != nil { + return err + } + + err = copyFileWithHelmLogic(srcFile, destFile, dir.SubDir, namePrefix) if err != nil { return err } @@ -255,7 +278,7 @@ func (s *initScaffolder) copyConfigFiles() error { // copyFileWithHelmLogic reads the source file, modifies the content for Helm, applies patches // to spec.conversion if applicable, and writes it to the destination -func copyFileWithHelmLogic(srcFile, destFile, subDir, projectName string) error { +func copyFileWithHelmLogic(srcFile, destFile, subDir, namePrefix string) error { if _, err := os.Stat(srcFile); os.IsNotExist(err) { log.Printf("Source file does not exist: %s", srcFile) return err @@ -282,14 +305,14 @@ func copyFileWithHelmLogic(srcFile, destFile, subDir, projectName string) error "name: {{ .Values.controllerManager.serviceAccountName }}", -1) contentStr = strings.Replace(contentStr, "name: metrics-reader", - fmt.Sprintf("name: %s-metrics-reader", projectName), 1) + fmt.Sprintf("name: %smetrics-reader", namePrefix), 1) contentStr = strings.Replace(contentStr, "name: metrics-auth-role", - fmt.Sprintf("name: %s-metrics-auth-role", projectName), -1) + fmt.Sprintf("name: %smetrics-auth-role", namePrefix), -1) contentStr = strings.Replace(contentStr, "name: metrics-auth-rolebinding", - fmt.Sprintf("name: %s-metrics-auth-rolebinding", projectName), 1) + fmt.Sprintf("name: %smetrics-auth-rolebinding", namePrefix), 1) if strings.Contains(contentStr, ".Values.controllerManager.serviceAccountName") && strings.Contains(contentStr, "kind: ServiceAccount") && @@ -306,16 +329,16 @@ func copyFileWithHelmLogic(srcFile, destFile, subDir, projectName string) error } contentStr = strings.Replace(contentStr, "name: leader-election-role", - fmt.Sprintf("name: %s-leader-election-role", projectName), -1) + fmt.Sprintf("name: %sleader-election-role", namePrefix), -1) contentStr = strings.Replace(contentStr, "name: leader-election-rolebinding", - fmt.Sprintf("name: %s-leader-election-rolebinding", projectName), 1) + fmt.Sprintf("name: %sleader-election-rolebinding", namePrefix), 1) contentStr = strings.Replace(contentStr, "name: manager-role", - fmt.Sprintf("name: %s-manager-role", projectName), -1) + fmt.Sprintf("name: %smanager-role", namePrefix), -1) contentStr = strings.Replace(contentStr, "name: manager-rolebinding", - fmt.Sprintf("name: %s-manager-rolebinding", projectName), 1) + fmt.Sprintf("name: %smanager-rolebinding", namePrefix), 1) // The generated files do not include the namespace if strings.Contains(contentStr, "leader-election-rolebinding") ||