diff --git a/api/builtins/PatchJson6902Transformer.go b/api/builtins/PatchJson6902Transformer.go index 7d56a15f3..2051c874a 100644 --- a/api/builtins/PatchJson6902Transformer.go +++ b/api/builtins/PatchJson6902Transformer.go @@ -10,7 +10,6 @@ import ( "github.com/pkg/errors" "sigs.k8s.io/kustomize/api/filters/patchjson6902" "sigs.k8s.io/kustomize/api/ifc" - "sigs.k8s.io/kustomize/api/resid" "sigs.k8s.io/kustomize/api/resmap" "sigs.k8s.io/kustomize/api/types" "sigs.k8s.io/kustomize/kyaml/filtersutil" @@ -20,9 +19,9 @@ import ( type PatchJson6902TransformerPlugin struct { ldr ifc.Loader decodedPatch jsonpatch.Patch - Target types.PatchTarget `json:"target,omitempty" yaml:"target,omitempty"` - Path string `json:"path,omitempty" yaml:"path,omitempty"` - JsonOp string `json:"jsonOp,omitempty" yaml:"jsonOp,omitempty"` + Target *types.Selector `json:"target,omitempty" yaml:"target,omitempty"` + Path string `json:"path,omitempty" yaml:"path,omitempty"` + JsonOp string `json:"jsonOp,omitempty" yaml:"jsonOp,omitempty"` } func (p *PatchJson6902TransformerPlugin) Config( @@ -72,22 +71,22 @@ func (p *PatchJson6902TransformerPlugin) Config( } func (p *PatchJson6902TransformerPlugin) Transform(m resmap.ResMap) error { - id := resid.NewResIdWithNamespace( - resid.Gvk{ - Group: p.Target.Group, - Version: p.Target.Version, - Kind: p.Target.Kind, - }, - p.Target.Name, - p.Target.Namespace, - ) - obj, err := m.GetById(id) + if p.Target == nil { + return fmt.Errorf("must specify a target for patch %s", p.JsonOp) + } + resources, err := m.Select(*p.Target) if err != nil { return err } - return filtersutil.ApplyToJSON(patchjson6902.Filter{ - Patch: p.JsonOp, - }, obj) + for _, res := range resources { + err = filtersutil.ApplyToJSON(patchjson6902.Filter{ + Patch: p.JsonOp, + }, res) + if err != nil { + return err + } + } + return nil } func NewPatchJson6902TransformerPlugin() resmap.TransformerPlugin { diff --git a/api/internal/target/kusttarget_configplugin.go b/api/internal/target/kusttarget_configplugin.go index 418931a8c..a46b2e6ba 100644 --- a/api/internal/target/kusttarget_configplugin.go +++ b/api/internal/target/kusttarget_configplugin.go @@ -159,12 +159,12 @@ var transformerConfigurators = map[builtinhelpers.BuiltinPluginType]func( kt *KustTarget, bpt builtinhelpers.BuiltinPluginType, f tFactory, _ *builtinconfig.TransformerConfig) ( result []resmap.Transformer, err error) { var c struct { - Target types.PatchTarget `json:"target,omitempty" yaml:"target,omitempty"` - Path string `json:"path,omitempty" yaml:"path,omitempty"` - JsonOp string `json:"jsonOp,omitempty" yaml:"jsonOp,omitempty"` + Target *types.Selector `json:"target,omitempty" yaml:"target,omitempty"` + Path string `json:"path,omitempty" yaml:"path,omitempty"` + JsonOp string `json:"jsonOp,omitempty" yaml:"jsonOp,omitempty"` } for _, args := range kt.kustomization.PatchesJson6902 { - c.Target = *args.Target + c.Target = args.Target c.Path = args.Path c.JsonOp = args.Patch p := f() diff --git a/api/types/kustomization.go b/api/types/kustomization.go index da7e24c72..b290da35c 100644 --- a/api/types/kustomization.go +++ b/api/types/kustomization.go @@ -55,7 +55,7 @@ type Kustomization struct { // JSONPatches is a list of JSONPatch for applying JSON patch. // Format documented at https://tools.ietf.org/html/rfc6902 // and http://jsonpatch.com - PatchesJson6902 []PatchJson6902 `json:"patchesJson6902,omitempty" yaml:"patchesJson6902,omitempty"` + PatchesJson6902 []Patch `json:"patchesJson6902,omitempty" yaml:"patchesJson6902,omitempty"` // Patches is a list of patches, where each one can be either a // Strategic Merge Patch or a JSON patch. @@ -172,9 +172,7 @@ func (k *Kustomization) FixKustomizationPostUnmarshalling() { // has been processed. func (k *Kustomization) FixKustomizationPreMarshalling() { // PatchesJson6902 should be under the Patches field. - for _, patch := range k.PatchesJson6902 { - k.Patches = append(k.Patches, patch.ToPatch()) - } + k.Patches = append(k.Patches, k.PatchesJson6902...) k.PatchesJson6902 = nil } diff --git a/api/types/patchjson6902.go b/api/types/patchjson6902.go deleted file mode 100644 index 4c90ce201..000000000 --- a/api/types/patchjson6902.go +++ /dev/null @@ -1,27 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package types - -// PatchJson6902 represents a json patch for an object -// with format documented https://tools.ietf.org/html/rfc6902. -type PatchJson6902 struct { - // PatchTarget refers to a Kubernetes object that the json patch will be - // applied to. It must refer to a Kubernetes resource under the - // purview of this kustomization. PatchTarget should use the - // raw name of the object (the name specified in its YAML, - // before addition of a namePrefix and a nameSuffix). - Target *PatchTarget `json:"target" yaml:"target"` - - // relative file path for a json patch file inside a kustomization - Path string `json:"path,omitempty" yaml:"path,omitempty"` - - // inline patch string - Patch string `json:"patch,omitempty" yaml:"patch,omitempty"` -} - -// ToPatch converts a PatchJson6902 to its superset Patch. -func (patch *PatchJson6902) ToPatch() Patch { - selector := patch.Target.ToSelector() - return Patch{Path: patch.Path, Patch: patch.Patch, Target: &selector} -} diff --git a/api/types/patchtarget.go b/api/types/patchtarget.go deleted file mode 100644 index 85f804574..000000000 --- a/api/types/patchtarget.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2019 The Kubernetes Authors. -// SPDX-License-Identifier: Apache-2.0 - -package types - -import ( - "sigs.k8s.io/kustomize/api/resid" -) - -// PatchTarget represents the kubernetes object that the patch is applied to -type PatchTarget struct { - resid.Gvk `json:",inline,omitempty" yaml:",inline,omitempty"` - Namespace string `json:"namespace,omitempty" yaml:"namespace,omitempty"` - Name string `json:"name" yaml:"name"` -} - -// ToSelector converts a PatchTarget to a Selector. -func (target *PatchTarget) ToSelector() Selector { - return Selector{Name: target.Name, Namespace: target.Namespace, Gvk: target.Gvk} -}