blob: ec2ae70d8ec277c1301bc00a2fc6d1138254f759 [file] [log] [blame]
garciadeblas83775ba2025-07-23 18:35:24 +02001#!/usr/bin/env -S nu --stdin
2#######################################################################################
3# Copyright ETSI Contributors and Others.
4#
5# Licensed under the Apache License, Version 2.0 (the "License");
6# you may not use this file except in compliance with the License.
7# You may obtain a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS,
13# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
14# implied.
15# See the License for the specific language governing permissions and
16# limitations under the License.
17#######################################################################################
18
19
20use std assert
21use ../../krm/patch.nu *
22
23
24# --- resource keep tests ---
25
26export def "test patch resource keep no filters" []: [
27 nothing -> nothing
28] {
29 let resourcelist: record = {
30 apiVersion: "config.kubernetes.io/v1"
31 kind: "ResourceList"
32 items: [
33 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
34 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
35 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
36 ]
37 }
38
39 let actual: record = $resourcelist | resource keep
40 let expected: record = $resourcelist
41
42 assert equal $actual $expected
43}
44
45
46export def "test patch resource keep by apiVersion" []: [
47 nothing -> nothing
48] {
49 let resourcelist: record = {
50 apiVersion: "config.kubernetes.io/v1"
51 kind: "ResourceList"
52 items: [
53 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
54 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
55 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
56 ]
57 }
58
59 let actual: record = $resourcelist | resource keep "apps/v1"
60 let expected: record = {
61 apiVersion: "config.kubernetes.io/v1"
62 kind: "ResourceList"
63 items: [
64 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
65 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
66 ]
67 }
68
69 assert equal $actual $expected
70}
71
72
73export def "test patch resource keep by kind" []: [
74 nothing -> nothing
75] {
76 let resourcelist: record = {
77 apiVersion: "config.kubernetes.io/v1"
78 kind: "ResourceList"
79 items: [
80 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
81 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
82 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
83 ]
84 }
85
86 let actual: record = $resourcelist | resource keep '' "Deployment"
87 let expected: record = {
88 apiVersion: "config.kubernetes.io/v1"
89 kind: "ResourceList"
90 items: [
91 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
92 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
93 ]
94 }
95
96 assert equal $actual $expected
97}
98
99
100export def "test patch resource keep by name" []: [
101 nothing -> nothing
102] {
103 let resourcelist: record = {
104 apiVersion: "config.kubernetes.io/v1"
105 kind: "ResourceList"
106 items: [
107 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
108 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
109 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
110 ]
111 }
112
113 let actual: record = $resourcelist | resource keep '' '' "example1"
114 let expected: record = {
115 apiVersion: "config.kubernetes.io/v1"
116 kind: "ResourceList"
117 items: [
118 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
119 ]
120 }
121
122 assert equal $actual $expected
123}
124
125
126export def "test patch resource keep by namespace" []: [
127 nothing -> nothing
128] {
129 let resourcelist: record = {
130 apiVersion: "config.kubernetes.io/v1"
131 kind: "ResourceList"
132 items: [
133 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
134 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
135 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
136 ]
137 }
138
139 let actual: record = $resourcelist | resource keep '' '' '' "default"
140 let expected: record = {
141 apiVersion: "config.kubernetes.io/v1"
142 kind: "ResourceList"
143 items: [
144 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
145 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
146 ]
147 }
148
149 assert equal $actual $expected
150}
151
152
153export def "test patch resource keep multiple filters" []: [
154 nothing -> nothing
155] {
156 let resourcelist: record = {
157 apiVersion: "config.kubernetes.io/v1"
158 kind: "ResourceList"
159 items: [
160 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
161 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
162 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
163 ]
164 }
165
166 let actual: record = $resourcelist | resource keep "apps/v1" "Deployment" '' "default"
167 let expected: record = {
168 apiVersion: "config.kubernetes.io/v1"
169 kind: "ResourceList"
170 items: [
171 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
172 ]
173 }
174
175 assert equal $actual $expected
176}
177
178
179export def "test patch resource keep invalid input" []: [
180 nothing -> nothing
181] {
182 let invalid_input: record = {kind: "Invalid kind"}
183
184 let error_occurred: any = try {
185 $invalid_input | resource keep
186 } catch {
187 |err| $err.msg
188 }
189
190 assert ($error_occurred | str starts-with "Error: Expected a ResourceList, but received")
191}
192
193
194
195# --- resource delete tests ---
196
197export def "test patch resource delete no filters" []: [
198 nothing -> nothing
199] {
200 let resourcelist: record = {
201 apiVersion: "config.kubernetes.io/v1"
202 kind: "ResourceList"
203 items: [
204 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
205 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
206 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
207 ]
208 }
209
210 let actual: record = $resourcelist | resource delete
211 let expected: record = {
212 apiVersion: "config.kubernetes.io/v1"
213 kind: "ResourceList"
214 items: []
215 }
216
217 assert equal $actual $expected
218}
219
220
221export def "test patch resource delete by apiVersion" []: [
222 nothing -> nothing
223] {
224 let resourcelist: record = {
225 apiVersion: "config.kubernetes.io/v1"
226 kind: "ResourceList"
227 items: [
228 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
229 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
230 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
231 ]
232 }
233
234 let actual: record = $resourcelist | resource delete "apps/v1"
235 let expected: record = {
236 apiVersion: "config.kubernetes.io/v1"
237 kind: "ResourceList"
238 items: [
239 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
240 ]
241 }
242
243 assert equal $actual $expected
244}
245
246
247export def "test patch resource delete by kind" []: [
248 nothing -> nothing
249] {
250 let resourcelist: record = {
251 apiVersion: "config.kubernetes.io/v1"
252 kind: "ResourceList"
253 items: [
254 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
255 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
256 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
257 ]
258 }
259
260 let actual: record = $resourcelist | resource delete '' "Deployment"
261 let expected: record = {
262 apiVersion: "config.kubernetes.io/v1"
263 kind: "ResourceList"
264 items: [
265 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
266 ]
267 }
268
269 assert equal $actual $expected
270}
271
272
273export def "test patch resource delete by name" []: [
274 nothing -> nothing
275] {
276 let resourcelist: record = {
277 apiVersion: "config.kubernetes.io/v1"
278 kind: "ResourceList"
279 items: [
280 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
281 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
282 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
283 ]
284 }
285
286 let actual: record = $resourcelist | resource delete '' '' "example1"
287 let expected: record = {
288 apiVersion: "config.kubernetes.io/v1"
289 kind: "ResourceList"
290 items: [
291 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
292 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
293 ]
294 }
295
296 assert equal $actual $expected
297}
298
299
300export def "test patch resource delete by namespace" []: [
301 nothing -> nothing
302] {
303 let resourcelist: record = {
304 apiVersion: "config.kubernetes.io/v1"
305 kind: "ResourceList"
306 items: [
307 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
308 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
309 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
310 ]
311 }
312
313 let actual: record = $resourcelist | resource delete '' '' '' "default"
314 let expected: record = {
315 apiVersion: "config.kubernetes.io/v1"
316 kind: "ResourceList"
317 items: [
318 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
319 ]
320 }
321
322 assert equal $actual $expected
323}
324
325
326export def "test patch resource delete multiple filters" []: [
327 nothing -> nothing
328] {
329 let resourcelist: record = {
330 apiVersion: "config.kubernetes.io/v1"
331 kind: "ResourceList"
332 items: [
333 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
334 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
335 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
336 ]
337 }
338
339 let actual: record = $resourcelist | resource delete "apps/v1" "Deployment" '' "default"
340 let expected: record = {
341 apiVersion: "config.kubernetes.io/v1"
342 kind: "ResourceList"
343 items: [
344 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
345 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
346 ]
347 }
348
349 assert equal $actual $expected
350}
351
352
353export def "test patch resource delete invalid input" []: [
354 nothing -> nothing
355] {
356 let invalid_input: record = {kind: "Invalid kind"}
357
358 let error_occurred: any = try {
359 echo $invalid_input | resource delete
360 } catch {
361 |err| $err.msg
362 }
363
364 assert ($error_occurred | str starts-with "Error: Expected a ResourceList, but received")
365
366}
367
368
369
370# --- resource custom function tests ---
371
372export def "test patch resource custom function no filters" []: [
373 nothing -> nothing
374] {
375 let resourcelist: record = {
376 apiVersion: "config.kubernetes.io/v1"
377 kind: "ResourceList"
378 items: [
379 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
380 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
381 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
382 ]
383 }
384
385 let custom_function: closure = { |k: cell-path, v: any| ($in | upsert $k $v) }
386 let key_path: cell-path = $.metadata.labels
387 let value: any = { app: "example" }
388
389 let actual: record = $resourcelist | resource custom function $custom_function $key_path $value
390 let expected: record = {
391 apiVersion: "config.kubernetes.io/v1"
392 kind: "ResourceList"
393 items: [
394 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
395 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", labels: { app: "example" } } }
396 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", labels: { app: "example" } } }
397 ]
398 }
399
400 assert equal $actual $expected
401}
402
403
404export def "test patch resource custom function by apiVersion" []: [
405 nothing -> nothing
406] {
407 let resourcelist: record = {
408 apiVersion: "config.kubernetes.io/v1"
409 kind: "ResourceList"
410 items: [
411 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
412 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
413 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
414 ]
415 }
416
417 let custom_function: closure = { |k: cell-path, v: any| ($in | upsert $k $v) }
418 let key_path: cell-path = $.metadata.labels
419 let value: any = { app: "example" }
420
421 let actual: record = $resourcelist | resource custom function $custom_function $key_path $value "apps/v1"
422 let expected: record = {
423 apiVersion: "config.kubernetes.io/v1"
424 kind: "ResourceList"
425 items: [
426 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
427 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
428 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", labels: { app: "example" } } }
429 ]
430 }
431
432 assert equal $actual $expected
433}
434
435
436export def "test patch resource custom function by kind" []: [
437 nothing -> nothing
438] {
439 let resourcelist: record = {
440 apiVersion: "config.kubernetes.io/v1"
441 kind: "ResourceList"
442 items: [
443 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
444 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
445 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
446 ]
447 }
448
449 let custom_function: closure = { |k: cell-path, v: any| ($in | upsert $k $v) }
450 let key_path: cell-path = $.metadata.labels
451 let value: any = { app: "example" }
452
453 let actual: record = $resourcelist | resource custom function $custom_function $key_path $value '' "Deployment"
454 let expected: record = {
455 apiVersion: "config.kubernetes.io/v1"
456 kind: "ResourceList"
457 items: [
458 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
459 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
460 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", labels: { app: "example" } } }
461 ]
462 }
463
464 assert equal $actual $expected
465}
466
467
468export def "test patch resource custom function by name" []: [
469 nothing -> nothing
470] {
471 let resourcelist: record = {
472 apiVersion: "config.kubernetes.io/v1"
473 kind: "ResourceList"
474 items: [
475 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
476 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
477 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
478 ]
479 }
480
481 let custom_function: closure = { |k: cell-path, v: any| ($in | upsert $k $v) }
482 let key_path: cell-path = $.metadata.labels
483 let value: any = { app: "example" }
484
485 let actual: record = $resourcelist | resource custom function $custom_function $key_path $value '' '' "example1"
486 let expected: record = {
487 apiVersion: "config.kubernetes.io/v1"
488 kind: "ResourceList"
489 items: [
490 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
491 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
492 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
493 ]
494 }
495
496 assert equal $actual $expected
497}
498
499
500export def "test patch resource custom function by namespace" []: [
501 nothing -> nothing
502] {
503 let resourcelist: record = {
504 apiVersion: "config.kubernetes.io/v1"
505 kind: "ResourceList"
506 items: [
507 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
508 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
509 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
510 ]
511 }
512
513 let custom_function: closure = { |k: cell-path, v: any| ($in | upsert $k $v) }
514 let key_path: cell-path = $.metadata.labels
515 let value: any = { app: "example" }
516
517 let actual: record = $resourcelist | resource custom function $custom_function $key_path $value '' '' '' "default"
518 let expected: record = {
519 apiVersion: "config.kubernetes.io/v1"
520 kind: "ResourceList"
521 items: [
522 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
523 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", labels: { app: "example" } } }
524 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
525 ]
526 }
527
528 assert equal $actual $expected
529}
530
531
532export def "test patch resource custom function multiple filters" []: [
533 nothing -> nothing
534] {
535 let resourcelist: record = {
536 apiVersion: "config.kubernetes.io/v1"
537 kind: "ResourceList"
538 items: [
539 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
540 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
541 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
542 ]
543 }
544
545 let custom_function: closure = { |k: cell-path, v: any| ($in | upsert $k $v) }
546 let key_path: cell-path = $.metadata.labels
547 let value: any = { app: "example" }
548
549 let actual: record = $resourcelist | resource custom function $custom_function $key_path $value "apps/v1" "Deployment" '' "default"
550 let expected: record = {
551 apiVersion: "config.kubernetes.io/v1"
552 kind: "ResourceList"
553 items: [
554 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
555 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
556 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
557 ]
558 }
559
560 assert equal $actual $expected
561}
562
563
564export def "test patch resource custom function invalid input" []: [
565 nothing -> nothing
566] {
567 let invalid_input: record = {kind: "Invalid kind"}
568
569 let error_occurred: any = try {
570 $invalid_input | resource custom function {|item, key_path, value| $item | update $key_path $value } $.metadata.labels { app: "example" }
571 } catch {
572 |err| $err.msg
573 }
574
575 assert ($error_occurred | str starts-with "Error: Expected a ResourceList, but received")
576}
577
578
579
580# --- resource upsert key tests ---
581
582export def "test patch resource upsert key no filters" []: [
583 nothing -> nothing
584] {
585 let resourcelist: record = {
586 apiVersion: "config.kubernetes.io/v1"
587 kind: "ResourceList"
588 items: [
589 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
590 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
591 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
592 ]
593 }
594
595 let key_path: cell-path = $.metadata.labels
596 let value: any = { app: "example" }
597
598 let actual: record = $resourcelist | resource upsert key $key_path $value
599 let expected: record = {
600 apiVersion: "config.kubernetes.io/v1"
601 kind: "ResourceList"
602 items: [
603 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
604 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", labels: { app: "example" } } }
605 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", labels: { app: "example" } } }
606 ]
607 }
608
609 assert equal $actual $expected
610}
611
612
613export def "test patch resource upsert key by apiVersion" []: [
614 nothing -> nothing
615] {
616 let resourcelist: record = {
617 apiVersion: "config.kubernetes.io/v1"
618 kind: "ResourceList"
619 items: [
620 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
621 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
622 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
623 ]
624 }
625
626 let key_path: cell-path = $.metadata.labels
627 let value: any = { app: "example" }
628
629 let actual: record = $resourcelist | resource upsert key $key_path $value "apps/v1"
630 let expected: record = {
631 apiVersion: "config.kubernetes.io/v1"
632 kind: "ResourceList"
633 items: [
634 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
635 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
636 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", labels: { app: "example" } } }
637 ]
638 }
639
640 assert equal $actual $expected
641}
642
643
644export def "test patch resource upsert key by kind" []: [
645 nothing -> nothing
646] {
647 let resourcelist: record = {
648 apiVersion: "config.kubernetes.io/v1"
649 kind: "ResourceList"
650 items: [
651 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
652 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
653 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
654 ]
655 }
656
657 let key_path: cell-path = $.metadata.labels
658 let value: any = { app: "example" }
659
660 let actual: record = $resourcelist | resource upsert key $key_path $value '' "Deployment"
661 let expected: record = {
662 apiVersion: "config.kubernetes.io/v1"
663 kind: "ResourceList"
664 items: [
665 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
666 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
667 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", labels: { app: "example" } } }
668 ]
669 }
670
671 assert equal $actual $expected
672}
673
674
675export def "test patch resource upsert key by name" []: [
676 nothing -> nothing
677] {
678 let resourcelist: record = {
679 apiVersion: "config.kubernetes.io/v1"
680 kind: "ResourceList"
681 items: [
682 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
683 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
684 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
685 ]
686 }
687
688 let key_path: cell-path = $.metadata.labels
689 let value: any = { app: "example" }
690
691 let actual: record = $resourcelist | resource upsert key $key_path $value '' '' "example1"
692 let expected: record = {
693 apiVersion: "config.kubernetes.io/v1"
694 kind: "ResourceList"
695 items: [
696 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
697 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
698 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
699 ]
700 }
701
702 assert equal $actual $expected
703}
704
705
706export def "test patch resource upsert key by namespace" []: [
707 nothing -> nothing
708] {
709 let resourcelist: record = {
710 apiVersion: "config.kubernetes.io/v1"
711 kind: "ResourceList"
712 items: [
713 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
714 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
715 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
716 ]
717 }
718
719 let key_path: cell-path = $.metadata.labels
720 let value: any = { app: "example" }
721
722 let actual: record = $resourcelist | resource upsert key $key_path $value '' '' '' "default"
723 let expected: record = {
724 apiVersion: "config.kubernetes.io/v1"
725 kind: "ResourceList"
726 items: [
727 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
728 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", labels: { app: "example" } } }
729 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
730 ]
731 }
732
733 assert equal $actual $expected
734}
735
736
737export def "test patch resource upsert key multiple filters" []: [
738 nothing -> nothing
739] {
740 let resourcelist: record = {
741 apiVersion: "config.kubernetes.io/v1"
742 kind: "ResourceList"
743 items: [
744 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
745 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
746 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
747 ]
748 }
749
750 let key_path: cell-path = $.metadata.labels
751 let value: any = { app: "example" }
752
753 let actual: record = $resourcelist | resource upsert key $key_path $value "apps/v1" "Deployment" '' "default"
754 let expected: record = {
755 apiVersion: "config.kubernetes.io/v1"
756 kind: "ResourceList"
757 items: [
758 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", labels: { app: "example" } } }
759 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
760 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
761 ]
762 }
763
764 assert equal $actual $expected
765}
766
767
768export def "test patch resource upsert key invalid input" []: [
769 nothing -> nothing
770] {
771 let invalid_input: record = {kind: "Invalid kind"}
772
773 let error_occurred: any = try {
774 $invalid_input | resource upsert key $.metadata.labels { app: "example" }
775 } catch {
776 |err| $err.msg
777 }
778
779 assert ($error_occurred | str starts-with "Error: Expected a ResourceList, but received")
780}
781
782
783
784# --- resource filename set tests ---
785
786export def "test patch resource filename set no index" []: [
787 nothing -> nothing
788] {
789 let resourcelist: record = {
790 apiVersion: "config.kubernetes.io/v1"
791 kind: "ResourceList"
792 items: [
793 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
794 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
795 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
796 ]
797 }
798
799 let filename: string = "example.yaml"
800 let actual: record = $resourcelist | resource filename set $filename
801 let expected: record = {
802 apiVersion: "config.kubernetes.io/v1"
803 kind: "ResourceList"
804 items: [
805 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
806 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
807 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
808 ]
809 }
810
811 assert equal $actual $expected
812}
813
814
815export def "test patch resource filename set with index" []: [
816 nothing -> nothing
817] {
818 let resourcelist: record = {
819 apiVersion: "config.kubernetes.io/v1"
820 kind: "ResourceList"
821 items: [
822 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
823 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
824 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
825 ]
826 }
827
828 let filename: string = "example.yaml"
829 let index: int = 0
830 let actual: record = $resourcelist | resource filename set --index $index $filename
831 let expected: record = {
832 apiVersion: "config.kubernetes.io/v1"
833 kind: "ResourceList"
834 items: [
835 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename, "config.kubernetes.io/index": "0", "internal.config.kubernetes.io/index": "0" } } }
836 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename, "config.kubernetes.io/index": "0", "internal.config.kubernetes.io/index": "0" } } }
837 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename, "config.kubernetes.io/index": "0", "internal.config.kubernetes.io/index": "0" } } }
838 ]
839 }
840
841 assert equal $actual $expected
842}
843
844
845export def "test patch resource filename set by apiVersion" []: [
846 nothing -> nothing
847] {
848 let resourcelist: record = {
849 apiVersion: "config.kubernetes.io/v1"
850 kind: "ResourceList"
851 items: [
852 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
853 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
854 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
855 ]
856 }
857
858 let filename: string = "example.yaml"
859 let actual: record = $resourcelist | resource filename set $filename "apps/v1"
860 let expected: record = {
861 apiVersion: "config.kubernetes.io/v1"
862 kind: "ResourceList"
863 items: [
864 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
865 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
866 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
867 ]
868 }
869
870 assert equal $actual $expected
871}
872
873
874export def "test patch resource filename set by kind" []: [
875 nothing -> nothing
876] {
877 let resourcelist: record = {
878 apiVersion: "config.kubernetes.io/v1"
879 kind: "ResourceList"
880 items: [
881 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
882 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
883 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
884 ]
885 }
886
887 let filename: string = "example.yaml"
888 let actual: record = $resourcelist | resource filename set $filename '' "Deployment"
889 let expected: record = {
890 apiVersion: "config.kubernetes.io/v1"
891 kind: "ResourceList"
892 items: [
893 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
894 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
895 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
896 ]
897 }
898
899 assert equal $actual $expected
900}
901
902
903export def "test patch resource filename set by name" []: [
904 nothing -> nothing
905] {
906 let resourcelist: record = {
907 apiVersion: "config.kubernetes.io/v1"
908 kind: "ResourceList"
909 items: [
910 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
911 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
912 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
913 ]
914 }
915
916 let filename: string = "example.yaml"
917 let actual: record = $resourcelist | resource filename set $filename '' '' "example1"
918 let expected: record = {
919 apiVersion: "config.kubernetes.io/v1"
920 kind: "ResourceList"
921 items: [
922 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
923 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
924 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
925 ]
926 }
927
928 assert equal $actual $expected
929}
930
931
932export def "test patch resource filename set by namespace" []: [
933 nothing -> nothing
934] {
935 let resourcelist: record = {
936 apiVersion: "config.kubernetes.io/v1"
937 kind: "ResourceList"
938 items: [
939 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
940 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
941 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
942 ]
943 }
944
945 let filename: string = "example.yaml"
946 let actual: record = $resourcelist | resource filename set $filename '' '' '' "default"
947 let expected: record = {
948 apiVersion: "config.kubernetes.io/v1"
949 kind: "ResourceList"
950 items: [
951 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
952 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
953 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
954 ]
955 }
956
957 assert equal $actual $expected
958}
959
960
961export def "test patch resource filename set multiple filters" []: [
962 nothing -> nothing
963] {
964 let resourcelist: record = {
965 apiVersion: "config.kubernetes.io/v1"
966 kind: "ResourceList"
967 items: [
968 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
969 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
970 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
971 ]
972 }
973
974 let filename: string = "example.yaml"
975 let actual: record = $resourcelist | resource filename set $filename "apps/v1" "Deployment" '' "default"
976 let expected: record = {
977 apiVersion: "config.kubernetes.io/v1"
978 kind: "ResourceList"
979 items: [
980 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { "config.kubernetes.io/path": $filename, "internal.config.kubernetes.io/path": $filename } } }
981 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
982 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
983 ]
984 }
985
986 assert equal $actual $expected
987}
988
989
990
991# TODO:
992
993# --- list append item tests ---
994
995export def "test patch list append item no filters" []: [
996 nothing -> nothing
997] {
998 let resourcelist: record = {
999 apiVersion: "config.kubernetes.io/v1"
1000 kind: "ResourceList"
1001 items: [
1002 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
1003 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1004 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1005 ]
1006 }
1007
1008 let key_path: cell-path = $.metadata.annotations.example
1009 let value: any = "example-value"
1010 let actual: record = $resourcelist | list append item $key_path $value
1011 let expected: record = {
1012 apiVersion: "config.kubernetes.io/v1"
1013 kind: "ResourceList"
1014 items: [
1015 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["example-value"] } } }
1016 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["example-value"] } } }
1017 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["example-value"] } } }
1018 ]
1019 }
1020
1021 assert equal $actual $expected
1022}
1023
1024
1025export def "test patch list append item existing list" []: [
1026 nothing -> nothing
1027] {
1028 let resourcelist: record = {
1029 apiVersion: "config.kubernetes.io/v1"
1030 kind: "ResourceList"
1031 items: [
1032 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["initial-value"] } } }
1033 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["initial-value"] } } }
1034 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["initial-value"] } } }
1035 ]
1036 }
1037
1038 let key_path: cell-path = $.metadata.annotations.example
1039 let value: any = "example-value"
1040 let actual: record = $resourcelist | list append item $key_path $value
1041 let expected: record = {
1042 apiVersion: "config.kubernetes.io/v1"
1043 kind: "ResourceList"
1044 items: [
1045 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["initial-value", "example-value"] } } }
1046 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["initial-value", "example-value"] } } }
1047 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["initial-value", "example-value"] } } }
1048 ]
1049 }
1050
1051 assert equal $actual $expected
1052}
1053
1054
1055export def "test patch list append item existing non-list value" []: [
1056 nothing -> nothing
1057] {
1058 let resourcelist: record = {
1059 apiVersion: "config.kubernetes.io/v1"
1060 kind: "ResourceList"
1061 items: [
1062 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: "initial-value" } } }
1063 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: "initial-value" } } }
1064 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: "initial-value" } } }
1065 ]
1066 }
1067
1068 let key_path: cell-path = $.metadata.annotations.example
1069 let value: any = "example-value"
1070
1071 let error_occurred: any = try {
1072 $resourcelist | list append item $key_path $value
1073 } catch {
1074 |err| $err.msg
1075 }
1076
1077 assert ($error_occurred | str starts-with "Error: Some matching keys are not lists. Non conformant:")
1078}
1079
1080
1081export def "test patch list append item by apiVersion" []: [
1082 nothing -> nothing
1083] {
1084 let resourcelist: record = {
1085 apiVersion: "config.kubernetes.io/v1"
1086 kind: "ResourceList"
1087 items: [
1088 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
1089 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1090 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1091 ]
1092 }
1093
1094 let key_path: cell-path = $.metadata.annotations.example
1095 let value: any = "example-value"
1096 let actual: record = $resourcelist | list append item $key_path $value "apps/v1"
1097 let expected: record = {
1098 apiVersion: "config.kubernetes.io/v1"
1099 kind: "ResourceList"
1100 items: [
1101 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["example-value"] } } }
1102 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1103 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["example-value"] } } }
1104 ]
1105 }
1106
1107 assert equal $actual $expected
1108}
1109
1110
1111export def "test patch list append item by kind" []: [
1112 nothing -> nothing
1113] {
1114 let resourcelist: record = {
1115 apiVersion: "config.kubernetes.io/v1"
1116 kind: "ResourceList"
1117 items: [
1118 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
1119 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1120 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1121 ]
1122 }
1123
1124 let key_path: cell-path = $.metadata.annotations.example
1125 let value: any = "example-value"
1126 let actual: record = $resourcelist | list append item $key_path $value '' "Deployment"
1127 let expected: record = {
1128 apiVersion: "config.kubernetes.io/v1"
1129 kind: "ResourceList"
1130 items: [
1131 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["example-value"] } } }
1132 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1133 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["example-value"] } } }
1134 ]
1135 }
1136
1137 assert equal $actual $expected
1138}
1139
1140
1141export def "test patch list append item by name" []: [
1142 nothing -> nothing
1143] {
1144 let resourcelist: record = {
1145 apiVersion: "config.kubernetes.io/v1"
1146 kind: "ResourceList"
1147 items: [
1148 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
1149 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1150 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1151 ]
1152 }
1153
1154 let key_path: cell-path = $.metadata.annotations.example
1155 let value: any = "example-value"
1156 let actual: record = $resourcelist | list append item $key_path $value '' '' "example1"
1157 let expected: record = {
1158 apiVersion: "config.kubernetes.io/v1"
1159 kind: "ResourceList"
1160 items: [
1161 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["example-value"] } } }
1162 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1163 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1164 ]
1165 }
1166
1167 assert equal $actual $expected
1168}
1169
1170
1171export def "test patch list append item by namespace" []: [
1172 nothing -> nothing
1173] {
1174 let resourcelist: record = {
1175 apiVersion: "config.kubernetes.io/v1"
1176 kind: "ResourceList"
1177 items: [
1178 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
1179 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1180 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1181 ]
1182 }
1183
1184 let key_path: cell-path = $.metadata.annotations.example
1185 let value: any = "example-value"
1186 let actual: record = $resourcelist | list append item $key_path $value '' '' '' "default"
1187 let expected: record = {
1188 apiVersion: "config.kubernetes.io/v1"
1189 kind: "ResourceList"
1190 items: [
1191 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["example-value"] } } }
1192 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["example-value"] } } }
1193 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1194 ]
1195 }
1196
1197 assert equal $actual $expected
1198}
1199
1200
1201export def "test patch list append item multiple filters" []: [
1202 nothing -> nothing
1203] {
1204 let resourcelist: record = {
1205 apiVersion: "config.kubernetes.io/v1"
1206 kind: "ResourceList"
1207 items: [
1208 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default" } }
1209 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1210 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1211 ]
1212 }
1213
1214 let key_path: cell-path = $.metadata.annotations.example
1215 let value: any = "example-value"
1216 let actual: record = $resourcelist | list append item $key_path $value "apps/v1" 'Deployment' '' "default"
1217 let expected: record = {
1218 apiVersion: "config.kubernetes.io/v1"
1219 kind: "ResourceList"
1220 items: [
1221 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["example-value"] } } }
1222 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default" } }
1223 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other" } }
1224 ]
1225 }
1226
1227 assert equal $actual $expected
1228}
1229
1230
1231# TODO:
1232
1233# --- list drop item tests ---
1234
1235export def "test patch list drop item no filters" []: [
1236 nothing -> nothing
1237] {
1238 let resourcelist: record = {
1239 apiVersion: "config.kubernetes.io/v1"
1240 kind: "ResourceList"
1241 items: [
1242 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1243 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1244 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1245 ]
1246 }
1247
1248 let key_path: cell-path = $.metadata.annotations.example
1249 let value: any = "value1"
1250 let actual: record = $resourcelist | list drop item $key_path $value
1251 let expected: record = {
1252 apiVersion: "config.kubernetes.io/v1"
1253 kind: "ResourceList"
1254 items: [
1255 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value2"] } } }
1256 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value2"] } } }
1257 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value2"] } } }
1258 ]
1259 }
1260
1261 assert equal $actual $expected
1262}
1263
1264
1265export def "test patch list drop item existing list with multiple values" []: [
1266 nothing -> nothing
1267] {
1268 let resourcelist: record = {
1269 apiVersion: "config.kubernetes.io/v1"
1270 kind: "ResourceList"
1271 items: [
1272 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value2", "value3"] } } }
1273 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2", "value3"] } } }
1274 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2", "value3"] } } }
1275 ]
1276 }
1277
1278 let key_path: cell-path = $.metadata.annotations.example
1279 let value: any = "value2"
1280 let actual: record = $resourcelist | list drop item $key_path $value
1281 let expected: record = {
1282 apiVersion: "config.kubernetes.io/v1"
1283 kind: "ResourceList"
1284 items: [
1285 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value3"] } } }
1286 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value3"] } } }
1287 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value3"] } } }
1288 ]
1289 }
1290
1291 assert equal $actual $expected
1292}
1293
1294
1295export def "test patch list drop item existing non-list value" []: [
1296 nothing -> nothing
1297] {
1298 let resourcelist: record = {
1299 apiVersion: "config.kubernetes.io/v1"
1300 kind: "ResourceList"
1301 items: [
1302 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: "value1" } } }
1303 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: "value1" } } }
1304 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: "value1" } } }
1305 ]
1306 }
1307
1308 let key_path: cell-path = $.metadata.annotations.example
1309 let value: any = "value1"
1310
1311 let error_occurred: any = try {
1312 $resourcelist | list drop item $key_path $value
1313 } catch {
1314 |err| $err.msg
1315 }
1316
1317 assert ($error_occurred | str starts-with "Error: Some matching keys are not lists. Non conformant:")
1318}
1319
1320
1321export def "test patch list drop item by apiVersion" []: [
1322 nothing -> nothing
1323] {
1324 let resourcelist: record = {
1325 apiVersion: "config.kubernetes.io/v1"
1326 kind: "ResourceList"
1327 items: [
1328 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1329 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1330 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1331 ]
1332 }
1333
1334 let key_path: cell-path = $.metadata.annotations.example
1335 let value: any = "value1"
1336 let actual: record = $resourcelist | list drop item $key_path $value "apps/v1"
1337 let expected: record = {
1338 apiVersion: "config.kubernetes.io/v1"
1339 kind: "ResourceList"
1340 items: [
1341 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value2"] } } }
1342 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1343 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value2"] } } }
1344 ]
1345 }
1346
1347 assert equal $actual $expected
1348}
1349
1350
1351export def "test patch list drop item by kind" []: [
1352 nothing -> nothing
1353] {
1354 let resourcelist: record = {
1355 apiVersion: "config.kubernetes.io/v1"
1356 kind: "ResourceList"
1357 items: [
1358 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1359 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1360 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1361 ]
1362 }
1363
1364 let key_path: cell-path = $.metadata.annotations.example
1365 let value: any = "value1"
1366 let actual: record = $resourcelist | list drop item $key_path $value '' "Deployment"
1367 let expected: record = {
1368 apiVersion: "config.kubernetes.io/v1"
1369 kind: "ResourceList"
1370 items: [
1371 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value2"] } } }
1372 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1373 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value2"] } } }
1374 ]
1375 }
1376
1377 assert equal $actual $expected
1378}
1379
1380
1381export def "test patch list drop item by name" []: [
1382 nothing -> nothing
1383] {
1384 let resourcelist: record = {
1385 apiVersion: "config.kubernetes.io/v1"
1386 kind: "ResourceList"
1387 items: [
1388 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1389 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1390 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1391 ]
1392 }
1393
1394 let key_path: cell-path = $.metadata.annotations.example
1395 let value: any = "value1"
1396 let actual: record = $resourcelist | list drop item $key_path $value '' '' "example1"
1397 let expected: record = {
1398 apiVersion: "config.kubernetes.io/v1"
1399 kind: "ResourceList"
1400 items: [
1401 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value2"] } } }
1402 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1403 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1404 ]
1405 }
1406
1407 assert equal $actual $expected
1408}
1409
1410
1411export def "test patch list drop item by namespace" []: [
1412 nothing -> nothing
1413] {
1414 let resourcelist: record = {
1415 apiVersion: "config.kubernetes.io/v1"
1416 kind: "ResourceList"
1417 items: [
1418 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1419 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value1", "value2"] } } }
1420 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1421 ]
1422 }
1423
1424 let key_path: cell-path = $.metadata.annotations.example
1425 let value: any = "value1"
1426 let actual: record = $resourcelist | list drop item $key_path $value '' '' '' "default"
1427 let expected: record = {
1428 apiVersion: "config.kubernetes.io/v1"
1429 kind: "ResourceList"
1430 items: [
1431 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example1", namespace: "default", annotations: { example: ["value2"] } } }
1432 { apiVersion: "v1", kind: "Pod", metadata: { name: "example2", namespace: "default", annotations: { example: ["value2"] } } }
1433 { apiVersion: "apps/v1", kind: "Deployment", metadata: { name: "example3", namespace: "other", annotations: { example: ["value1", "value2"] } } }
1434 ]
1435 }
1436
1437 assert equal $actual $expected
1438}