mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-12 01:14:22 +00:00
Support resource generator options in exec plugins
This commit is contained in:
@@ -9,17 +9,21 @@ import (
|
|||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
"os"
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"sigs.k8s.io/kustomize/v3/pkg/ifc"
|
"sigs.k8s.io/kustomize/v3/pkg/ifc"
|
||||||
"sigs.k8s.io/kustomize/v3/pkg/resid"
|
"sigs.k8s.io/kustomize/v3/pkg/resid"
|
||||||
"sigs.k8s.io/kustomize/v3/pkg/resmap"
|
"sigs.k8s.io/kustomize/v3/pkg/resmap"
|
||||||
|
"sigs.k8s.io/kustomize/v3/pkg/types"
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
idAnnotation = "kustomize.config.k8s.io/id"
|
idAnnotation = "kustomize.config.k8s.io/id"
|
||||||
|
hashAnnotation = "kustomize.config.k8s.io/needs-hash"
|
||||||
|
behaviorAnnotation = "kustomize.config.k8s.io/behavior"
|
||||||
tmpConfigFilePrefix = "kust-plugin-config-"
|
tmpConfigFilePrefix = "kust-plugin-config-"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -96,7 +100,11 @@ func (p *ExecPlugin) Generate() (resmap.ResMap, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return p.rf.NewResMapFromBytes(output)
|
rm, err := p.rf.NewResMapFromBytes(output)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return p.updateResourceOptions(rm)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ExecPlugin) Transform(rm resmap.ResMap) error {
|
func (p *ExecPlugin) Transform(rm resmap.ResMap) error {
|
||||||
@@ -223,3 +231,32 @@ func (p *ExecPlugin) updateResMapValues(output []byte, rm resmap.ResMap) error {
|
|||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// updateResourceOptions updates the generator options for each resource in the
|
||||||
|
// given ResMap based on plugin provided annotations.
|
||||||
|
func (p *ExecPlugin) updateResourceOptions(rm resmap.ResMap) (resmap.ResMap, error) {
|
||||||
|
for _, r := range rm.Resources() {
|
||||||
|
// Disable name hashing by default and require plugin to explicitly
|
||||||
|
// request it for each resource.
|
||||||
|
annotations := r.GetAnnotations()
|
||||||
|
behavior := annotations[behaviorAnnotation]
|
||||||
|
var needsHash bool
|
||||||
|
if val, ok := annotations[hashAnnotation]; ok {
|
||||||
|
b, err := strconv.ParseBool(val)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("the annotation %q contains an invalid value (%q)", hashAnnotation, val)
|
||||||
|
}
|
||||||
|
needsHash = b
|
||||||
|
}
|
||||||
|
delete(annotations, hashAnnotation)
|
||||||
|
delete(annotations, behaviorAnnotation)
|
||||||
|
if len(annotations) == 0 {
|
||||||
|
annotations = nil
|
||||||
|
}
|
||||||
|
r.SetAnnotations(annotations)
|
||||||
|
r.SetOptions(types.NewGenArgs(
|
||||||
|
&types.GeneratorArgs{Behavior: behavior},
|
||||||
|
&types.GeneratorOptions{DisableNameSuffixHash: !needsHash}))
|
||||||
|
}
|
||||||
|
return rm, nil
|
||||||
|
}
|
||||||
|
|||||||
@@ -242,6 +242,11 @@ func (r *Resource) AsYAML() ([]byte, error) {
|
|||||||
return yaml.JSONToYAML(json)
|
return yaml.JSONToYAML(json)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SetOptions updates the generator options for the resource.
|
||||||
|
func (r *Resource) SetOptions(o *types.GenArgs) {
|
||||||
|
r.options = o
|
||||||
|
}
|
||||||
|
|
||||||
// Behavior returns the behavior for the resource.
|
// Behavior returns the behavior for the resource.
|
||||||
func (r *Resource) Behavior() types.GenerationBehavior {
|
func (r *Resource) Behavior() types.GenerationBehavior {
|
||||||
return r.options.Behavior()
|
return r.options.Behavior()
|
||||||
|
|||||||
@@ -250,31 +250,23 @@ func (kt *KustTarget) AccumulateTarget() (
|
|||||||
|
|
||||||
func (kt *KustTarget) runGenerators(
|
func (kt *KustTarget) runGenerators(
|
||||||
ra *accumulator.ResAccumulator) error {
|
ra *accumulator.ResAccumulator) error {
|
||||||
generators, err := kt.configureBuiltinGenerators()
|
var generators []resmap.Generator
|
||||||
|
gs, err := kt.configureBuiltinGenerators()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
for _, g := range generators {
|
generators = append(generators, gs...)
|
||||||
resMap, err := g.Generate()
|
gs, err = kt.configureExternalGenerators()
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
// The legacy generators allow override.
|
|
||||||
err = ra.AbsorbAll(resMap)
|
|
||||||
if err != nil {
|
|
||||||
return errors.Wrapf(err, "merging from generator %v", g)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
generators, err = kt.configureExternalGenerators()
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrap(err, "loading generator plugins")
|
return errors.Wrap(err, "loading generator plugins")
|
||||||
}
|
}
|
||||||
|
generators = append(generators, gs...)
|
||||||
for _, g := range generators {
|
for _, g := range generators {
|
||||||
resMap, err := g.Generate()
|
resMap, err := g.Generate()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err = ra.AppendAll(resMap)
|
err = ra.AbsorbAll(resMap)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "merging from generator %v", g)
|
return errors.Wrapf(err, "merging from generator %v", g)
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user