diff --git a/api/internal/generators/configmap.go b/api/internal/generators/configmap.go index 19a0e2832..982ff684f 100644 --- a/api/internal/generators/configmap.go +++ b/api/internal/generators/configmap.go @@ -41,5 +41,6 @@ func MakeConfigMap( return nil, err } copyLabelsAndAnnotations(rn, args.Options) + setImmutable(rn, args.Options) return rn, nil } diff --git a/api/internal/generators/configmap_test.go b/api/internal/generators/configmap_test.go index 81b311a19..ef208d194 100644 --- a/api/internal/generators/configmap_test.go +++ b/api/internal/generators/configmap_test.go @@ -163,6 +163,7 @@ data: "river": "Missouri", "city": "Iowa City", }, + Immutable: true, }, }, }, @@ -183,6 +184,7 @@ data: b: y c: Hello World d: "true" +immutable: true `, }, }, diff --git a/api/internal/generators/secret.go b/api/internal/generators/secret.go index a46f497db..9afaff156 100644 --- a/api/internal/generators/secret.go +++ b/api/internal/generators/secret.go @@ -54,5 +54,6 @@ func MakeSecret( return nil, err } copyLabelsAndAnnotations(rn, args.Options) + setImmutable(rn, args.Options) return rn, nil } diff --git a/api/internal/generators/secret_test.go b/api/internal/generators/secret_test.go index 51097b57d..53458fe19 100644 --- a/api/internal/generators/secret_test.go +++ b/api/internal/generators/secret_test.go @@ -170,6 +170,7 @@ data: "river": "Missouri", "city": "Iowa City", }, + Immutable: true, }, }, }, @@ -191,6 +192,7 @@ data: b: eQ== c: SGVsbG8gV29ybGQ= d: dHJ1ZQ== +immutable: true `, }, }, diff --git a/api/internal/generators/utils.go b/api/internal/generators/utils.go index d1630fc84..82040d420 100644 --- a/api/internal/generators/utils.go +++ b/api/internal/generators/utils.go @@ -76,3 +76,16 @@ func copyLabelsAndAnnotations( } return nil } + +func setImmutable( + rn *yaml.RNode, opts *types.GeneratorOptions) error { + if opts == nil { + return nil + } + if opts.Immutable { + if _, err := rn.Pipe(yaml.SetField("immutable", yaml.NewScalarRNode("true"))); err != nil { + return err + } + } + return nil +} diff --git a/api/types/generatoroptions.go b/api/types/generatoroptions.go index c30f6517d..683d89bfd 100644 --- a/api/types/generatoroptions.go +++ b/api/types/generatoroptions.go @@ -15,6 +15,9 @@ type GeneratorOptions struct { // suffix to the names of generated resources that is a hash of the // resource contents. DisableNameSuffixHash bool `json:"disableNameSuffixHash,omitempty" yaml:"disableNameSuffixHash,omitempty"` + + // Immutable if true add to all generated resources. + Immutable bool `json:"immutable,omitempty" yaml:"immutable,omitempty"` } // MergeGlobalOptionsIntoLocal merges two instances of GeneratorOptions. @@ -42,6 +45,9 @@ func MergeGlobalOptionsIntoLocal( if globalOpts.DisableNameSuffixHash { localOpts.DisableNameSuffixHash = true } + if globalOpts.Immutable { + localOpts.Immutable = true + } return localOpts } diff --git a/api/types/generatoroptions_test.go b/api/types/generatoroptions_test.go index e4a0ae2c0..a8bf634c3 100644 --- a/api/types/generatoroptions_test.go +++ b/api/types/generatoroptions_test.go @@ -34,6 +34,7 @@ func TestMergeGlobalOptionsIntoLocal(t *testing.T) { Labels: map[string]string{"pet": "dog"}, Annotations: map[string]string{"fruit": "apple"}, DisableNameSuffixHash: false, + Immutable: false, }, }, { @@ -47,6 +48,7 @@ func TestMergeGlobalOptionsIntoLocal(t *testing.T) { Labels: map[string]string{"pet": "dog"}, Annotations: map[string]string{"fruit": "apple"}, DisableNameSuffixHash: false, + Immutable: false, }, }, { @@ -76,42 +78,52 @@ func TestMergeGlobalOptionsIntoLocal(t *testing.T) { "tesla": "Y", }, DisableNameSuffixHash: false, + Immutable: false, }, }, { name: "global disable trumps local", local: &GeneratorOptions{ DisableNameSuffixHash: false, + Immutable: false, }, global: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, expected: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, }, { name: "local disable works", local: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, global: &GeneratorOptions{ DisableNameSuffixHash: false, + Immutable: false, }, expected: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, }, { name: "everyone wants disable", local: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, global: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, expected: &GeneratorOptions{ DisableNameSuffixHash: true, + Immutable: true, }, }, }