@@ -122,6 +122,177 @@ type: Opaque
122122` )
123123}
124124
125+ func TestSecretGeneratorStringDataFromProperties (t * testing.T ) {
126+ th := kusttest_test .MakeHarness (t )
127+ th .WriteK ("base" , `
128+ secretGenerator:
129+ - name: test-secret
130+ behavior: create
131+ envs:
132+ - properties
133+ ` )
134+ th .WriteF ("base/properties" , `
135+ VAR1=100
136+ ` )
137+ th .WriteK ("overlay" , `
138+ resources:
139+ - ../base
140+ secretGenerator:
141+ - name: test-secret
142+ stringData: true
143+ behavior: "merge"
144+ envs:
145+ - properties
146+ ` )
147+ th .WriteF ("overlay/properties" , `
148+ VAR2=200
149+ ` )
150+ m := th .Run ("overlay" , th .MakeDefaultOptions ())
151+ th .AssertActualEqualsExpected (m , `
152+ apiVersion: v1
153+ data:
154+ VAR1: MTAw
155+ kind: Secret
156+ metadata:
157+ name: test-secret-cbkdg78c5m
158+ stringData:
159+ VAR2: "200"
160+ type: Opaque
161+ ` )
162+ }
163+
164+ // Generate Secrets similar to TestGeneratorBasics with stringData enabled and
165+ // disabled.
166+ func TestSecretGeneratorStringData (t * testing.T ) {
167+ th := kusttest_test .MakeHarness (t )
168+ th .WriteK ("." , `
169+ namePrefix: blah-
170+ secretGenerator:
171+ - name: bob
172+ literals:
173+ - fruit=apple
174+ - vegetable=broccoli
175+ envs:
176+ - foo.env
177+ env: bar.env
178+ files:
179+ - passphrase=phrase.dat
180+ - forces.txt
181+ - name: json
182+ literals:
183+ - 'v2=[{"path": "var/druid/segment-cache"}]'
184+ - >-
185+ druid_segmentCache_locations=[{"path":
186+ "var/druid/segment-cache",
187+ "maxSize": 32000000000,
188+ "freeSpacePercent": 1.0}]
189+ - name: bob-string-data
190+ stringData: true
191+ literals:
192+ - fruit=apple
193+ - vegetable=broccoli
194+ envs:
195+ - foo.env
196+ env: bar.env
197+ files:
198+ - passphrase=phrase.dat
199+ - forces.txt
200+ - name: json-string-data
201+ stringData: true
202+ literals:
203+ - 'v2=[{"path": "var/druid/segment-cache"}]'
204+ - >-
205+ druid_segmentCache_locations=[{"path":
206+ "var/druid/segment-cache",
207+ "maxSize": 32000000000,
208+ "freeSpacePercent": 1.0}]
209+ ` )
210+ th .WriteF ("foo.env" , `
211+ MOUNTAIN=everest
212+ OCEAN=pacific
213+ ` )
214+ th .WriteF ("bar.env" , `
215+ BIRD=falcon
216+ ` )
217+ th .WriteF ("phrase.dat" , `
218+ Life is short.
219+ But the years are long.
220+ Not while the evil days come not.
221+ ` )
222+ th .WriteF ("forces.txt" , `
223+ gravitational
224+ electromagnetic
225+ strong nuclear
226+ weak nuclear
227+ ` )
228+ opts := th .MakeDefaultOptions ()
229+ m := th .Run ("." , opts )
230+ th .AssertActualEqualsExpected (
231+ m , `
232+ apiVersion: v1
233+ data:
234+ BIRD: ZmFsY29u
235+ MOUNTAIN: ZXZlcmVzdA==
236+ OCEAN: cGFjaWZpYw==
237+ forces.txt: |
238+ CmdyYXZpdGF0aW9uYWwKZWxlY3Ryb21hZ25ldGljCnN0cm9uZyBudWNsZWFyCndlYWsgbn
239+ VjbGVhcgo=
240+ fruit: YXBwbGU=
241+ passphrase: |
242+ CkxpZmUgaXMgc2hvcnQuCkJ1dCB0aGUgeWVhcnMgYXJlIGxvbmcuCk5vdCB3aGlsZSB0aG
243+ UgZXZpbCBkYXlzIGNvbWUgbm90Lgo=
244+ vegetable: YnJvY2NvbGk=
245+ kind: Secret
246+ metadata:
247+ name: blah-bob-58g62h555c
248+ type: Opaque
249+ ---
250+ apiVersion: v1
251+ data:
252+ druid_segmentCache_locations: |
253+ W3sicGF0aCI6ICJ2YXIvZHJ1aWQvc2VnbWVudC1jYWNoZSIsICJtYXhTaXplIjogMzIwMD
254+ AwMDAwMDAsICJmcmVlU3BhY2VQZXJjZW50IjogMS4wfV0=
255+ v2: W3sicGF0aCI6ICJ2YXIvZHJ1aWQvc2VnbWVudC1jYWNoZSJ9XQ==
256+ kind: Secret
257+ metadata:
258+ name: blah-json-5cdg9f2644
259+ type: Opaque
260+ ---
261+ apiVersion: v1
262+ kind: Secret
263+ metadata:
264+ name: blah-bob-string-data-5g7kgmf529
265+ stringData:
266+ BIRD: falcon
267+ MOUNTAIN: everest
268+ OCEAN: pacific
269+ forces.txt: |2
270+
271+ gravitational
272+ electromagnetic
273+ strong nuclear
274+ weak nuclear
275+ fruit: apple
276+ passphrase: |2
277+
278+ Life is short.
279+ But the years are long.
280+ Not while the evil days come not.
281+ vegetable: broccoli
282+ type: Opaque
283+ ---
284+ apiVersion: v1
285+ kind: Secret
286+ metadata:
287+ name: blah-json-string-data-g7ktb2m7bm
288+ stringData:
289+ druid_segmentCache_locations: '[{"path": "var/druid/segment-cache", "maxSize": 32000000000,
290+ "freeSpacePercent": 1.0}]'
291+ v2: '[{"path": "var/druid/segment-cache"}]'
292+ type: Opaque
293+ ` )
294+ }
295+
125296// TODO: This should be an error instead. However, we can't strict unmarshal until we have a yaml
126297// lib that support case-insensitive keys and anchors.
127298// See https://github.com/kubernetes-sigs/kustomize/issues/5061
@@ -289,6 +460,92 @@ type: Opaque
289460` )
290461}
291462
463+ func TestSecretGeneratorOverlaysBinaryDataStringDataFallback (t * testing.T ) {
464+ th := kusttest_test .MakeHarness (t )
465+ th .WriteF ("base/data.bin" , string (manyHunter2s (30 )))
466+ th .WriteK ("base" , `
467+ namePrefix: p1-
468+ secretGenerator:
469+ - name: com1
470+ stringData: true
471+ behavior: create
472+ files:
473+ - data.bin
474+ ` )
475+ th .WriteK ("overlay" , `
476+ resources:
477+ - ../base
478+ secretGenerator:
479+ - name: com1
480+ behavior: merge
481+ ` )
482+ m := th .Run ("overlay" , th .MakeDefaultOptions ())
483+ th .AssertActualEqualsExpected (m , `
484+ apiVersion: v1
485+ data:
486+ data.bin: |
487+ /2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bn
488+ RlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/
489+ aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudG
490+ VyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9o
491+ dW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy
492+ kind: Secret
493+ metadata:
494+ name: p1-com1-4k9fgt2gct
495+ type: Opaque
496+ ` )
497+ }
498+
499+ func TestSecretGeneratorMixedStringDataFallback (t * testing.T ) {
500+ th := kusttest_test .MakeHarness (t )
501+ th .WriteF ("base/data.bin" , string (manyHunter2s (30 )))
502+ th .WriteF ("base/forces.txt" , `
503+ gravitational
504+ electromagnetic
505+ strong nuclear
506+ weak nuclear
507+ ` )
508+ th .WriteK ("base" , `
509+ namePrefix: p1-
510+ secretGenerator:
511+ - name: com1
512+ stringData: true
513+ behavior: create
514+ files:
515+ - data.bin
516+ - forces.txt
517+ literals:
518+ - fruit=Mango
519+ - year=2025
520+ - crisis=true
521+ ` )
522+ m := th .Run ("base" , th .MakeDefaultOptions ())
523+ th .AssertActualEqualsExpected (m , `
524+ apiVersion: v1
525+ data:
526+ data.bin: |
527+ /2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bn
528+ RlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/
529+ aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudG
530+ VyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy/2h1bnRlcjL/aHVudGVyMv9o
531+ dW50ZXIy/2h1bnRlcjL/aHVudGVyMv9odW50ZXIy
532+ kind: Secret
533+ metadata:
534+ name: p1-com1-8k8d8b8g5b
535+ stringData:
536+ crisis: "true"
537+ forces.txt: |2
538+
539+ gravitational
540+ electromagnetic
541+ strong nuclear
542+ weak nuclear
543+ fruit: Mango
544+ year: "2025"
545+ type: Opaque
546+ ` )
547+ }
548+
292549func TestSecretGeneratorOverlays (t * testing.T ) {
293550 th := kusttest_test .MakeHarness (t )
294551 th .WriteK ("base1" , `
0 commit comments