fix build annotations getting lost after applying JSON 6902 patch

This commit is contained in:
Julian van den Berkmortel
2021-11-10 21:41:11 +01:00
parent b16e4ec566
commit b6cb6c8ae9
7 changed files with 45 additions and 3 deletions

View File

@@ -12,6 +12,7 @@ import (
"sigs.k8s.io/kustomize/api/ifc" "sigs.k8s.io/kustomize/api/ifc"
"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/kio/kioutil"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@@ -78,12 +79,23 @@ func (p *PatchJson6902TransformerPlugin) Transform(m resmap.ResMap) error {
return err return err
} }
for _, res := range resources { for _, res := range resources {
internalAnnotations := kioutil.GetInternalAnnotations(&res.RNode)
err = res.ApplyFilter(patchjson6902.Filter{ err = res.ApplyFilter(patchjson6902.Filter{
Patch: p.JsonOp, Patch: p.JsonOp,
}) })
if err != nil { if err != nil {
return err return err
} }
annotations := res.GetAnnotations()
for key, value := range internalAnnotations {
annotations[key] = value
}
err = res.SetAnnotations(annotations)
if err != nil {
return err
}
} }
return nil return nil
} }

View File

@@ -12,6 +12,7 @@ import (
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/resource"
"sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@@ -111,12 +112,19 @@ func (p *PatchTransformerPlugin) transformJson6902(m resmap.ResMap, patch jsonpa
} }
for _, res := range resources { for _, res := range resources {
res.StorePreviousId() res.StorePreviousId()
internalAnnotations := kioutil.GetInternalAnnotations(&res.RNode)
err = res.ApplyFilter(patchjson6902.Filter{ err = res.ApplyFilter(patchjson6902.Filter{
Patch: p.Patch, Patch: p.Patch,
}) })
if err != nil { if err != nil {
return err return err
} }
annotations := res.GetAnnotations()
for key, value := range internalAnnotations {
annotations[key] = value
}
err = res.SetAnnotations(annotations)
} }
return nil return nil
} }

View File

@@ -1647,7 +1647,7 @@ spec:
`) `)
} }
// test for #4111, currently demonstrates incorrect behaviour // test for #4111
func TestPatchPreservesInternalAnnotations(t *testing.T) { func TestPatchPreservesInternalAnnotations(t *testing.T) {
th := kusttest_test.MakeHarness(t) th := kusttest_test.MakeHarness(t)
th.WriteK(".", ` th.WriteK(".", `
@@ -1697,7 +1697,7 @@ spec:
containers: containers:
- image: fluentd:latest - image: fluentd:latest
name: fluentd name: fluentd
serviceAccountName: fluentd-sa serviceAccountName: fluentd-sa-abc
--- ---
apiVersion: v1 apiVersion: v1
kind: ServiceAccount kind: ServiceAccount
@@ -1706,4 +1706,4 @@ metadata:
note: this is a test annotation note: this is a test annotation
name: fluentd-sa-abc name: fluentd-sa-abc
`) `)
} }

View File

@@ -13,6 +13,7 @@ import (
"sigs.k8s.io/kustomize/api/ifc" "sigs.k8s.io/kustomize/api/ifc"
"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/kio/kioutil"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@@ -82,12 +83,23 @@ func (p *plugin) Transform(m resmap.ResMap) error {
return err return err
} }
for _, res := range resources { for _, res := range resources {
internalAnnotations := kioutil.GetInternalAnnotations(&res.RNode)
err = res.ApplyFilter(patchjson6902.Filter{ err = res.ApplyFilter(patchjson6902.Filter{
Patch: p.JsonOp, Patch: p.JsonOp,
}) })
if err != nil { if err != nil {
return err return err
} }
annotations := res.GetAnnotations()
for key, value := range internalAnnotations {
annotations[key] = value
}
err = res.SetAnnotations(annotations)
if err != nil {
return err
}
} }
return nil return nil
} }

View File

@@ -6,6 +6,7 @@ require (
github.com/evanphx/json-patch v4.11.0+incompatible github.com/evanphx/json-patch v4.11.0+incompatible
github.com/pkg/errors v0.9.1 github.com/pkg/errors v0.9.1
sigs.k8s.io/kustomize/api v0.8.9 sigs.k8s.io/kustomize/api v0.8.9
sigs.k8s.io/kustomize/kyaml v0.12.0
sigs.k8s.io/yaml v1.2.0 sigs.k8s.io/yaml v1.2.0
) )

View File

@@ -13,6 +13,7 @@ import (
"sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/resmap"
"sigs.k8s.io/kustomize/api/resource" "sigs.k8s.io/kustomize/api/resource"
"sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/api/types"
"sigs.k8s.io/kustomize/kyaml/kio/kioutil"
"sigs.k8s.io/yaml" "sigs.k8s.io/yaml"
) )
@@ -115,12 +116,19 @@ func (p *plugin) transformJson6902(m resmap.ResMap, patch jsonpatch.Patch) error
} }
for _, res := range resources { for _, res := range resources {
res.StorePreviousId() res.StorePreviousId()
internalAnnotations := kioutil.GetInternalAnnotations(&res.RNode)
err = res.ApplyFilter(patchjson6902.Filter{ err = res.ApplyFilter(patchjson6902.Filter{
Patch: p.Patch, Patch: p.Patch,
}) })
if err != nil { if err != nil {
return err return err
} }
annotations := res.GetAnnotations()
for key, value := range internalAnnotations {
annotations[key] = value
}
err = res.SetAnnotations(annotations)
} }
return nil return nil
} }

View File

@@ -5,6 +5,7 @@ go 1.16
require ( require (
github.com/evanphx/json-patch v4.11.0+incompatible github.com/evanphx/json-patch v4.11.0+incompatible
sigs.k8s.io/kustomize/api v0.8.9 sigs.k8s.io/kustomize/api v0.8.9
sigs.k8s.io/kustomize/kyaml v0.12.0
sigs.k8s.io/yaml v1.2.0 sigs.k8s.io/yaml v1.2.0
) )