1
2
3
4 package krusty_test
5
6 import (
7 "testing"
8
9 kusttest_test "sigs.k8s.io/kustomize/api/testutils/kusttest"
10 )
11
12
13 func TestReplacementsField(t *testing.T) {
14 th := kusttest_test.MakeEnhancedHarness(t)
15 defer th.Reset()
16
17 th.WriteK(".", `
18 resources:
19 - resource.yaml
20
21 replacements:
22 - source:
23 kind: Deployment
24 fieldPath: spec.template.spec.containers.0.image
25 targets:
26 - select:
27 kind: Deployment
28 fieldPaths:
29 - spec.template.spec.containers.1.image
30 `)
31 th.WriteF("resource.yaml", `
32 apiVersion: apps/v1
33 kind: Deployment
34 metadata:
35 name: deploy
36 spec:
37 template:
38 spec:
39 containers:
40 - image: foobar:1
41 name: replaced-with-digest
42 - image: postgres:1.8.0
43 name: postgresdb
44 `)
45 expected := `
46 apiVersion: apps/v1
47 kind: Deployment
48 metadata:
49 name: deploy
50 spec:
51 template:
52 spec:
53 containers:
54 - image: foobar:1
55 name: replaced-with-digest
56 - image: foobar:1
57 name: postgresdb
58 `
59 m := th.Run(".", th.MakeDefaultOptions())
60 th.AssertActualEqualsExpected(m, expected)
61 }
62
63 func TestReplacementsFieldWithPath(t *testing.T) {
64 th := kusttest_test.MakeEnhancedHarness(t)
65 defer th.Reset()
66
67 th.WriteK(".", `
68 resources:
69 - resource.yaml
70
71 replacements:
72 - path: replacement.yaml
73 `)
74 th.WriteF("replacement.yaml", `
75 source:
76 kind: Deployment
77 fieldPath: spec.template.spec.containers.0.image
78 targets:
79 - select:
80 kind: Deployment
81 fieldPaths:
82 - spec.template.spec.containers.1.image
83 `)
84 th.WriteF("resource.yaml", `
85 apiVersion: apps/v1
86 kind: Deployment
87 metadata:
88 name: deploy
89 spec:
90 template:
91 spec:
92 containers:
93 - image: foobar:1
94 name: replaced-with-digest
95 - image: postgres:1.8.0
96 name: postgresdb
97 `)
98 expected := `
99 apiVersion: apps/v1
100 kind: Deployment
101 metadata:
102 name: deploy
103 spec:
104 template:
105 spec:
106 containers:
107 - image: foobar:1
108 name: replaced-with-digest
109 - image: foobar:1
110 name: postgresdb
111 `
112 m := th.Run(".", th.MakeDefaultOptions())
113 th.AssertActualEqualsExpected(m, expected)
114 }
115
116 func TestReplacementsFieldWithPathMultiple(t *testing.T) {
117 th := kusttest_test.MakeEnhancedHarness(t)
118 defer th.Reset()
119
120 th.WriteK(".", `
121 resources:
122 - resource.yaml
123
124 replacements:
125 - path: replacement.yaml
126 `)
127 th.WriteF("replacement.yaml", `
128 - source:
129 kind: Deployment
130 fieldPath: spec.template.spec.containers.0.image
131 targets:
132 - select:
133 kind: Deployment
134 fieldPaths:
135 - spec.template.spec.containers.1.image
136 - source:
137 kind: Deployment
138 fieldPath: spec.template.spec.containers.0.name
139 targets:
140 - select:
141 kind: Deployment
142 fieldPaths:
143 - spec.template.spec.containers.1.name
144 `)
145 th.WriteF("resource.yaml", `
146 apiVersion: apps/v1
147 kind: Deployment
148 metadata:
149 name: deploy
150 spec:
151 template:
152 spec:
153 containers:
154 - image: foobar:1
155 name: replaced-with-digest
156 - image: postgres:1.8.0
157 name: postgresdb
158 `)
159 expected := `
160 apiVersion: apps/v1
161 kind: Deployment
162 metadata:
163 name: deploy
164 spec:
165 template:
166 spec:
167 containers:
168 - image: foobar:1
169 name: replaced-with-digest
170 - image: foobar:1
171 name: replaced-with-digest
172 `
173 m := th.Run(".", th.MakeDefaultOptions())
174 th.AssertActualEqualsExpected(m, expected)
175 }
176
177 func TestReplacementTransformerWithDiamondShape(t *testing.T) {
178 th := kusttest_test.MakeEnhancedHarness(t)
179 defer th.Reset()
180
181 th.WriteF("base/deployments.yaml", `
182 apiVersion: apps/v1
183 kind: Deployment
184 metadata:
185 name: deploy
186 spec:
187 template:
188 spec:
189 containers:
190 - image: nginx:1.7.9
191 name: nginx
192 ---
193 apiVersion: apps/v1
194 kind: Deployment
195 metadata:
196 name: sourceA
197 spec:
198 template:
199 spec:
200 containers:
201 - image: nginx:newtagA
202 name: nginx
203 ---
204 apiVersion: apps/v1
205 kind: Deployment
206 metadata:
207 name: sourceB
208 spec:
209 template:
210 spec:
211 containers:
212 - image: nginx:newtagB
213 name: nginx
214 `)
215 th.WriteK("base", `
216 resources:
217 - deployments.yaml
218 `)
219 th.WriteK("a", `
220 namePrefix: a-
221 resources:
222 - ../base
223 replacements:
224 - path: replacement.yaml
225 `)
226 th.WriteF("a/replacement.yaml", `
227 source:
228 name: a-sourceA
229 fieldPath: spec.template.spec.containers.0.image
230 targets:
231 - select:
232 name: a-deploy
233 fieldPaths:
234 - spec.template.spec.containers.[name=nginx].image
235 `)
236 th.WriteK("b", `
237 namePrefix: b-
238 resources:
239 - ../base
240 replacements:
241 - path: replacement.yaml
242 `)
243 th.WriteF("b/replacement.yaml", `
244 source:
245 name: b-sourceB
246 fieldPath: spec.template.spec.containers.0.image
247 targets:
248 - select:
249 name: b-deploy
250 fieldPaths:
251 - spec.template.spec.containers.[name=nginx].image
252 `)
253 th.WriteK(".", `
254 resources:
255 - a
256 - b
257 `)
258
259 m := th.Run(".", th.MakeDefaultOptions())
260 th.AssertActualEqualsExpected(m, `
261 apiVersion: apps/v1
262 kind: Deployment
263 metadata:
264 name: a-deploy
265 spec:
266 template:
267 spec:
268 containers:
269 - image: nginx:newtagA
270 name: nginx
271 ---
272 apiVersion: apps/v1
273 kind: Deployment
274 metadata:
275 name: a-sourceA
276 spec:
277 template:
278 spec:
279 containers:
280 - image: nginx:newtagA
281 name: nginx
282 ---
283 apiVersion: apps/v1
284 kind: Deployment
285 metadata:
286 name: a-sourceB
287 spec:
288 template:
289 spec:
290 containers:
291 - image: nginx:newtagB
292 name: nginx
293 ---
294 apiVersion: apps/v1
295 kind: Deployment
296 metadata:
297 name: b-deploy
298 spec:
299 template:
300 spec:
301 containers:
302 - image: nginx:newtagB
303 name: nginx
304 ---
305 apiVersion: apps/v1
306 kind: Deployment
307 metadata:
308 name: b-sourceA
309 spec:
310 template:
311 spec:
312 containers:
313 - image: nginx:newtagA
314 name: nginx
315 ---
316 apiVersion: apps/v1
317 kind: Deployment
318 metadata:
319 name: b-sourceB
320 spec:
321 template:
322 spec:
323 containers:
324 - image: nginx:newtagB
325 name: nginx
326 `)
327 }
328
329 func TestReplacementTransformerWithOriginalName(t *testing.T) {
330 th := kusttest_test.MakeEnhancedHarness(t)
331 defer th.Reset()
332
333 th.WriteF("base/deployments.yaml", `
334 apiVersion: apps/v1
335 kind: Deployment
336 metadata:
337 name: target
338 spec:
339 template:
340 spec:
341 containers:
342 - image: nginx:oldtag
343 name: nginx
344 ---
345 apiVersion: apps/v1
346 kind: Deployment
347 metadata:
348 name: source
349 spec:
350 template:
351 spec:
352 containers:
353 - image: nginx:newtag
354 name: nginx
355 `)
356 th.WriteK("base", `
357 resources:
358 - deployments.yaml
359 `)
360 th.WriteK("overlay", `
361 namePrefix: prefix1-
362 resources:
363 - ../base
364 `)
365
366 th.WriteK(".", `
367 namePrefix: prefix2-
368 resources:
369 - overlay
370 replacements:
371 - path: replacement.yaml
372 `)
373 th.WriteF("replacement.yaml", `
374 source:
375 name: source
376 fieldPath: spec.template.spec.containers.0.image
377 targets:
378 - select:
379 name: prefix1-target
380 fieldPaths:
381 - spec.template.spec.containers.[name=nginx].image
382 `)
383
384 m := th.Run(".", th.MakeDefaultOptions())
385 th.AssertActualEqualsExpected(m, `
386 apiVersion: apps/v1
387 kind: Deployment
388 metadata:
389 name: prefix2-prefix1-target
390 spec:
391 template:
392 spec:
393 containers:
394 - image: nginx:newtag
395 name: nginx
396 ---
397 apiVersion: apps/v1
398 kind: Deployment
399 metadata:
400 name: prefix2-prefix1-source
401 spec:
402 template:
403 spec:
404 containers:
405 - image: nginx:newtag
406 name: nginx
407 `)
408 }
409
410
411
412
413 func TestReplacementTransformerWithNamePrefixOverlay(t *testing.T) {
414 th := kusttest_test.MakeEnhancedHarness(t)
415 defer th.Reset()
416
417 th.WriteK("base", `
418 generatorOptions:
419 disableNameSuffixHash: true
420 configMapGenerator:
421 - name: blue
422 - name: red
423 replacements:
424 - source:
425 kind: ConfigMap
426 name: blue
427 fieldPath: metadata.name
428 targets:
429 - select:
430 name: red
431 fieldPaths:
432 - data.blue-name
433 options:
434 create: true
435 `)
436
437 th.WriteK(".", `
438 namePrefix: overlay-
439 resources:
440 - base
441 `)
442 m := th.Run(".", th.MakeDefaultOptions())
443 th.AssertActualEqualsExpected(m, `
444 apiVersion: v1
445 kind: ConfigMap
446 metadata:
447 name: overlay-blue
448 ---
449 apiVersion: v1
450 data:
451 blue-name: blue
452 kind: ConfigMap
453 metadata:
454 name: overlay-red
455 `)
456 }
457
458
459
460
461 func TestReplacementTransformerWithNamespaceOverlay(t *testing.T) {
462 th := kusttest_test.MakeEnhancedHarness(t)
463 defer th.Reset()
464
465 th.WriteK("base", `
466 namespace: base-namespace
467 generatorOptions:
468 disableNameSuffixHash: true
469 configMapGenerator:
470 - name: blue
471 - name: red
472 replacements:
473 - source:
474 kind: ConfigMap
475 name: blue
476 fieldPath: metadata.namespace
477 targets:
478 - select:
479 name: red
480 fieldPaths:
481 - data.blue-namespace
482 options:
483 create: true
484 `)
485
486 th.WriteK(".", `
487 namespace: overlay-namespace
488 resources:
489 - base
490 `)
491 m := th.Run(".", th.MakeDefaultOptions())
492 th.AssertActualEqualsExpected(m, `
493 apiVersion: v1
494 kind: ConfigMap
495 metadata:
496 name: blue
497 namespace: overlay-namespace
498 ---
499 apiVersion: v1
500 data:
501 blue-namespace: base-namespace
502 kind: ConfigMap
503 metadata:
504 name: red
505 namespace: overlay-namespace
506 `)
507 }
508
509
510
511
512 func TestReplacementTransformerWithConfigMapGenerator(t *testing.T) {
513 th := kusttest_test.MakeEnhancedHarness(t)
514 defer th.Reset()
515
516 th.WriteK(".", `
517 configMapGenerator:
518 - name: blue
519 - name: red
520 replacements:
521 - source:
522 kind: ConfigMap
523 name: blue
524 fieldPath: metadata.name
525 targets:
526 - select:
527 name: red
528 fieldPaths:
529 - data.blue-name
530 options:
531 create: true
532 `)
533
534 m := th.Run(".", th.MakeDefaultOptions())
535 th.AssertActualEqualsExpected(m, `
536 apiVersion: v1
537 kind: ConfigMap
538 metadata:
539 name: blue-6ct58987ht
540 ---
541 apiVersion: v1
542 data:
543 blue-name: blue
544 kind: ConfigMap
545 metadata:
546 name: red-dc6gc5btkc
547 `)
548 }
549
550 func TestReplacementTransformerWithSuffixTransformerAndReject(t *testing.T) {
551 th := kusttest_test.MakeEnhancedHarness(t)
552 defer th.Reset()
553
554 th.WriteF("base/app.yaml", `
555 apiVersion: apps/v1
556 kind: Deployment
557 metadata:
558 name: original-name
559 spec:
560 template:
561 spec:
562 containers:
563 - image: app1:1.0
564 name: app
565 `)
566 th.WriteK("base", `
567 resources:
568 - app.yaml
569 `)
570 th.WriteK("overlay", `
571 apiVersion: kustomize.config.k8s.io/v1beta1
572 kind: Kustomization
573
574 nameSuffix: -dev
575 resources:
576 - ../base
577
578 configMapGenerator:
579 - name: app-config
580 literals:
581 - name=something-else
582
583 replacements:
584 - source:
585 kind: ConfigMap
586 name: app-config
587 fieldPath: data.name
588 targets:
589 - fieldPaths:
590 - spec.template.spec.containers.0.name
591 select:
592 kind: Deployment
593 reject:
594 - name: original-name
595 `)
596 m := th.Run("overlay", th.MakeDefaultOptions())
597 th.AssertActualEqualsExpected(m, `
598 apiVersion: apps/v1
599 kind: Deployment
600 metadata:
601 name: original-name-dev
602 spec:
603 template:
604 spec:
605 containers:
606 - image: app1:1.0
607 name: app
608 ---
609 apiVersion: v1
610 data:
611 name: something-else
612 kind: ConfigMap
613 metadata:
614 name: app-config-dev-97544dk6t8
615 `)
616 }
617
View as plain text