Skip to content

Commit

Permalink
fix(rendered): Pass helm legacy deploy flags to render config (#9682)
Browse files Browse the repository at this point in the history
* fix(rendered): Pass helm legacy deploy flags to render config

Signed-off-by: Suleiman Dibirov <[email protected]>

* Add test

Signed-off-by: Suleiman Dibirov <[email protected]>

* add newline

Signed-off-by: Suleiman Dibirov <[email protected]>

---------

Signed-off-by: Suleiman Dibirov <[email protected]>
  • Loading branch information
idsulik authored Jan 29, 2025
1 parent e87a25f commit 25bb601
Show file tree
Hide file tree
Showing 2 changed files with 82 additions and 18 deletions.
52 changes: 34 additions & 18 deletions pkg/skaffold/runner/renderer.go
Original file line number Diff line number Diff line change
Expand Up @@ -58,29 +58,45 @@ func GetRenderer(ctx context.Context, runCtx *runcontext.RunContext, hydrationDi
// In case of legacy helm deployer configured and render command used
// force a helm renderer from deploy helm config
if usingLegacyHelmDeploy && runCtx.Opts.Command == "render" {
for _, configName := range configNames {
p := runCtx.Pipelines.GetForConfigName(configName)
legacyHelmReleases := filterDuplicates(p.Deploy.LegacyHelmDeploy, p.Render.Helm)
if len(legacyHelmReleases) == 0 {
continue
}
rCfg := latest.RenderConfig{
Generate: latest.Generate{
Helm: &latest.Helm{
Releases: legacyHelmReleases,
},
},
}
r, err := helm.New(runCtx, rCfg, labels, configName, nil)
if err != nil {
return nil, err
}
gr.Renderers = append(gr.Renderers, r)
legacyHelmRenderers, err := getLegacyHelmRenderers(runCtx, configNames, labels)
if err != nil {
return nil, err
}
gr.Renderers = append(gr.Renderers, legacyHelmRenderers...)
}
return renderer.NewRenderMux(gr), nil
}

func getLegacyHelmRenderers(
runCtx *runcontext.RunContext,
configNames []string,
labels map[string]string,
) ([]renderer.Renderer, error) {
renderers := make([]renderer.Renderer, 0)
for _, configName := range configNames {
p := runCtx.Pipelines.GetForConfigName(configName)
legacyHelmReleases := filterDuplicates(p.Deploy.LegacyHelmDeploy, p.Render.Helm)
if len(legacyHelmReleases) == 0 {
continue
}
rCfg := latest.RenderConfig{
Generate: latest.Generate{
Helm: &latest.Helm{
Flags: p.Deploy.LegacyHelmDeploy.Flags,
Releases: legacyHelmReleases,
},
},
}
r, err := helm.New(runCtx, rCfg, labels, configName, nil)
if err != nil {
return nil, err
}
renderers = append(renderers, r)
}

return renderers, nil
}

// filterDuplicates removes duplicate releases defined in the legacy helm deployer
func filterDuplicates(l *latest.LegacyHelmDeploy, h *latest.Helm) []latest.HelmRelease {
if l == nil {
Expand Down
48 changes: 48 additions & 0 deletions pkg/skaffold/runner/renderer_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"context"
"testing"

"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/config"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/render/renderer"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/render/renderer/helm"
"github.com/GoogleContainerTools/skaffold/v2/pkg/skaffold/runner/runcontext"
Expand Down Expand Up @@ -157,3 +158,50 @@ func TestGetRenderer(tOuter *testing.T) {
}
})
}

func TestGetLegacyHelmRenderers(tOuter *testing.T) {
testutil.Run(tOuter, "GetLegacyHelmRenderers", func(t *testutil.T) {
runCtx := &runcontext.RunContext{
Opts: config.SkaffoldOptions{
Command: "render",
},
Pipelines: runcontext.NewPipelines(
map[string]latest.Pipeline{
"default": {
Deploy: latest.DeployConfig{
DeployType: latest.DeployType{
LegacyHelmDeploy: &latest.LegacyHelmDeploy{
Releases: []latest.HelmRelease{
{Name: "test", ChartPath: "./test"},
{Name: "test1", ChartPath: "./test1"},
},
Flags: latest.HelmDeployFlags{
Global: []string{"global"},
Install: []string{"install"},
Upgrade: []string{"upgrade"},
},
},
},
},
},
},
[]string{"default"},
),
}

labels := map[string]string{
"key": "value",
}
renderers, err := getLegacyHelmRenderers(
runCtx,
[]string{"default"},
labels,
)

t.CheckError(false, err)
t.CheckDeepEqual(1, len(renderers))
r := renderers[0].(helm.Helm)
t.CheckDeepEqual([]string{"global"}, r.GlobalFlags())
t.CheckDeepEqual(labels, r.Labels())
})
}

0 comments on commit 25bb601

Please sign in to comment.