Skip to content

Commit 278dd6e

Browse files
authored
fix: performance recession when propagating namespace to helm (#5971)
* fix: performance recession when propagating namespace to helm * fix: handle passing namespace downstream more elegant * Revert "fix: handle passing namespace downstream more elegant" This reverts commit 976a7cf. * Revert "fix: performance recession when propagating namespace to helm" This reverts commit c7612d1. * fix: use annotation to identify helm chart generated resources * fix: deduplicate code * fix: missing import in NamespaceTransformer.go * ci: allow manual trigger of pipeline in fork * Revert "ci: allow manual trigger of pipeline in fork" This reverts commit 8948788. * fix: test cases * chore: fix code comment was on wrong line * chore: fix code comment was on wrong line pt2
1 parent b62d746 commit 278dd6e

File tree

10 files changed

+58
-24
lines changed

10 files changed

+58
-24
lines changed

api/internal/builtins/HelmChartInflationGenerator.go

Lines changed: 16 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/internal/builtins/NamespaceTransformer.go

Lines changed: 4 additions & 5 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

api/internal/target/kusttarget.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,11 +127,11 @@ func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) {
127127
}
128128

129129
func (kt *KustTarget) makeCustomizedResMap() (resmap.ResMap, error) {
130-
// Track origin for all resources so builtins can make decisions
131-
// based on where resources originated from.
132-
// Origin annotations will be stripped from the output if not
133-
// requested via build metadata options.
134-
kt.origin = &resource.Origin{}
130+
var origin *resource.Origin
131+
if len(kt.kustomization.BuildMetadata) != 0 {
132+
origin = &resource.Origin{}
133+
}
134+
kt.origin = origin
135135
ra, err := kt.AccumulateTarget()
136136
if err != nil {
137137
return nil, err

api/konfig/general.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,4 +46,7 @@ const (
4646

4747
// Label key that indicates the resources are validated by a validator
4848
ValidatedByLabelKey = "validated-by"
49+
50+
// Annotation key for marking helm-generated resources to skip namespace transformation
51+
HelmGeneratedAnnotation = ConfigAnnoDomain + "/helm-generated"
4952
)

api/krusty/helmchartinflationgenerator_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1174,6 +1174,7 @@ kind: Service
11741174
metadata:
11751175
annotations:
11761176
helm-namespace: helm-ns
1177+
internal.config.kubernetes.io/helm-generated: "true"
11771178
name: test-service
11781179
namespace: helm-ns
11791180
`)

api/resource/resource.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"sigs.k8s.io/kustomize/api/filters/patchstrategicmerge"
1212
"sigs.k8s.io/kustomize/api/ifc"
1313
"sigs.k8s.io/kustomize/api/internal/utils"
14+
"sigs.k8s.io/kustomize/api/konfig"
1415
"sigs.k8s.io/kustomize/api/types"
1516
"sigs.k8s.io/kustomize/kyaml/kio"
1617
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
@@ -47,6 +48,8 @@ var BuildAnnotations = []string{
4748
kioutil.LegacyPathAnnotation,
4849
kioutil.LegacyIndexAnnotation,
4950
kioutil.LegacyIdAnnotation,
51+
52+
konfig.HelmGeneratedAnnotation,
5053
}
5154

5255
func (r *Resource) ResetRNode(incoming *Resource) {

plugin/builtin/helmchartinflationgenerator/HelmChartInflationGenerator.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import (
1717
"slices"
1818
"strings"
1919

20+
"sigs.k8s.io/kustomize/api/konfig"
2021
"sigs.k8s.io/kustomize/api/resmap"
2122
"sigs.k8s.io/kustomize/api/types"
2223
"sigs.k8s.io/kustomize/kyaml/errors"
@@ -302,6 +303,9 @@ func (p *plugin) Generate() (rm resmap.ResMap, err error) {
302303

303304
rm, resMapErr := p.h.ResmapFactory().NewResMapFromBytes(stdout)
304305
if resMapErr == nil {
306+
if err := p.markHelmGeneratedResources(rm); err != nil {
307+
return nil, err
308+
}
305309
return rm, nil
306310
}
307311
// try to remove the contents before first "---" because
@@ -317,6 +321,9 @@ func (p *plugin) Generate() (rm resmap.ResMap, err error) {
317321
if err != nil {
318322
return nil, fmt.Errorf("could not parse rnode slice into resource map: %w", err)
319323
}
324+
if err := p.markHelmGeneratedResources(rm); err != nil {
325+
return nil, err
326+
}
320327
return rm, nil
321328
}
322329
return nil, fmt.Errorf("could not parse bytes into resource map: %w", resMapErr)
@@ -359,6 +366,15 @@ func (p *plugin) chartExistsLocally() (string, bool) {
359366
return path, s.IsDir()
360367
}
361368

369+
func (p *plugin) markHelmGeneratedResources(rm resmap.ResMap) error {
370+
for _, r := range rm.Resources() {
371+
if err := r.RNode.PipeE(kyaml.SetAnnotation(konfig.HelmGeneratedAnnotation, "true")); err != nil {
372+
return fmt.Errorf("failed to set helm annotation: %w", err)
373+
}
374+
}
375+
return nil
376+
}
377+
362378
// checkHelmVersion will return an error if the helm version is not V3
363379
func (p *plugin) checkHelmVersion() error {
364380
stdout, err := p.runHelmCommand([]string{"version", "-c", "--short"})

plugin/builtin/helmchartinflationgenerator/HelmChartInflationGenerator_test.go

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,6 @@ type: Opaque
191191
apiVersion: v1
192192
kind: Service
193193
metadata:
194-
annotations: {}
195194
labels:
196195
app: moria-minecraft
197196
chart: minecraft-3.1.3
@@ -211,7 +210,6 @@ spec:
211210
apiVersion: v1
212211
kind: Service
213212
metadata:
214-
annotations: {}
215213
labels:
216214
app: moria-minecraft
217215
chart: minecraft-3.1.3

plugin/builtin/namespacetransformer/NamespaceTransformer.go

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"fmt"
99

1010
"sigs.k8s.io/kustomize/api/filters/namespace"
11+
"sigs.k8s.io/kustomize/api/konfig"
1112
"sigs.k8s.io/kustomize/api/resmap"
1213
"sigs.k8s.io/kustomize/api/types"
1314
"sigs.k8s.io/kustomize/kyaml/errors"
@@ -56,11 +57,9 @@ func (p *plugin) Transform(m resmap.ResMap) error {
5657
// Don't mutate empty objects?
5758
continue
5859
}
59-
if origin, err := r.GetOrigin(); err == nil && origin != nil {
60-
if origin.ConfiguredBy.Kind == "HelmChartInflationGenerator" {
61-
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
62-
continue
63-
}
60+
if annotations := r.GetAnnotations(konfig.HelmGeneratedAnnotation); annotations[konfig.HelmGeneratedAnnotation] == "true" {
61+
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
62+
continue
6463
}
6564
r.StorePreviousId()
6665
if err := r.ApplyFilter(namespace.Filter{

plugin/builtin/namespacetransformer/NamespaceTransformer_test.go

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ import (
99

1010
"github.com/stretchr/testify/assert"
1111
"github.com/stretchr/testify/require"
12+
"sigs.k8s.io/kustomize/api/konfig"
1213
"sigs.k8s.io/kustomize/api/provider"
1314
"sigs.k8s.io/kustomize/api/resmap"
14-
"sigs.k8s.io/kustomize/api/resource"
1515
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
1616
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
1717
)
@@ -779,15 +779,12 @@ kind: Service
779779
metadata:
780780
name: svc
781781
namespace: helm-ns
782+
annotations:
783+
this-should-be-keept: "true"
782784
`))
783785
require.NoError(t, err)
784786
r := rm.Resources()[0]
785-
origin := &resource.Origin{
786-
ConfiguredBy: kyaml.ResourceIdentifier{
787-
TypeMeta: kyaml.TypeMeta{APIVersion: "builtin", Kind: "HelmChartInflationGenerator"},
788-
},
789-
}
790-
require.NoError(t, r.SetOrigin(origin))
787+
require.NoError(t, r.RNode.PipeE(kyaml.SetAnnotation(konfig.HelmGeneratedAnnotation, "true")))
791788

792789
rm, err = th.RunTransformerFromResMap(`
793790
apiVersion: builtin
@@ -801,6 +798,8 @@ metadata:
801798
th.AssertActualEqualsExpectedNoIdAnnotations(rm, `apiVersion: v1
802799
kind: Service
803800
metadata:
801+
annotations:
802+
this-should-be-keept: "true"
804803
name: svc
805804
namespace: helm-ns
806805
`)

0 commit comments

Comments
 (0)