mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-05-17 18:25:26 +00:00
replace Resource.options with annotations (#4061)
This commit is contained in:
@@ -1514,9 +1514,9 @@ kind: Deployment
|
||||
metadata:
|
||||
name: pre-deploy
|
||||
annotations:
|
||||
config.kubernetes.io/previousNames: deploy,deploy
|
||||
config.kubernetes.io/previousKinds: CronJob,Deployment
|
||||
config.kubernetes.io/previousNamespaces: default,default
|
||||
internal.config.kubernetes.io/previousNames: deploy,deploy
|
||||
internal.config.kubernetes.io/previousKinds: CronJob,Deployment
|
||||
internal.config.kubernetes.io/previousNamespaces: default,default
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
@@ -1543,9 +1543,9 @@ kind: Deployment
|
||||
metadata:
|
||||
name: pre-deploy
|
||||
annotations:
|
||||
config.kubernetes.io/previousNames: deploy,deploy
|
||||
config.kubernetes.io/previousKinds: CronJob,Deployment
|
||||
config.kubernetes.io/previousNamespaces: default,default
|
||||
internal.config.kubernetes.io/previousNames: deploy,deploy
|
||||
internal.config.kubernetes.io/previousKinds: CronJob,Deployment
|
||||
internal.config.kubernetes.io/previousNamespaces: default,default
|
||||
spec:
|
||||
template:
|
||||
spec:
|
||||
|
||||
@@ -362,10 +362,10 @@ func TestResolveVarsWithNoambiguation(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "sub-backendOne",
|
||||
"annotations": map[string]interface{}{
|
||||
"config.kubernetes.io/previousKinds": "Service",
|
||||
"config.kubernetes.io/previousNames": "backendOne",
|
||||
"config.kubernetes.io/previousNamespaces": "default",
|
||||
"config.kubernetes.io/prefixes": "sub-",
|
||||
"internal.config.kubernetes.io/previousKinds": "Service",
|
||||
"internal.config.kubernetes.io/previousNames": "backendOne",
|
||||
"internal.config.kubernetes.io/previousNamespaces": "default",
|
||||
"internal.config.kubernetes.io/prefixes": "sub-",
|
||||
},
|
||||
}}).ResMap()
|
||||
|
||||
|
||||
@@ -255,5 +255,5 @@ metadata:
|
||||
actual.RemoveBuildAnnotations()
|
||||
actYaml, err := actual.AsYaml()
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, expYaml, actYaml)
|
||||
assert.Equal(t, string(expYaml), string(actYaml))
|
||||
}
|
||||
|
||||
@@ -12,10 +12,11 @@ import (
|
||||
const (
|
||||
BuildAnnotationPreviousKinds = konfig.ConfigAnnoDomain + "/previousKinds"
|
||||
BuildAnnotationPreviousNames = konfig.ConfigAnnoDomain + "/previousNames"
|
||||
BuildAnnotationPreviousNamespaces = konfig.ConfigAnnoDomain + "/previousNamespaces"
|
||||
BuildAnnotationPrefixes = konfig.ConfigAnnoDomain + "/prefixes"
|
||||
BuildAnnotationSuffixes = konfig.ConfigAnnoDomain + "/suffixes"
|
||||
BuildAnnotationPreviousNamespaces = konfig.ConfigAnnoDomain + "/previousNamespaces"
|
||||
BuildAnnotationsRefBy = konfig.ConfigAnnoDomain + "/refBy"
|
||||
BuildAnnotationsGenOptions = konfig.ConfigAnnoDomain + "/generatorOptions"
|
||||
|
||||
// the following are only for patches, to specify whether they can change names
|
||||
// and kinds of their targets
|
||||
|
||||
@@ -31,11 +31,12 @@ const (
|
||||
// A program name, for use in help, finding the XDG_CONFIG_DIR, etc.
|
||||
ProgramName = "kustomize"
|
||||
|
||||
// ConfigAnnoDomain is configuration-related annotation namespace.
|
||||
ConfigAnnoDomain = "config.kubernetes.io"
|
||||
// ConfigAnnoDomain is internal configuration-related annotation namespace.
|
||||
// See https://github.com/kubernetes-sigs/kustomize/blob/master/cmd/config/docs/api-conventions/functions-spec.md.
|
||||
ConfigAnnoDomain = "internal.config.kubernetes.io"
|
||||
|
||||
// If a resource has this annotation, kustomize will drop it.
|
||||
IgnoredByKustomizeAnnotation = ConfigAnnoDomain + "/local-config"
|
||||
IgnoredByKustomizeAnnotation = "config.kubernetes.io/local-config"
|
||||
|
||||
// Label key that indicates the resources are built from Kustomize
|
||||
ManagedbyLabelKey = "app.kubernetes.io/managed-by"
|
||||
|
||||
@@ -219,8 +219,10 @@ BAR=baz
|
||||
}
|
||||
r, err := rmF.NewResMapFromConfigMapArgs(kvLdr, tc.input)
|
||||
assert.NoError(t, err, tc.description)
|
||||
r.RemoveBuildAnnotations()
|
||||
rYaml, err := r.AsYaml()
|
||||
assert.NoError(t, err, tc.description)
|
||||
tc.expected.RemoveBuildAnnotations()
|
||||
expYaml, err := tc.expected.AsYaml()
|
||||
assert.NoError(t, err, tc.description)
|
||||
assert.Equal(t, expYaml, rYaml)
|
||||
@@ -252,6 +254,7 @@ func TestNewResMapFromSecretArgs(t *testing.T) {
|
||||
if err != nil {
|
||||
t.Fatalf("unexpected error: %v", err)
|
||||
}
|
||||
actual.RemoveBuildAnnotations()
|
||||
actYaml, err := actual.AsYaml()
|
||||
assert.NoError(t, err)
|
||||
|
||||
|
||||
@@ -343,9 +343,9 @@ func TestGetMatchingResourcesByAnyId(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "new-alice",
|
||||
"annotations": map[string]interface{}{
|
||||
"config.kubernetes.io/previousKinds": "ConfigMap",
|
||||
"config.kubernetes.io/previousNames": "alice",
|
||||
"config.kubernetes.io/previousNamespaces": "default",
|
||||
"internal.config.kubernetes.io/previousKinds": "ConfigMap",
|
||||
"internal.config.kubernetes.io/previousNames": "alice",
|
||||
"internal.config.kubernetes.io/previousNamespaces": "default",
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -356,9 +356,9 @@ func TestGetMatchingResourcesByAnyId(t *testing.T) {
|
||||
"metadata": map[string]interface{}{
|
||||
"name": "new-bob",
|
||||
"annotations": map[string]interface{}{
|
||||
"config.kubernetes.io/previousKinds": "ConfigMap,ConfigMap",
|
||||
"config.kubernetes.io/previousNames": "bob,bob2",
|
||||
"config.kubernetes.io/previousNamespaces": "default,default",
|
||||
"internal.config.kubernetes.io/previousKinds": "ConfigMap,ConfigMap",
|
||||
"internal.config.kubernetes.io/previousNames": "bob,bob2",
|
||||
"internal.config.kubernetes.io/previousNamespaces": "default,default",
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -370,9 +370,9 @@ func TestGetMatchingResourcesByAnyId(t *testing.T) {
|
||||
"name": "new-bob",
|
||||
"namespace": "new-happy",
|
||||
"annotations": map[string]interface{}{
|
||||
"config.kubernetes.io/previousKinds": "ConfigMap",
|
||||
"config.kubernetes.io/previousNames": "bob",
|
||||
"config.kubernetes.io/previousNamespaces": "happy",
|
||||
"internal.config.kubernetes.io/previousKinds": "ConfigMap",
|
||||
"internal.config.kubernetes.io/previousNames": "bob",
|
||||
"internal.config.kubernetes.io/previousNamespaces": "happy",
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -384,9 +384,9 @@ func TestGetMatchingResourcesByAnyId(t *testing.T) {
|
||||
"name": "charlie",
|
||||
"namespace": "happy",
|
||||
"annotations": map[string]interface{}{
|
||||
"config.kubernetes.io/previousKinds": "ConfigMap",
|
||||
"config.kubernetes.io/previousNames": "charlie",
|
||||
"config.kubernetes.io/previousNamespaces": "default",
|
||||
"internal.config.kubernetes.io/previousKinds": "ConfigMap",
|
||||
"internal.config.kubernetes.io/previousNames": "charlie",
|
||||
"internal.config.kubernetes.io/previousNamespaces": "default",
|
||||
},
|
||||
},
|
||||
})
|
||||
@@ -845,6 +845,8 @@ func TestAbsorbAll(t *testing.T) {
|
||||
}))
|
||||
w := makeMap1()
|
||||
assert.NoError(t, w.AbsorbAll(makeMap2(types.BehaviorMerge)))
|
||||
expected.RemoveBuildAnnotations()
|
||||
w.RemoveBuildAnnotations()
|
||||
assert.NoError(t, expected.ErrorIfNotEqualLists(w))
|
||||
w = makeMap1()
|
||||
assert.NoError(t, w.AbsorbAll(nil))
|
||||
@@ -853,6 +855,7 @@ func TestAbsorbAll(t *testing.T) {
|
||||
w = makeMap1()
|
||||
w2 := makeMap2(types.BehaviorReplace)
|
||||
assert.NoError(t, w.AbsorbAll(w2))
|
||||
w2.RemoveBuildAnnotations()
|
||||
assert.NoError(t, w2.ErrorIfNotEqualLists(w))
|
||||
w = makeMap1()
|
||||
w2 = makeMap2(types.BehaviorUnspecified)
|
||||
|
||||
@@ -75,7 +75,9 @@ func (rf *Factory) makeOne(rn *yaml.RNode, o *types.GenArgs) *Resource {
|
||||
if o == nil {
|
||||
o = types.NewGenArgs(nil)
|
||||
}
|
||||
return &Resource{RNode: *rn, options: o}
|
||||
resource := &Resource{RNode: *rn}
|
||||
resource.SetOptions(o)
|
||||
return resource
|
||||
}
|
||||
|
||||
// SliceFromPatches returns a slice of resources given a patch path
|
||||
|
||||
@@ -22,7 +22,6 @@ import (
|
||||
// paired with metadata used by kustomize.
|
||||
type Resource struct {
|
||||
kyaml.RNode
|
||||
options *types.GenArgs
|
||||
refVarNames []string
|
||||
}
|
||||
|
||||
@@ -35,6 +34,7 @@ var BuildAnnotations = []string{
|
||||
utils.BuildAnnotationAllowNameChange,
|
||||
utils.BuildAnnotationAllowKindChange,
|
||||
utils.BuildAnnotationsRefBy,
|
||||
utils.BuildAnnotationsGenOptions,
|
||||
}
|
||||
|
||||
func (r *Resource) ResetRNode(incoming *Resource) {
|
||||
@@ -80,6 +80,8 @@ func (r *Resource) DeepCopy() *Resource {
|
||||
// CopyMergeMetaDataFieldsFrom copies everything but the non-metadata in
|
||||
// the resource.
|
||||
// TODO: move to RNode, use GetMeta to improve performance.
|
||||
// TODO: make a version of mergeStringMaps that is build-annotation aware
|
||||
// to avoid repeatedly setting refby and genargs annotations
|
||||
// Must remove the kustomize bit at the end.
|
||||
func (r *Resource) CopyMergeMetaDataFieldsFrom(other *Resource) error {
|
||||
if err := r.SetLabels(
|
||||
@@ -87,7 +89,7 @@ func (r *Resource) CopyMergeMetaDataFieldsFrom(other *Resource) error {
|
||||
return fmt.Errorf("copyMerge cannot set labels - %w", err)
|
||||
}
|
||||
if err := r.SetAnnotations(
|
||||
mergeStringMaps(other.GetAnnotations(), r.GetAnnotations())); err != nil {
|
||||
mergeStringMapsWithBuildAnnotations(other.GetAnnotations(), r.GetAnnotations())); err != nil {
|
||||
return fmt.Errorf("copyMerge cannot set annotations - %w", err)
|
||||
}
|
||||
if err := r.SetName(other.GetName()); err != nil {
|
||||
@@ -101,7 +103,6 @@ func (r *Resource) CopyMergeMetaDataFieldsFrom(other *Resource) error {
|
||||
}
|
||||
|
||||
func (r *Resource) copyKustomizeSpecificFields(other *Resource) {
|
||||
r.options = other.options
|
||||
r.refVarNames = copyStringSlice(other.refVarNames)
|
||||
}
|
||||
|
||||
@@ -274,7 +275,7 @@ func (r *Resource) String() string {
|
||||
if err != nil {
|
||||
return "<" + err.Error() + ">"
|
||||
}
|
||||
return strings.TrimSpace(string(bs)) + r.options.String()
|
||||
return strings.TrimSpace(string(bs))
|
||||
}
|
||||
|
||||
// AsYAML returns the resource in Yaml form.
|
||||
@@ -296,20 +297,43 @@ func (r *Resource) MustYaml() string {
|
||||
return string(yml)
|
||||
}
|
||||
|
||||
func (r *Resource) getGenArgs() *types.GenArgs {
|
||||
annotations := r.GetAnnotations()
|
||||
if genOptsAnno, ok := annotations[utils.BuildAnnotationsGenOptions]; ok {
|
||||
var genOpts types.GeneratorArgs
|
||||
yaml.Unmarshal([]byte(genOptsAnno), &genOpts)
|
||||
return types.NewGenArgs(&genOpts)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// SetOptions updates the generator options for the resource.
|
||||
func (r *Resource) SetOptions(o *types.GenArgs) {
|
||||
r.options = o
|
||||
annotations := r.GetAnnotations()
|
||||
if o.IsNilOrEmpty() {
|
||||
if len(annotations) == 0 {
|
||||
return
|
||||
}
|
||||
if o == nil {
|
||||
delete(annotations, utils.BuildAnnotationsGenOptions)
|
||||
}
|
||||
} else {
|
||||
b, _ := o.AsYaml()
|
||||
annotations[utils.BuildAnnotationsGenOptions] = string(b)
|
||||
}
|
||||
r.SetAnnotations(annotations)
|
||||
}
|
||||
|
||||
// Behavior returns the behavior for the resource.
|
||||
func (r *Resource) Behavior() types.GenerationBehavior {
|
||||
return r.options.Behavior()
|
||||
return r.getGenArgs().Behavior()
|
||||
}
|
||||
|
||||
// NeedHashSuffix returns true if a resource content
|
||||
// hash should be appended to the name of the resource.
|
||||
func (r *Resource) NeedHashSuffix() bool {
|
||||
return r.options != nil && r.options.ShouldAddHashSuffixToName()
|
||||
options := r.getGenArgs()
|
||||
return options != nil && options.ShouldAddHashSuffixToName()
|
||||
}
|
||||
|
||||
// OrgId returns the original, immutable ResId for the resource.
|
||||
@@ -420,3 +444,17 @@ func mergeStringMaps(maps ...map[string]string) map[string]string {
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
func mergeStringMapsWithBuildAnnotations(maps ...map[string]string) map[string]string {
|
||||
result := mergeStringMaps(maps...)
|
||||
for i := range BuildAnnotations {
|
||||
if len(maps) > 0 {
|
||||
if v, ok := maps[0][BuildAnnotations[i]]; ok {
|
||||
result[BuildAnnotations[i]] = v
|
||||
continue
|
||||
}
|
||||
}
|
||||
delete(result, BuildAnnotations[i])
|
||||
}
|
||||
return result
|
||||
}
|
||||
|
||||
@@ -28,10 +28,10 @@ var testConfigMap = factory.FromMap(
|
||||
},
|
||||
})
|
||||
|
||||
const genArgOptions = "{nsfx:false,beh:unspecified}"
|
||||
|
||||
//nolint:gosec
|
||||
const configMapAsString = `{"apiVersion":"v1","kind":"ConfigMap","metadata":{"name":"winnie","namespace":"hundred-acre-wood"}}`
|
||||
const configMapAsStringWithOptions = `{"apiVersion":"v1","kind":"ConfigMap","metadata":{"annotations":` +
|
||||
`{"internal.config.kubernetes.io/generatorOptions":"{}\n"},"name":"winnie","namespace":"hundred-acre-wood"}}`
|
||||
|
||||
var testDeployment = factory.FromMap(
|
||||
map[string]interface{}{
|
||||
@@ -43,6 +43,8 @@ var testDeployment = factory.FromMap(
|
||||
})
|
||||
|
||||
const deploymentAsString = `{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"name":"pooh"}}`
|
||||
const deploymentAsStringWithOptions = `{"apiVersion":"apps/v1","kind":"Deployment","metadata":{"annotations":` +
|
||||
`{"internal.config.kubernetes.io/generatorOptions":"{}\n"},"name":"pooh"}}`
|
||||
|
||||
func TestAsYAML(t *testing.T) {
|
||||
expected := `apiVersion: apps/v1
|
||||
@@ -66,17 +68,37 @@ func TestResourceString(t *testing.T) {
|
||||
}{
|
||||
{
|
||||
in: testConfigMap,
|
||||
s: configMapAsString + genArgOptions,
|
||||
s: configMapAsString,
|
||||
},
|
||||
{
|
||||
in: testDeployment,
|
||||
s: deploymentAsString + genArgOptions,
|
||||
s: deploymentAsString,
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
if test.in.String() != test.s {
|
||||
t.Fatalf("Expected %s == %s", test.in.String(), test.s)
|
||||
}
|
||||
assert.Equal(t, test.in.String(), test.s)
|
||||
}
|
||||
}
|
||||
|
||||
func TestResourceStringWithOptionsAnnotations(t *testing.T) {
|
||||
tests := []struct {
|
||||
in *Resource
|
||||
s string
|
||||
}{
|
||||
{
|
||||
in: testConfigMap,
|
||||
s: configMapAsStringWithOptions,
|
||||
},
|
||||
{
|
||||
in: testDeployment,
|
||||
s: deploymentAsStringWithOptions,
|
||||
},
|
||||
}
|
||||
for _, test := range tests {
|
||||
args := &types.GeneratorArgs{}
|
||||
options := types.NewGenArgs(args)
|
||||
test.in.SetOptions(options)
|
||||
assert.Equal(t, test.in.String(), test.s)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -717,9 +739,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret
|
||||
config.kubernetes.io/previousNames: oldName
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/previousKinds: Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
name: newName
|
||||
`,
|
||||
},
|
||||
@@ -729,9 +751,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret
|
||||
config.kubernetes.io/previousNames: oldName
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/previousKinds: Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
name: oldName2
|
||||
`,
|
||||
newName: "newName",
|
||||
@@ -740,9 +762,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret,Secret
|
||||
config.kubernetes.io/previousNames: oldName,oldName2
|
||||
config.kubernetes.io/previousNamespaces: default,default
|
||||
internal.config.kubernetes.io/previousKinds: Secret,Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName,oldName2
|
||||
internal.config.kubernetes.io/previousNamespaces: default,default
|
||||
name: newName
|
||||
`,
|
||||
},
|
||||
@@ -752,9 +774,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret
|
||||
config.kubernetes.io/previousNames: oldName
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/previousKinds: Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
name: oldName2
|
||||
namespace: oldNamespace
|
||||
`,
|
||||
@@ -764,9 +786,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret,Secret
|
||||
config.kubernetes.io/previousNames: oldName,oldName2
|
||||
config.kubernetes.io/previousNamespaces: default,oldNamespace
|
||||
internal.config.kubernetes.io/previousKinds: Secret,Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName,oldName2
|
||||
internal.config.kubernetes.io/previousNamespaces: default,oldNamespace
|
||||
name: newName
|
||||
namespace: newNamespace
|
||||
`,
|
||||
@@ -814,9 +836,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret
|
||||
config.kubernetes.io/previousNames: oldName
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/previousKinds: Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
name: newName
|
||||
`,
|
||||
expected: []resid.ResId{
|
||||
@@ -833,9 +855,9 @@ metadata:
|
||||
kind: Secret
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/previousKinds: Secret,Secret
|
||||
config.kubernetes.io/previousNames: oldName,oldName2
|
||||
config.kubernetes.io/previousNamespaces: default,oldNamespace
|
||||
internal.config.kubernetes.io/previousKinds: Secret,Secret
|
||||
internal.config.kubernetes.io/previousNames: oldName,oldName2
|
||||
internal.config.kubernetes.io/previousNamespaces: default,oldNamespace
|
||||
name: newName
|
||||
namespace: newNamespace
|
||||
`,
|
||||
@@ -1150,7 +1172,7 @@ kind: Deployment
|
||||
metadata:
|
||||
name: clown
|
||||
annotations:
|
||||
config.kubernetes.io/refBy: gr1_ver1_knd1|ns1|name1
|
||||
internal.config.kubernetes.io/refBy: gr1_ver1_knd1|ns1|name1
|
||||
spec:
|
||||
numReplicas: 1
|
||||
`)
|
||||
@@ -1162,7 +1184,7 @@ kind: Deployment
|
||||
metadata:
|
||||
name: clown
|
||||
annotations:
|
||||
config.kubernetes.io/refBy: gr1_ver1_knd1|ns1|name1,gr2_ver2_knd2|ns2|name2
|
||||
internal.config.kubernetes.io/refBy: gr1_ver1_knd1|ns1|name1,gr2_ver2_knd2|ns2|name2
|
||||
spec:
|
||||
numReplicas: 1
|
||||
`)
|
||||
@@ -1171,3 +1193,35 @@ spec:
|
||||
resid.FromString("gr2_ver2_knd2|ns2|name2"),
|
||||
})
|
||||
}
|
||||
|
||||
func TestOptions(t *testing.T) {
|
||||
r, err := factory.FromBytes([]byte(`
|
||||
apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: example-configmap-test
|
||||
`))
|
||||
assert.NoError(t, err)
|
||||
|
||||
args := &types.GeneratorArgs{
|
||||
Behavior: "merge",
|
||||
Options: &types.GeneratorOptions{
|
||||
DisableNameSuffixHash: true,
|
||||
},
|
||||
}
|
||||
|
||||
options := types.NewGenArgs(args)
|
||||
r.SetOptions(options)
|
||||
assert.Equal(t, r.RNode.MustString(), `apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
name: example-configmap-test
|
||||
annotations:
|
||||
internal.config.kubernetes.io/generatorOptions: |
|
||||
behavior: merge
|
||||
options:
|
||||
disableNameSuffixHash: true
|
||||
`)
|
||||
assert.Equal(t, r.Behavior(), types.BehaviorMerge)
|
||||
assert.Equal(t, r.NeedHashSuffix(), !args.Options.DisableNameSuffixHash)
|
||||
}
|
||||
|
||||
@@ -148,6 +148,13 @@ func (th *HarnessEnhanced) ResetLoaderRoot(root string) {
|
||||
}
|
||||
|
||||
func (th *HarnessEnhanced) LoadAndRunGenerator(
|
||||
config string) resmap.ResMap {
|
||||
rm := th.LoadAndRunGeneratorWithBuildAnnotations(config)
|
||||
rm.RemoveBuildAnnotations()
|
||||
return rm
|
||||
}
|
||||
|
||||
func (th *HarnessEnhanced) LoadAndRunGeneratorWithBuildAnnotations(
|
||||
config string) resmap.ResMap {
|
||||
res, err := th.rf.RF().FromBytes([]byte(config))
|
||||
if err != nil {
|
||||
@@ -162,7 +169,6 @@ func (th *HarnessEnhanced) LoadAndRunGenerator(
|
||||
if err != nil {
|
||||
th.t.Fatalf("generate err: %v", err)
|
||||
}
|
||||
rm.RemoveBuildAnnotations()
|
||||
return rm
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@ package types
|
||||
import (
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"sigs.k8s.io/kustomize/kyaml/yaml"
|
||||
)
|
||||
|
||||
// GenArgs is a facade over GeneratorArgs, exposing a few readonly properties.
|
||||
@@ -44,3 +46,16 @@ func (g *GenArgs) Behavior() GenerationBehavior {
|
||||
}
|
||||
return NewGenerationBehavior(g.args.Behavior)
|
||||
}
|
||||
|
||||
// IsNilOrEmpty returns true if g is nil or if the args are empty
|
||||
func (g *GenArgs) IsNilOrEmpty() bool {
|
||||
return g == nil || g.args == nil
|
||||
}
|
||||
|
||||
// AsYaml returns a yaml marshalling of the underlying Genargs
|
||||
func (g *GenArgs) AsYaml() ([]byte, error) {
|
||||
if g == nil {
|
||||
return yaml.Marshal(nil)
|
||||
}
|
||||
return yaml.Marshal(g.args)
|
||||
}
|
||||
|
||||
@@ -19,4 +19,4 @@ require (
|
||||
sigs.k8s.io/kustomize/kyaml v0.11.0
|
||||
)
|
||||
|
||||
replace sigs.k8s.io/kustomize/kyaml => ../../kyaml
|
||||
replace sigs.k8s.io/kustomize/kyaml => ../../kyaml
|
||||
|
||||
@@ -23,4 +23,4 @@ replace sigs.k8s.io/kustomize/api => ../api
|
||||
|
||||
replace sigs.k8s.io/kustomize/cmd/config => ../cmd/config
|
||||
|
||||
replace sigs.k8s.io/kustomize/kyaml => ../kyaml
|
||||
replace sigs.k8s.io/kustomize/kyaml => ../kyaml
|
||||
|
||||
@@ -63,11 +63,11 @@ apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/prefixes: baked-
|
||||
config.kubernetes.io/previousKinds: Service
|
||||
config.kubernetes.io/previousNames: apple
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
config.kubernetes.io/suffixes: -pie
|
||||
internal.config.kubernetes.io/prefixes: baked-
|
||||
internal.config.kubernetes.io/previousKinds: Service
|
||||
internal.config.kubernetes.io/previousNames: apple
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/suffixes: -pie
|
||||
name: baked-apple-pie
|
||||
spec:
|
||||
ports:
|
||||
@@ -87,11 +87,11 @@ apiVersion: v1
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/prefixes: baked-
|
||||
config.kubernetes.io/previousKinds: ConfigMap
|
||||
config.kubernetes.io/previousNames: cm
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
config.kubernetes.io/suffixes: -pie
|
||||
internal.config.kubernetes.io/prefixes: baked-
|
||||
internal.config.kubernetes.io/previousKinds: ConfigMap
|
||||
internal.config.kubernetes.io/previousNames: cm
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/suffixes: -pie
|
||||
name: baked-cm-pie
|
||||
`)
|
||||
|
||||
@@ -139,10 +139,10 @@ apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
annotations:
|
||||
config.kubernetes.io/prefixes: test-
|
||||
config.kubernetes.io/previousKinds: Deployment
|
||||
config.kubernetes.io/previousNames: deployment
|
||||
config.kubernetes.io/previousNamespaces: default
|
||||
internal.config.kubernetes.io/prefixes: test-
|
||||
internal.config.kubernetes.io/previousKinds: Deployment
|
||||
internal.config.kubernetes.io/previousNames: deployment
|
||||
internal.config.kubernetes.io/previousNamespaces: default
|
||||
name: test-deployment
|
||||
spec:
|
||||
template:
|
||||
|
||||
@@ -14,7 +14,7 @@ func TestBashedConfigMapPlugin(t *testing.T) {
|
||||
PrepExecPlugin("someteam.example.com", "v1", "BashedConfigMap")
|
||||
defer th.Reset()
|
||||
|
||||
m := th.LoadAndRunGenerator(`
|
||||
m := th.LoadAndRunGeneratorWithBuildAnnotations(`
|
||||
apiVersion: someteam.example.com/v1
|
||||
kind: BashedConfigMap
|
||||
metadata:
|
||||
@@ -28,6 +28,9 @@ data:
|
||||
username: alice
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
annotations:
|
||||
internal.config.kubernetes.io/generatorOptions: |
|
||||
options: {}
|
||||
name: example-configmap-test
|
||||
`)
|
||||
if m.Resources()[0].NeedHashSuffix() != true {
|
||||
|
||||
Reference in New Issue
Block a user