@@ -122,6 +122,177 @@ type: Opaque
122
122
` )
123
123
}
124
124
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
+
125
296
// TODO: This should be an error instead. However, we can't strict unmarshal until we have a yaml
126
297
// lib that support case-insensitive keys and anchors.
127
298
// See https://github.com/kubernetes-sigs/kustomize/issues/5061
@@ -289,6 +460,92 @@ type: Opaque
289
460
` )
290
461
}
291
462
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
+
292
549
func TestSecretGeneratorOverlays (t * testing.T ) {
293
550
th := kusttest_test .MakeHarness (t )
294
551
th .WriteK ("base1" , `
0 commit comments