...
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 const resources string = `apiVersion: apps/v1
13 kind: Deployment
14 metadata:
15 name: my-deployment
16 spec:
17 template:
18 spec:
19 containers:
20 - name: my-deployment
21 livenessProbe:
22 httpGet:
23 path: /healthz
24 port: 8080
25 ---
26 apiVersion: example.dev/v1
27 kind: MyCRD
28 metadata:
29 name: crd
30 `
31
32 func TestKustomizationLabels(t *testing.T) {
33 th := kusttest_test.MakeHarness(t)
34 makeResourcesForPatchTest(th)
35 th.WriteK("/app", `
36 resources:
37 - deployment.yaml
38
39 labels:
40 - pairs:
41 foo: bar
42 - pairs:
43 a: b
44 includeSelectors: true
45 - pairs:
46 c: d
47 fields:
48 - path: spec/selector
49 group: example.dev
50 version: v1
51 kind: MyCRD
52 create: true
53 `)
54 th.WriteF("/app/deployment.yaml", resources)
55 m := th.Run("/app", th.MakeDefaultOptions())
56 th.AssertActualEqualsExpected(m, `
57 apiVersion: apps/v1
58 kind: Deployment
59 metadata:
60 labels:
61 a: b
62 c: d
63 foo: bar
64 name: my-deployment
65 spec:
66 selector:
67 matchLabels:
68 a: b
69 template:
70 metadata:
71 labels:
72 a: b
73 spec:
74 containers:
75 - livenessProbe:
76 httpGet:
77 path: /healthz
78 port: 8080
79 name: my-deployment
80 ---
81 apiVersion: example.dev/v1
82 kind: MyCRD
83 metadata:
84 labels:
85 a: b
86 c: d
87 foo: bar
88 name: crd
89 spec:
90 selector:
91 c: d
92 `)
93 }
94
95 func TestKustomizationLabelsInDeploymentTemplate(t *testing.T) {
96 th := kusttest_test.MakeHarness(t)
97 th.WriteF("app/deployment.yaml", `
98 apiVersion: apps/v1
99 kind: Deployment
100 metadata:
101 labels:
102 app.kubernetes.io/component: a
103 app.kubernetes.io/instance: b
104 app.kubernetes.io/name: c
105 app.kubernetes.io/part-of: d
106 name: deployment
107 spec:
108 replicas: 1
109 selector:
110 matchLabels:
111 app.kubernetes.io/component: a
112 app.kubernetes.io/instance: b
113 app.kubernetes.io/name: c
114 app.kubernetes.io/part-of: d
115 template:
116 metadata:
117 labels:
118 app.kubernetes.io/component: a
119 app.kubernetes.io/instance: b
120 app.kubernetes.io/name: c
121 app.kubernetes.io/part-of: d
122 `)
123 th.WriteK("/app", `
124 resources:
125 - deployment.yaml
126
127 labels:
128 - pairs:
129 foo: bar
130 includeSelectors: false
131 includeTemplates: true
132 `)
133 m := th.Run("/app", th.MakeDefaultOptions())
134 th.AssertActualEqualsExpected(m, `
135 apiVersion: apps/v1
136 kind: Deployment
137 metadata:
138 labels:
139 app.kubernetes.io/component: a
140 app.kubernetes.io/instance: b
141 app.kubernetes.io/name: c
142 app.kubernetes.io/part-of: d
143 foo: bar
144 name: deployment
145 spec:
146 replicas: 1
147 selector:
148 matchLabels:
149 app.kubernetes.io/component: a
150 app.kubernetes.io/instance: b
151 app.kubernetes.io/name: c
152 app.kubernetes.io/part-of: d
153 template:
154 metadata:
155 labels:
156 app.kubernetes.io/component: a
157 app.kubernetes.io/instance: b
158 app.kubernetes.io/name: c
159 app.kubernetes.io/part-of: d
160 foo: bar
161 `)
162 }
163
164 func TestKustomizationLabelsInTemplateWhenLabelsIsNil(t *testing.T) {
165 th := kusttest_test.MakeHarness(t)
166 th.WriteF("app/deployment.yaml", `
167 apiVersion: apps/v1
168 kind: Deployment
169 metadata:
170 name: deployment
171 spec:
172 replicas: 1
173 template:
174 spec:
175 containers:
176 - name: test-server
177 image: test-server
178 `)
179 th.WriteK("/app", `
180 resources:
181 - deployment.yaml
182
183 commonLabels:
184 app: test-server
185
186 labels:
187 - pairs:
188 app.kubernetes.io/component: a
189 app.kubernetes.io/instance: b
190 app.kubernetes.io/name: c
191 app.kubernetes.io/part-of: d
192 includeSelectors: false
193 includeTemplates: true
194 `)
195 m := th.Run("/app", th.MakeDefaultOptions())
196 th.AssertActualEqualsExpected(m, `
197 apiVersion: apps/v1
198 kind: Deployment
199 metadata:
200 labels:
201 app: test-server
202 app.kubernetes.io/component: a
203 app.kubernetes.io/instance: b
204 app.kubernetes.io/name: c
205 app.kubernetes.io/part-of: d
206 name: deployment
207 spec:
208 replicas: 1
209 selector:
210 matchLabels:
211 app: test-server
212 template:
213 metadata:
214 labels:
215 app: test-server
216 app.kubernetes.io/component: a
217 app.kubernetes.io/instance: b
218 app.kubernetes.io/name: c
219 app.kubernetes.io/part-of: d
220 spec:
221 containers:
222 - image: test-server
223 name: test-server
224 `)
225 }
226
227 func TestKustomizationLabelsDoesNotCreateInvalidTemplatePaths(t *testing.T) {
228 th := kusttest_test.MakeHarness(t)
229 th.WriteF("app/deployment.yaml", `
230 apiVersion: apps/v1
231 kind: Deployment
232 metadata:
233 name: deployment
234 spec:
235 replicas: 1
236 template:
237 spec:
238 containers:
239 - name: test-server
240 image: test-server
241 `)
242 th.WriteF("app/service.yaml", `
243 apiVersion: v1
244 kind: Service
245 metadata:
246 name: service
247 spec:
248 ports:
249 - port: 80
250 protocol: TCP
251 targetPort: 9376
252 `)
253 th.WriteK("/app", `
254 resources:
255 - deployment.yaml
256 - service.yaml
257
258 commonLabels:
259 app: test-server
260
261 labels:
262 - pairs:
263 app.kubernetes.io/component: a
264 app.kubernetes.io/instance: b
265 app.kubernetes.io/name: c
266 app.kubernetes.io/part-of: d
267 includeSelectors: false
268 includeTemplates: true
269 `)
270 m := th.Run("/app", th.MakeDefaultOptions())
271 th.AssertActualEqualsExpected(m, `
272 apiVersion: apps/v1
273 kind: Deployment
274 metadata:
275 labels:
276 app: test-server
277 app.kubernetes.io/component: a
278 app.kubernetes.io/instance: b
279 app.kubernetes.io/name: c
280 app.kubernetes.io/part-of: d
281 name: deployment
282 spec:
283 replicas: 1
284 selector:
285 matchLabels:
286 app: test-server
287 template:
288 metadata:
289 labels:
290 app: test-server
291 app.kubernetes.io/component: a
292 app.kubernetes.io/instance: b
293 app.kubernetes.io/name: c
294 app.kubernetes.io/part-of: d
295 spec:
296 containers:
297 - image: test-server
298 name: test-server
299 ---
300 apiVersion: v1
301 kind: Service
302 metadata:
303 labels:
304 app: test-server
305 app.kubernetes.io/component: a
306 app.kubernetes.io/instance: b
307 app.kubernetes.io/name: c
308 app.kubernetes.io/part-of: d
309 name: service
310 spec:
311 ports:
312 - port: 80
313 protocol: TCP
314 targetPort: 9376
315 selector:
316 app: test-server
317 `)
318 }
319
320 func TestKustomizationLabelsInDaemonSetTemplate(t *testing.T) {
321 th := kusttest_test.MakeHarness(t)
322 th.WriteF("app/ds.yaml", `
323 apiVersion: apps/v1
324 kind: DaemonSet
325 metadata:
326 labels:
327 app.kubernetes.io/name: daemon
328 name: daemon
329 spec:
330 selector:
331 matchLabels:
332 app.kubernetes.io/name: daemon
333 template:
334 metadata:
335 labels:
336 app.kubernetes.io/name: daemon
337 `)
338 th.WriteK("/app", `
339 resources:
340 - ds.yaml
341
342 labels:
343 - pairs:
344 foo: bar
345 includeSelectors: false
346 includeTemplates: true
347 `)
348 m := th.Run("/app", th.MakeDefaultOptions())
349 th.AssertActualEqualsExpected(m, `
350 apiVersion: apps/v1
351 kind: DaemonSet
352 metadata:
353 labels:
354 app.kubernetes.io/name: daemon
355 foo: bar
356 name: daemon
357 spec:
358 selector:
359 matchLabels:
360 app.kubernetes.io/name: daemon
361 template:
362 metadata:
363 labels:
364 app.kubernetes.io/name: daemon
365 foo: bar
366 `)
367 }
368
369 func TestKustomizationLabelsInStatefulSetTemplate(t *testing.T) {
370 th := kusttest_test.MakeHarness(t)
371 th.WriteF("app/sts.yaml", `
372 apiVersion: apps/v1
373 kind: StatefulSet
374 metadata:
375 labels:
376 app.kubernetes.io/name: set
377 name: set
378 spec:
379 replicas: 3
380 selector:
381 matchLabels:
382 app.kubernetes.io/name: set
383 serviceName: set
384 template:
385 metadata:
386 labels:
387 app.kubernetes.io/name: set
388 `)
389 th.WriteK("/app", `
390 resources:
391 - sts.yaml
392
393 labels:
394 - pairs:
395 foo: bar
396 includeSelectors: false
397 includeTemplates: true
398 `)
399 m := th.Run("/app", th.MakeDefaultOptions())
400 th.AssertActualEqualsExpected(m, `
401 apiVersion: apps/v1
402 kind: StatefulSet
403 metadata:
404 labels:
405 app.kubernetes.io/name: set
406 foo: bar
407 name: set
408 spec:
409 replicas: 3
410 selector:
411 matchLabels:
412 app.kubernetes.io/name: set
413 serviceName: set
414 template:
415 metadata:
416 labels:
417 app.kubernetes.io/name: set
418 foo: bar
419 `)
420 }
421
422 func TestKustomizationLabelsInCronJobTemplate(t *testing.T) {
423 th := kusttest_test.MakeHarness(t)
424 th.WriteF("app/cjob.yaml", `
425 apiVersion: batch/v1
426 kind: CronJob
427 metadata:
428 labels:
429 app.kubernetes.io/name: job
430 name: job
431 spec:
432 jobTemplate:
433 spec:
434 backoffLimit: 4
435 template:
436 metadata:
437 labels:
438 app.kubernetes.io/name: job
439 spec:
440 restartPolicy: Never
441 schedule: '* * * * *'
442 `)
443 th.WriteK("/app", `
444 resources:
445 - cjob.yaml
446
447 labels:
448 - pairs:
449 foo: bar
450 includeSelectors: false
451 includeTemplates: true
452 `)
453 m := th.Run("/app", th.MakeDefaultOptions())
454 th.AssertActualEqualsExpected(m, `
455 apiVersion: batch/v1
456 kind: CronJob
457 metadata:
458 labels:
459 app.kubernetes.io/name: job
460 foo: bar
461 name: job
462 spec:
463 jobTemplate:
464 metadata:
465 labels:
466 foo: bar
467 spec:
468 backoffLimit: 4
469 template:
470 metadata:
471 labels:
472 app.kubernetes.io/name: job
473 foo: bar
474 spec:
475 restartPolicy: Never
476 schedule: '* * * * *'
477 `)
478 }
479
480 func TestKustomizationLabelsInJobTemplate(t *testing.T) {
481 th := kusttest_test.MakeHarness(t)
482 th.WriteF("app/job.yaml", `
483 apiVersion: batch/v1
484 kind: Job
485 metadata:
486 labels:
487 app.kubernetes.io/name: job
488 name: job
489 spec:
490 backoffLimit: 4
491 template:
492 metadata:
493 labels:
494 app.kubernetes.io/name: job
495 spec:
496 restartPolicy: Never
497 `)
498 th.WriteK("/app", `
499 resources:
500 - job.yaml
501
502 labels:
503 - pairs:
504 foo: bar
505 includeSelectors: false
506 includeTemplates: true
507 `)
508 m := th.Run("/app", th.MakeDefaultOptions())
509 th.AssertActualEqualsExpected(m, `
510 apiVersion: batch/v1
511 kind: Job
512 metadata:
513 labels:
514 app.kubernetes.io/name: job
515 foo: bar
516 name: job
517 spec:
518 backoffLimit: 4
519 template:
520 metadata:
521 labels:
522 app.kubernetes.io/name: job
523 foo: bar
524 spec:
525 restartPolicy: Never
526 `)
527 }
528
View as plain text