mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 01:14:22 +00:00
fix: use annotation to identify helm chart generated resources
This commit is contained in:
@@ -51,12 +51,10 @@ func (p *NamespaceTransformerPlugin) Transform(m resmap.ResMap) error {
|
|||||||
// Don't mutate empty objects?
|
// Don't mutate empty objects?
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if origin, err := r.GetOrigin(); err == nil && origin != nil {
|
if annotations := r.GetAnnotations(konfig.HelmGeneratedAnnotation); annotations[konfig.HelmGeneratedAnnotation] == "true" {
|
||||||
if origin.ConfiguredBy.Kind == "HelmChartInflationGenerator" {
|
|
||||||
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
|
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
r.StorePreviousId()
|
r.StorePreviousId()
|
||||||
if err := r.ApplyFilter(namespace.Filter{
|
if err := r.ApplyFilter(namespace.Filter{
|
||||||
Namespace: p.Namespace,
|
Namespace: p.Namespace,
|
||||||
|
|||||||
@@ -127,11 +127,11 @@ func (kt *KustTarget) MakeCustomizedResMap() (resmap.ResMap, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (kt *KustTarget) makeCustomizedResMap() (resmap.ResMap, error) {
|
func (kt *KustTarget) makeCustomizedResMap() (resmap.ResMap, error) {
|
||||||
// Track origin for all resources so builtins can make decisions
|
var origin *resource.Origin
|
||||||
// based on where resources originated from.
|
if len(kt.kustomization.BuildMetadata) != 0 {
|
||||||
// Origin annotations will be stripped from the output if not
|
origin = &resource.Origin{}
|
||||||
// requested via build metadata options.
|
}
|
||||||
kt.origin = &resource.Origin{}
|
kt.origin = origin
|
||||||
ra, err := kt.AccumulateTarget()
|
ra, err := kt.AccumulateTarget()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
|
|||||||
@@ -46,4 +46,7 @@ const (
|
|||||||
|
|
||||||
// Label key that indicates the resources are validated by a validator
|
// Label key that indicates the resources are validated by a validator
|
||||||
ValidatedByLabelKey = "validated-by"
|
ValidatedByLabelKey = "validated-by"
|
||||||
|
|
||||||
|
// Annotation key for marking helm-generated resources to skip namespace transformation
|
||||||
|
HelmGeneratedAnnotation = ConfigAnnoDomain + "/helm-generated"
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1174,6 +1174,7 @@ kind: Service
|
|||||||
metadata:
|
metadata:
|
||||||
annotations:
|
annotations:
|
||||||
helm-namespace: helm-ns
|
helm-namespace: helm-ns
|
||||||
|
internal.config.kubernetes.io/helm-generated: "true"
|
||||||
name: test-service
|
name: test-service
|
||||||
namespace: helm-ns
|
namespace: helm-ns
|
||||||
`)
|
`)
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"sigs.k8s.io/kustomize/api/filters/patchstrategicmerge"
|
"sigs.k8s.io/kustomize/api/filters/patchstrategicmerge"
|
||||||
"sigs.k8s.io/kustomize/api/ifc"
|
"sigs.k8s.io/kustomize/api/ifc"
|
||||||
"sigs.k8s.io/kustomize/api/internal/utils"
|
"sigs.k8s.io/kustomize/api/internal/utils"
|
||||||
|
"sigs.k8s.io/kustomize/api/konfig"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
"sigs.k8s.io/kustomize/kyaml/kio"
|
"sigs.k8s.io/kustomize/kyaml/kio"
|
||||||
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
|
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
|
||||||
@@ -47,6 +48,8 @@ var BuildAnnotations = []string{
|
|||||||
kioutil.LegacyPathAnnotation,
|
kioutil.LegacyPathAnnotation,
|
||||||
kioutil.LegacyIndexAnnotation,
|
kioutil.LegacyIndexAnnotation,
|
||||||
kioutil.LegacyIdAnnotation,
|
kioutil.LegacyIdAnnotation,
|
||||||
|
|
||||||
|
konfig.HelmGeneratedAnnotation,
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Resource) ResetRNode(incoming *Resource) {
|
func (r *Resource) ResetRNode(incoming *Resource) {
|
||||||
|
|||||||
@@ -17,6 +17,7 @@ import (
|
|||||||
"slices"
|
"slices"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
|
"sigs.k8s.io/kustomize/api/konfig"
|
||||||
"sigs.k8s.io/kustomize/api/resmap"
|
"sigs.k8s.io/kustomize/api/resmap"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
"sigs.k8s.io/kustomize/kyaml/errors"
|
"sigs.k8s.io/kustomize/kyaml/errors"
|
||||||
@@ -302,6 +303,12 @@ func (p *plugin) Generate() (rm resmap.ResMap, err error) {
|
|||||||
|
|
||||||
rm, resMapErr := p.h.ResmapFactory().NewResMapFromBytes(stdout)
|
rm, resMapErr := p.h.ResmapFactory().NewResMapFromBytes(stdout)
|
||||||
if resMapErr == nil {
|
if resMapErr == nil {
|
||||||
|
// Mark all Helm-generated resources to skip namespace transformation
|
||||||
|
for _, r := range rm.Resources() {
|
||||||
|
if err := r.RNode.PipeE(kyaml.SetAnnotation(konfig.HelmGeneratedAnnotation, "true")); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to set helm annotation: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
return rm, nil
|
return rm, nil
|
||||||
}
|
}
|
||||||
// try to remove the contents before first "---" because
|
// try to remove the contents before first "---" because
|
||||||
@@ -317,6 +324,12 @@ func (p *plugin) Generate() (rm resmap.ResMap, err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("could not parse rnode slice into resource map: %w", err)
|
return nil, fmt.Errorf("could not parse rnode slice into resource map: %w", err)
|
||||||
}
|
}
|
||||||
|
// Mark all Helm-generated resources to skip namespace transformation
|
||||||
|
for _, r := range rm.Resources() {
|
||||||
|
if err := r.RNode.PipeE(kyaml.SetAnnotation(konfig.HelmGeneratedAnnotation, "true")); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to set helm annotation: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
return rm, nil
|
return rm, nil
|
||||||
}
|
}
|
||||||
return nil, fmt.Errorf("could not parse bytes into resource map: %w", resMapErr)
|
return nil, fmt.Errorf("could not parse bytes into resource map: %w", resMapErr)
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import (
|
|||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"sigs.k8s.io/kustomize/api/filters/namespace"
|
"sigs.k8s.io/kustomize/api/filters/namespace"
|
||||||
|
"sigs.k8s.io/kustomize/api/konfig"
|
||||||
"sigs.k8s.io/kustomize/api/resmap"
|
"sigs.k8s.io/kustomize/api/resmap"
|
||||||
"sigs.k8s.io/kustomize/api/types"
|
"sigs.k8s.io/kustomize/api/types"
|
||||||
"sigs.k8s.io/kustomize/kyaml/errors"
|
"sigs.k8s.io/kustomize/kyaml/errors"
|
||||||
@@ -56,12 +57,10 @@ func (p *plugin) Transform(m resmap.ResMap) error {
|
|||||||
// Don't mutate empty objects?
|
// Don't mutate empty objects?
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if origin, err := r.GetOrigin(); err == nil && origin != nil {
|
if annotations := r.GetAnnotations(konfig.HelmGeneratedAnnotation); annotations[konfig.HelmGeneratedAnnotation] == "true" {
|
||||||
if origin.ConfiguredBy.Kind == "HelmChartInflationGenerator" {
|
|
||||||
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
|
// Don't apply namespace on Helm generated manifest. Helm should take care of it.
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
|
||||||
r.StorePreviousId()
|
r.StorePreviousId()
|
||||||
if err := r.ApplyFilter(namespace.Filter{
|
if err := r.ApplyFilter(namespace.Filter{
|
||||||
Namespace: p.Namespace,
|
Namespace: p.Namespace,
|
||||||
|
|||||||
@@ -9,9 +9,9 @@ import (
|
|||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"github.com/stretchr/testify/require"
|
"github.com/stretchr/testify/require"
|
||||||
|
"sigs.k8s.io/kustomize/api/konfig"
|
||||||
"sigs.k8s.io/kustomize/api/provider"
|
"sigs.k8s.io/kustomize/api/provider"
|
||||||
"sigs.k8s.io/kustomize/api/resmap"
|
"sigs.k8s.io/kustomize/api/resmap"
|
||||||
"sigs.k8s.io/kustomize/api/resource"
|
|
||||||
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
|
||||||
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
|
kyaml "sigs.k8s.io/kustomize/kyaml/yaml"
|
||||||
)
|
)
|
||||||
@@ -782,12 +782,7 @@ metadata:
|
|||||||
`))
|
`))
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
r := rm.Resources()[0]
|
r := rm.Resources()[0]
|
||||||
origin := &resource.Origin{
|
require.NoError(t, r.RNode.PipeE(kyaml.SetAnnotation(konfig.HelmGeneratedAnnotation, "true")))
|
||||||
ConfiguredBy: kyaml.ResourceIdentifier{
|
|
||||||
TypeMeta: kyaml.TypeMeta{APIVersion: "builtin", Kind: "HelmChartInflationGenerator"},
|
|
||||||
},
|
|
||||||
}
|
|
||||||
require.NoError(t, r.SetOrigin(origin))
|
|
||||||
|
|
||||||
rm, err = th.RunTransformerFromResMap(`
|
rm, err = th.RunTransformerFromResMap(`
|
||||||
apiVersion: builtin
|
apiVersion: builtin
|
||||||
@@ -801,6 +796,8 @@ metadata:
|
|||||||
th.AssertActualEqualsExpectedNoIdAnnotations(rm, `apiVersion: v1
|
th.AssertActualEqualsExpectedNoIdAnnotations(rm, `apiVersion: v1
|
||||||
kind: Service
|
kind: Service
|
||||||
metadata:
|
metadata:
|
||||||
|
annotations:
|
||||||
|
internal.config.kubernetes.io/helm-generated: "true"
|
||||||
name: svc
|
name: svc
|
||||||
namespace: helm-ns
|
namespace: helm-ns
|
||||||
`)
|
`)
|
||||||
|
|||||||
Reference in New Issue
Block a user