From bf013cb6fed46d1788633c6102a302022f48f2d1 Mon Sep 17 00:00:00 2001 From: Glen Messenger Date: Tue, 29 Sep 2026 16:54:45 -0700 Subject: [PATCH 1/2] feat(helm): optional runtime AI inventory via k8s-aibom (default off) Adds k8s-aibom as an optional, condition-gated OCI dependency of litellm-helm, following the chart's existing postgresql/redis pattern. Default off; when enabled, an unprivileged controller generates a CycloneDX 1.6 ML-BOM for AI workloads in opted-in namespaces, including the LiteLLM proxy this chart deploys. Chart.lock and the bundled archive updated via helm dependency update. Signed-off-by: Glen Messenger --- helm/litellm-helm/Chart.lock | 7 +++++-- helm/litellm-helm/Chart.yaml | 4 ++++ helm/litellm-helm/README.md | 2 ++ helm/litellm-helm/charts/k8s-aibom-1.5.1.tgz | Bin 0 -> 17019 bytes helm/litellm-helm/values.yaml | 9 +++++++++ 5 files changed, 20 insertions(+), 2 deletions(-) create mode 100644 helm/litellm-helm/charts/k8s-aibom-1.5.1.tgz diff --git a/helm/litellm-helm/Chart.lock b/helm/litellm-helm/Chart.lock index d626fbb472b..89cf3d2a7cc 100644 --- a/helm/litellm-helm/Chart.lock +++ b/helm/litellm-helm/Chart.lock @@ -5,5 +5,8 @@ dependencies: - name: redis repository: oci://registry-1.docker.io/bitnamicharts version: 18.19.1 -digest: sha256:38962e231f6596b93f82a8412bbe4cf5de696caecf5775dfbbd163383eb1c009 -generated: "2026-07-28T10:21:22.511401-07:00" +- name: k8s-aibom + repository: oci://ghcr.io/googlecloudplatform/charts + version: 1.5.1 +digest: sha256:d4621c5d49e4bb7a107e67a5272056fbd4037c262495d8c31abc150de5198cb4 +generated: "2026-09-29T16:54:10.796253-07:00" diff --git a/helm/litellm-helm/Chart.yaml b/helm/litellm-helm/Chart.yaml index a3cb388ffc6..3421e8f619a 100644 --- a/helm/litellm-helm/Chart.yaml +++ b/helm/litellm-helm/Chart.yaml @@ -39,3 +39,7 @@ dependencies: version: "18.19.1" repository: oci://registry-1.docker.io/bitnamicharts condition: redis.enabled + - name: k8s-aibom + version: "1.5.1" + repository: oci://ghcr.io/googlecloudplatform/charts + condition: k8s-aibom.enabled diff --git a/helm/litellm-helm/README.md b/helm/litellm-helm/README.md index bf4089404db..028b228a991 100644 --- a/helm/litellm-helm/README.md +++ b/helm/litellm-helm/README.md @@ -132,6 +132,8 @@ Set `billingMetrics.caSecretName` only when the collector is a private or test o | `postgresql.auth.*` | If `db.deployStandalone` is `true`, care should be taken to ensure the default `password` and `postgres-password` values are **NOT** used. | `NoTaGrEaTpAsSwOrD` | | `postgresql.image.*` | If `db.deployStandalone` is `true`, the image for the bundled Postgres. Pinned to a `docker.io/bitnamilegacy` build because Bitnami retired the versioned tags under `docker.io/bitnami`. | `bitnamilegacy/postgresql:16.2.0-debian-12-r6` | | `redis.image.*` | If `redis.enabled` is `true`, the image for the bundled Redis. Pinned to a `docker.io/bitnamilegacy` build for the same reason. | `bitnamilegacy/redis:7.2.4-debian-12-r9` | +| `k8s-aibom.enabled` | Install [k8s-aibom](https://github.com/GoogleCloudPlatform/k8s-aibom), an unprivileged controller that generates a CycloneDX 1.6 ML-BOM per AI workload at runtime (model, runtime, image digests, each with evidence and a confidence tier). Namespace opt-in: also label the namespace `aibom.k8saibom.dev/enabled=true`. | `false` | +| `k8s-aibom.*` | If `k8s-aibom.enabled` is `true`, configuration passed to the k8s-aibom chart. See its [values](https://github.com/GoogleCloudPlatform/k8s-aibom/blob/main/charts/k8s-aibom/values.yaml). | See k8s-aibom [values.yaml](https://github.com/GoogleCloudPlatform/k8s-aibom/blob/main/charts/k8s-aibom/values.yaml) | #### Bundled Postgres image diff --git a/helm/litellm-helm/charts/k8s-aibom-1.5.1.tgz b/helm/litellm-helm/charts/k8s-aibom-1.5.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8445119b8ea12cc1357886147f9e22d0f94f40f5 GIT binary patch literal 17019 zcmdp+Ly#^^u%;WQZQHha+O}=mwr$(CZQHhOoHoAs@7>RCR+CZjE^3jRtcuKx=Ou`S zLZJOUSazcyh5Bv8XYcD6?5=DRZ&QtEsWes@qr@+L?H&DBAN% znA+F^-Sm39<8U+)=JkImuN0o)OLtzK2_tx4==(XFNWm5|49WI_T{=O@lm%`F>P^zni0~(_f^I2=Em=tEZpbPe%ZAoGyE5A30i}-j zyPK06$hf%!&biVekh*7;#*jLJfu40TT2x&@V=2;9T~YGgFFnQ!Hd%_Jhq$?&kT^~5 zLShtJ)ea?8T2w+QMa%Sc?@wIL5}u^S`-+5^a^VgF57Ox=z-w@D!M&(TSdi()G2-4S z3AIvHMMyCVVD^*?_gMuBe_X{Q3_MDXhi&=-Q6g=Wb_LV>4ZaQdR>JN1BPQP|@m?}V z`Gf4wfYa~(J>IK6_OJiK_3euuF@WIah2tCWb^y?Jm}$;5NUjVLw0D3ETO9g&8{bQ7 z2fK%Jk0+ETp%##>Jbk{Kq}MTS` zBSM1Xz~mSt<+h)Xm#?>zVN5A)$C7U)JH>m}h2O?SM>;h`ef#>1u;_TLZZ9Dj8-tOP~ z?Ete+psP=yyOWo@H*m^^tFM=nvzw=@w=;0s?%?vs;o6BQzP(upjA?Wv8}9HRNr$XPM) ztRX~>iUuLbLZ7+RHDrPfouY&yD@6pIY9m>Cmz*~0&NFl%1|lX{xVjOHax^-#FLbB$3G;{g#{vu6QE!9M3jle zXU$;ZrE!s8;UZo*hbA+D!lLCx@k8bN|GwIlt5oUQkIxeoaIs+KF41#h*@_cYh`_XU zSTiGX?m(CVGD4taD+OYR((P<_RsxEklxU0M0qe@7Vx+7n&uR%OmuLtuuHXt_qn3lY z6`UJnK+@Q9M8X!#B!#1|Ta7u>(Qp34mSSh*nqCmw_VM;^hk_~I30_J-D=wNo&N>LG@C zxR*@uhB8KxKKEI~`UOZk%1p#jWCKdwJ$C8%xxJk{466Ocu~4}B)@C6xE88Gm@}o1v zP|O&{$XBk!2~LR#m`y&Y&4?{oAb@NCZ~2kcTIJ5sj)ykFW2Fz;)Tj|Aw_qG(Pt1}O zF;?gUZLwp>lN1vbp`nn5nZ=?L+rc(7rNLbq%U`6$uRC9V5wuGV1apc9*rzZtxeVAu z{~3WWp5-Q?W;~@NAPMYcg+d!aOJNeu?to&H;VVH$I0*GBV6?0xMVVrIhj>-OF%uEv z1FX2cgFv4#qa(k7r%;?|!4F8n!AhU_0FxJUpsYQXL1mssI3g6DDPeC1nr;W}*DzV7 zA}7H_YK5H(I=Jmum9=X)HxN!krT8MDmiia+h21S8Y@?sefWpQ30!*hON+Za`k;fS* zyUMpY(o&)R`G0DPS!E^2A*E8uaL6iG+Ez-$=~r3Ku5%<^FdgWhOtQ>u)j@_TLNg`M z2meSUn=-mOE92^O7@~bbp^oZX_reOE9y<$pzc!sjeyvY8>kH%^4zqb;kDzJS4~Ad9 zo+Qej90!y{MWv1cuw|mvrwUUdjx2K|GnExV8huo`fjoq2dVmO@7xyhI>K;6(mWaN~ zP3-|`4-sQe{5#QrK>OcGP|U}Z+QW9YG$0M^=9E1-u+#~^y&2S0VN6{3&#$j8;Jdx2 z4>mYY>?TZ{TT2r;exq~JwwqbTnR~in*aI;D^+g7BR@el#)ZJxAbC|HvB%3kN$-^K| z@v^p!;cBC*DS9qdzzLEvAJSpUZu&F4!Cc#a&y%`ec4&(kDCX%Qu8N41#rdXgfN8go z6C&cnWM~Ph4+e4B8yg|8)Yt?A$isoc3erEF=S9Jy0X4Jr?p%Awh$iOdz9U*36~C+^ z_80}3+D%^josES!sPv80Y_X^#6NMTnb`vr^XN-mPFf+tjstC&>tr3hVajIYXL-jB+titK8$IU(-Dmw9+FkO(!a~={pAfY@= ze?nKH0+}|YyMn-ivHXoyRjHYzIKOzNSw?g@7A+^s!#C*4&lH+WHBGTNY49a%9R$T& z(d;UxVa7vcF_g7=#>2%})|&J1U$I)>*i-F+CwqusefSwcV!8NJQ29h9bRMx~#CaLb z;3F&BKPjPRvvQPX<~*GnLQ*WO#ts8;pu~gC1?(yxPA>p{cPVL?%rTbR7u{WNrV1++ zqQ!_5;9ZcIpNofc1E)X^WBmJ2s=*t58HzWRDDp)ojeCTP44Dljg^BeHi|qO|G^Rc8EKIJ2`POCy$wMwp8kJbQBc+1A3`WEMnj6E7^v6R9hx?Z>H z&hG9j{J;P18$gfS!(&dES|(c(N%vmgo6h^}k^)m1K)C=JAS?i`MRohNA(o%0p!!kY z8}H?x8AmC^d{1#gBK;&1O;GFpqyr-B$(Lzmt6D7`M1!X6;p};*y^A_t20Sr60BDQNL~=hAN&kfKc4}04yb0o`S-UqEI4@B`K*+OIu*D?dek^N z=xu%^)(dSw$}b z(crpcKN8KuL6~gGQ4n#jq$r8LLtV_JLCs4~)eW50&`WmJjEJe+JBkQx&_agUX`CM1 z%4826p+yF6^CZ{gO#v)7>yr1txh0P<^}yjS0S zhC6mk=E4+$+0noHIofCW1^}0?mYaXp5@)dxICXS?&riKO<3)c?H-Ky7{?_)!zd!uv ze!2W^U9THz!MpC~esitg)z*KH1kQi&yy25~|Lkp()-Qi}uYG9i&GoH)pGRJK=5ic% zmd0w1**I3a>#$s&?<$P8bb+cvCZP83LHfL+aNvLrpMHTY`8&M)J9EWW#esSXuq9-; z_h&wB=j6EYD-yRK1TAfrn8Ja(%?)441+eU2mU4~-$aJmio4~i;GzKa?SK?^?o#o;L z#v&rYs8pW9)ofZHm@x~1gn+7oJXVUkjF8(!ndP&|QMlKD=NRjTW*4oT)5;udc6zfR zURtwZc1z#BIh)a@fM*IHtg!u>e%x14cCpLwFC{I)!B#G)EO*=H&-i!|xqYj+!e@ph z0LEtK^@03l7vgfoPd;1H;HY|s11bWf!98K1#EKGYIwj<8hIU$AwVgWs)we;_v(4{q z#$`RB1$r@D&2v58#rKNmH~N9(kaBRbPFS&}VM5LlC)7zx^&|dJx%|Kq<6Lo>AXwRU z8Twq)%U)2MESzd~AU@idmycKzZ3oROrXD_OdVfA2Th9~CH_3U_9Gnl5l#mj0VIsfK z=!>!>FUMMlj{iPl&~os4M%RbqXRHJvQ|l}lU-NVGdl9=~8By)A-maD`YRwvRIs<{) z3;RJ)EW>Ix*xH(&&}xrKx8XvZp)28rWpJ9BIMy^+2i{lwoEFg5tB)u9Vmd`=Zv?o5 ziM@pY+dhnJWgkw`PV-uQxjs0ZCNx}`=*q5FZN| z9|Ii6-vJa|Ay?KZNY$0;HyE~DBG$_*#&_O&|E7rvpJRB=8efsABt}p&)6#Edvz0_O z1t5deXob}S7ob{tj90b*e?wDAKkmW2KHk!G%pHH`-uD;Hu}x{>Dl&~Q2?&kgeY!EW zJY-6j*^Nd;vfkMSHjZ17NuO9nsWUt1d`wps~*PE$3kDT9T-V$(0lDe@eoLi z{VN5{qWFu~V@Yj0_aI!}!IGA%dtt(p)CHI2{PGN?`VMq2@pun$)BJqQqmyLngybe- zF{CV+8iuz>d&bgZwgwn=Mudsx?ApBGaEE^|9@L)|?Pup0Ov zu}asie;&(wqHp?}-WiG*S6Q5omy;}xiq2;{Qgt=*9?$Hqxfk@}h?pl)8dhcx zb^1ni3xcrt37c_vX$NGZWF)x_^ZJrc=fQHz7qykYy>3wT%-p;nL@u&HFu1jeZ-(|QIF}h+w7^B z6Dmw&*ot_Wua2>b{q~ph^r%C!00R)<_T9`s1A2d_;Q;#&05||3_!&^ErmuKzaXOt) zypNVwbz_UGSB8w}k~A*Tu>ffc$21O>Kxy(wh~xfjLo6ZE?csu*_)wQ!KG#SP?)zrk>H6S%LW@(F<_L_8>`GlAXf*M9C z-U@Pd=Uf9siTkaXGZTuM(T)nhkvtNeIIHZvuypxT-=}-uy4Hc^fYP+3xy4Gg(?Sqx zGCSOb$GdIgJ5og-RA%~;E?#tr`Od;G`_#`mz^ndLPX<7M2oHCD0yOko`3SYO)!P@#nn;_9bteSrMoiSA*$TmBX$Lm8Z89X z&AY%Us6kon8h%-%v6jOzx)0KqtlwuK>r9v3NsxGU$Dx@yl@V6 zUd;5ns77u8{#9OR@xx3x{Cc@N`$>yls3^cCR`m;wlrW3Gk3;Np-1-(Le}d&mb%S{g z@H35BDNxljZq&k~!G+pi?(Bewp~#0XR-0Rx?&j<4>hc}>wI0;C)YoI9 zJxUdoChZ}@R${%usgi2qH&TTQ)6Z=)Ww5O(spj29h>C7haK*Wjs2^lAJl0-lDQwTS z#l7|w0)^AlhrJ&4pd~KBX3!4Qi|wz@UM+gcTQt7<)9KLHB#CtJrukJFf|OQU)fg&& zJ)5h?o`3F_H3!I_eRS@91{nDJ^ZnWbO#9op0QPf$>}LSM_xF7gLg$S5Ka%7N+EL@& zm%&r~tZB0lY)a}V$QVPyHzTXK*AYpFvSmNnKZ}o>6+qb~Oxm+hJPnPq<3+-K+fBq+ zTdlAE@N{Cida;%hCeC0b1yIenAkU0hvyeV-+p~5}V!fZuIcGjcXFiI0+JBqWQiq;h zgi>D-tR35EifoBxDMq)RQHiq-Y@_=c7w6D|!l2{o=KfWyT$Gwj?X4GVQ!eA*HJKAw$t zfbBPc{ny{$1<)^_Uv<>aMHIqM0f3?6r^s7F`!|oOGLLcx$9~tTs9twA3j^c+V*Tau z1JB%w>BNDWctih5_Pc^B|B6}JkOFwqhyM)b0^ASk^}9D50&sr&4*~u*zxQ8$v8~B5 zi}6uq5(rL*D(*Sbqsi9RzJCXGIJl|oZzI|V=p@H{l1zj4mn-rJEFnFw@@|e;6$Tfq zQ%C#`(G{8LXR5GOjDD;o%kI1d0gRlKr1CJ!+9vU#5St@8&)8ZTjV33v%=dOaacMK| zx3+sMm8?0mb6}C%h^w+EDKNfq%_x`KW5&xUYPSHbmp9)Q+MC;YIn9NSMveUj z&qN30(iFA225OgYIU=mwN^BDMOuH?fO2OfR$I%P8qS$z0kN?uhG$gAZEEomi$y=~8 zJbm^l9NEdn6eYrxvrzN=c#1C39t-xCRUZVF4GYO-hDPIae1Mh^P=;}EB zVd5fG4E$Ft)8apRrGs$N6ilkPo-R>HJJ|JH)_i6g^Twu(mLkm{i>MA%)dgh*G2z8k2aKr*Ucz(FO_{ zn~JHD0Fk^hcA^eZ@&+Eb=1?9+%O|f#Xj&9S{oHD#+$8TYupIx6PB3hyWX2L1b2p#b zdv?|;$as|jQJWfj85N%8wS36rZ28E()S_c1y~Kx>%J!`+zi7!LV_t@=&97G@cuKGA zP*l%~4BR=sjF+;m)`=+LEjZ3 zxkZdB`omMX7AB%j(V~+E1F1{GaP~F6ySe&{8toWdyT{JR3IY)|&ZkKD_CcRM>3dEw zigigfTyr9LU`l1>qY2H)bthHz9EGzf*>0w3`GA#c}<+T6IfQPT`6!Zt+g=r z!c=a72O-^BeEegL^>D$Nz%ddcNBrz#y=RO9p~VCR)mLc%oi4khZK0B=9{%ylxzmR_ zf5$G|s8F8T!6vi2bL~9SEGM^inkpl?3>O^viDXi-bBZKr2sbVUCWW*7ah(Z@a;4y+ z!fBA3q9IjgDQuEO^?_om9mb!m(@Dx-f<~SS`hz}V^c1>8<(eRAb`M`KXKe>*<1nUZ zCH7R?>)__f=M9aQUDNY&%M{16Dxy(XD&4cvOh8yqf73%tn5QWxPMwqWn6t zi`zx~0T8;1;`OhOY|zp^6r@!0ni5A`8LhuMFJAzWy+eXq_VY7qOAz(J?IW0QH z>!mwEr~=2Cd>KI<)*Pg0xT>86%A& zGsv;gg&SnZYt)n>$uA|G>~L^RB$S}4TKvHER={P!hbq;q)?WOm9Np6$MZ2vu{P$wt zH@akCx`>veCoZvlQ3aZ|dowdQeT2KY@gKe*Wny7a6Mq*1@t2?(6m>mYpnUeRlj#Gg7Q!HN9Ivv!onbkh=4w>IXI~DcWnl^R zw*#&YP7R$&(z?Wg%^1b}3e!{(q@42Cj&!D>JnykseU_I>i;r35#Z(HAv5n{l8P`i| zL^k2)$>|zg34`j)AW*HV3||3ERam2e=-!K-L?pozQ!k6D@oBO@C}+K*)d3&W{?cXb zHPRY~)}lrdC<7KS6?}1(n(}7Rv+p3epAkb%#Q|^5nT34DO+3{86+-6+^PR=;f6ko@zdwP z(5X^owJ6Nv{;(=Q+-c+~wZ}OJ+uS*zWp1;#-5FX3yGCyN(7YpiOfxY-|72t~7;9;P z>jY{E8%PtOkA!pSQFz=k4x7X-7ZNAuwk2v`KIWC7uvWms!>6;ER9bJ$Or+&yUg>uW zfollpWMec=>Ge;?`3fHo_BFI_c> znmgS|EP~88Fl%4b+rS;Bgt@;O+zcH(<_Jl0(zV8-7p(T)gxtYs9{p-zxxV#)ezL%FXtg zdM>v+J)Y|i^UAqs>ZyFe&e_Ro5utB`%#*nJR`*|k&MuBl7AaPJ)1t{-FW0a=%^2#9 z&TqZ!poD&m)>aY4<{~UB4dUfy27A?dT%}OjOZF31w3S``IEb5L3p9KFbF8+W&1ezC z&}Ej62t3_1<9mQOMXsuEtZ|DzoaMD;=H?3wM0a=f5+h*CL5tQ4)o$$1YV`>mTh_>? zcJX7O&8nB)dVa))G5Pf=uT`sqaprPMyBh*ie_yYJS{WkaKUC3kDE0raaW-4{-eEB- zxROo8ZVbZdw|Zs2Vpnou>XsSOjH+tK`kaz`Fx^hPB%Um7Q^g1!#QADqnG&@X%3sXA zmC`rB5}DbBRs)MBoO&r}UCgKCHawilL#8HgQ~9lO)tfxPmxQlY3A{Ql*7x#!pV;yJ zsymuoQmj*Qf4DyW)%x72y-X6LdC7By_%11AKOxcjR?B5sJ6yM}J^9>j4JzKNO-O)k zzoJM{$=dP{j$tHfoJ(VRUeDXSn1{|N&AmiT==gm5lS*Vx8WUZ8<2eiL%vXd1GKHCY z01E7KcTv-PW1(lf^*)3}4Y>2`YKw#+s;&Ra{i%6wIW?B0^_m3E#w;z-mNS(WP;Dw^ zQyTNe&UBRHTBcH@FA?!Ef?B_>72cQ)ws-6TXKkx(=OltbbbmQg<4dMenDGGhpkvzE zlndeTUjy@Y@x9j1|7}MwUoWTF@*HlnZOc7c*T^eH?&J$ZR^>Iih)(D6w*3llkXnMG z!$q~mCt77V14X_lC3Q*UuhBN|6$0V>$#B%%(XwO^_=BLFr*y5<_HNrf5&iM!&1DL0 z4Q+*k`;*56$yQXJdOxlQm8E-oPsBS1kcykENbG{|#~yNz%7y z!P0JoOt~58cPf>E694l7_T`-`;)2rtY|ig*5g$)N8cLsi&2D^tHyLeFl2fZ|7q3`+5dShn}P+o~uC}#;<1$TfVs|-25Mj_=&mA*x``c9rEh_)s~=1;(C z^MtE8gvSEt=4=qvKgsv{(y`{kfVp0P??A% zaF#teawJtRo_CNi=)`sz9e8^sq_1cj2AH3k`LYAg7v?q;wVmdq#b9n1tAIAjVX8J zn#TUMTxD`aZsWMV}ZjYRr>v`h>QF&pYfhuZOcL4$*neV~g(ydEI&M0O54_ zssD9OX=fI&iGwtk(+p$wi=3vr?B?zQ_&IwTqD^2fC&dtrW1Dq5gpfmKpKb2p)kn9k zLAVxP+MXau3N;=rS?hMe)w3Mjb}u)j>}2}M&ZcGM3ex1dHF%L23W=0MrVL$$(%P0x zANW#z%}14v^509LAa&_nPWl^IS&bWwTd;c9I)d)WO`~D|@MwZR&|wrlXTj74Ggzs3 zPy!;Xqg98*CR$o;J;`iFSQ;}WS!JkG>{8niF`zLiaoy$kdjHQ_?Mt!&XOV+iQC*0iz&BbaO;PGTw3R)SNQ2EYZTH3Muf<1h zei8I6wR^e88VlW~1;;7$GW&KrBUW5#Vbw0^;<=J=)PjH#5eyAm-~QFW8766!Xf}x! zf`*k3qBam(<9HCxcJ#I6Xq^6if}2hlOlCV%KC~vzo#(t6>l@!|#NTI#Bf!!#;QRO$ zq3>sX{jNN>|9jG#c=qs{FP+%VJhR*05kIKoMAB@=Qmfu^y+}wQ(=lDU^dp+{Lv*9C zu`TmB(gFH+t|$!PRk^}GNOni&3~8g?^@_rFH_$%LQ9DoTCa(+Y{iJ2hYoq>B90s=F zvSSfwsdkS8L-&wZH)Mz@^R@g^3DqyILD0#}OiIncegpARx3Hx8`66r3Nty7by1 zT<4KsgLj7Odgp~#>mLWco+fC){ui(s9xqM_9*<5RzX+C|H2I8R;{VX8c|Oo~H)wkc zy0gXoef;=OdhOh|Y!0RMhW^8{M|9el&L&Cclob4%pBZgt--H;<(Yr_~f@n#%<;S1oPDL1jMg#Wy=OHYA`mSjn5Xjx&YH7KfXS^WWeWw z*J-$Jay>pCTecv~k>5KhO-^MLo!VS!@z0<0*Cw3UY#gf2#H9Zf`NSlH&~YZTt4p4L z9!O%Hnuk~acFHX$rgfO6`J<0)h7Z|s?fysZxNz_Aa(UASRRwwS`!%OA?&{$Dw;$U7 zSIQsST_67u>8vcR`IJw+_sj=>E9Pxs;2K^5?f38P>Fol2epA7#r*pJ( zGmIf8G!So9N;UNUs7q_5y(M$EF6oEu*1ge!=(cY7B??V>FZD14?@RUcg{#l2rdN;vmJLds;rA@fr=>3dOZiC{4{d>IFS>FH#a!t5-2uX_JXArGt$X7?WR z!PgpkqC&64)h@auU|!3-H_*m#3#3QXf!+YEYcrKVcUxKYfvsibcvtz5>H69dND@+N zwSf&CM1QEs7o};TCW&L@MmuHNj2M z(M+*ZGkvs9o!#yus2=#;QwtUqrv!65$>8(eh@V3_>oALC&R8mIhg3=>Ul?-j1--mZ zV7U}~Ao1YVY!v@LbB8agR)ATMxTi*GI?$YM17EVn=is1orex-F zIw&T54vu%;<%NWMV>hB8IT8AOCpI!s(=a`W4xYbUdeEx}7EMJ06t)=wR{Y$p7K-!|OmLO~n+@b1w&` z-4R|EfxZ+Lf|UUupps;(s<@+i(7dW#LwSw53F(`m_buW>U6=xLs5&!)RWlG8YNB43 z#n}eQC^)D;`}cM9S^~D^8k`c##7EDEf(VZn=X`3kWqaCzM&IABGXB;F$|~i`%X#1P zF-oe-y+-{>txeVyb^v>3th!-QJ8s+3oOS*j%k!aW0VhX!N8~Qsk81~#2W-~$+HZZL z%oQ(v;E%0HpwIMre;sZYxyivu7|VGR1(K6sA9`wH7!Wmz*+8IVogO=f5e?#Pj0LoN z+{ky@$OCB~g!jT^8RoEHG~@X$Rn+s@tY0>Q5i3=~S8T7sQ-whJ3o+KFO1sjzGn$H= z`UJZ{l>o#{2>=&GoEM54ehJV$<6LoHZh~6)=*t^VJ={$4MRpK?%$%3k;dU_GaiJ@k z%43^F)XuywPup#x5ol3f(=Yzm^)_lcIs^x|HR62iV^2K6rAE>`w|@H zFM_KR86oDe4r^#$hf|2dM-*JLUo^yRq$AG`vCilP?XAHOL_pAcGK0x0;zgHq#Tu|e zItPk~MCg1YgDvC3Az4y}Op?Spfs}Yy(6fKoJcIzfNIlnZu3A*U~$p;eK4Xk3YTg=+x z1kORqjuAA!U7RVj^hh(6)l{T2Q8~eHGz<4ITb}D6TlkPD0$LzaEKf4V{8My5e~M7q zHfzWe(p|Xvj*jTqHS4$+RH>e5DZE&@qp>!mpZT{rbrh6TMT*(;6@P|64jYC3om_M>AzS|yb1hsa;78WDOC^2ufs)o)r-?!ep`Y`|vnka9ANDg#Ui-a8d>wnU5YOgUz?aD-zg$qHjlVFe(kYx@eSB z?Kbh1^))rv+@8v`g@AXlOXlQxa!`P3lPgf>fJ`%~0NI=_(j#AWSB$g&RaD)+G{bJj zuXOVm8|QjTBP3LWN?}AHjV3%fAo9}O0>+Sg6&gCdXf9C=_>qJ~OHS7ks#V)_a?EXb+ZDsz4q|O|Nln}R zK(xAaXSvvj_h;2jeT`Pf}wrUjP2P^vUKt(xh!i*GMtn z+Qw`(Y|K3Dl8vt__3fLa)0p+OukWu|>&eA}wp4kn(V6e5Z#loZs=52jpq~}QAh-q= zQiYWTx&B`j>}7n%&O5;}(q!d25YEO-Z0rI{u%DlzB>QRROC$MI-getMeiXlbkAPu; zOC>`FJ#V7iUwaXeO8coW>!Q`Gmn6J~3V2@AUV5BV>U7n{s#+vf?HO z`#C;r9xh&|7_ZNZ6s9W^IC_707y0I$CXYnU z=gWnd4?aIq=24?^L&}~4mOICKn%PP9J-jf89~MTbxY(5L{mnk;)G%|luLw3=&*MVI zl^+;_dEg=?CS?)`@!1%fMEEa(It?+-;Yz62s!f{e`F&mZJ^1(`(a(u=7UeCH>tvpzf z=jJU;?k*aFgr!&9x5zM~mU5c4ZjH76fFICGY+(oP>&SNV;i&_^2fbfs&yU0NsoJ;G z>&Nrv%k61*VaEsUoP8Ywy*-0{UHH*iFK73!s!vZ(-v$PCnQ-PTJ>mnFKt!~3{aRF=}NL!2w+Mp zW}AmRUT{Tj=_#51{n$c+wrG+d&@)>6;ky@)4rPSDSS=fxyGPVq^Y6>7-hUNMEJM8b za)XYxpy2SNbY!nQe};2OwYNQbE7NpsFf#XgRsrAhy#VONxO~5>#L=B=z_eerABxWQ z75X02#m2flUXQNqK_-9E;az#D{X9=fbl8G;nCbSW+onvZIlunzTm10Wxb7GeoUJ)T zxA53zsRs@PRN5_#W;R0wMQoSqa z*!)1VU5qNs@E?VplDIa-z>s1uY~bbm?sRF$adU8<+_nJ53;0Tvw0?uHV$kLamT2zg z3c$9;%HTiEY>&hxlh2Qd(3Y0bKKJzr7KX^g=93V%oCDO9dM&(7VJV2KuCFk3>jVr{ z0x)~0NQn^8v4V8h=;T&{$l6u%0eKU?BosDGVPdD4qaY`Lhv8L3iBgfVFCD8Q)gnfd zn#i)JKvEt~w2$!Wx10hcoPvYv4_GRAR4a_=;@Oy+|A_AurN~9T*I3Q6kU0&UYbSRj zdbGxP!<_COH@7aEpnOtww9C^b4H0Y`Olo}7$`N5i!b5#b_%270_y!34f> zO}T{VK`;Dh5!Ii-8VGS>=RRBt%_{m|!$^~a{E)wcP13%n5ud(cBT6P z52Q-Rphjii0E2GM5rOypKX`W^YV8|aLdIX1#&wPe`(4E}$U64Mx=vr7)&wXpmsc}G z-R`J)|AY>uF=r-GW+VaGr-!U^%{mv}T*~%{&Y1h%e=|FDwlWks)=h_E)JbEdu2o>W zTec9NDU0#?MH&2H{G;{0$LX`&pSzG24Vt%hq5dSO`EhS%nlWsuV8y6z$CIQ?z#@g} zgR@!kA$2rKe9?6_J#~oz3ZQgeq|lPojByRt+8`IybmYpNr;xbNu)c9dcFdEd78-ui z*z9PR&+J&CDF0NG(eww$LTd97^9vMCo;7Y#cjbEhAq&V@FgqqmKL6ZhP&4;7%eIng zZn_Hr&#d%%n7#7mtI3wfP_w8}Z>L9VwbQZ9R!!1~1kv$+6Ct=|G;D{5e zN)W##V?Ss7W>jKr*a$&w{)5lHZZYq;LtWG*gbSeaP|@i%j+hB zzLBaNNE2Et&+jFV?@1{lq{R$B&gen9G`8%riH|^_f*u(bjds5=HualkEF+wg`JX{4 zZ((fUtMZ<83$it0H>~*;r=dD{k)ZPXs61aJO++|#2Q1r_ky7^XWu9hieri-|I*882 zpg3ai)i}cqHQUNIydg(iLXBWY(#W>)u15@J##W9-Xj=C!ya}47EN;LGPGb74;)b;i zT`mqq${y5U>t>Fs>#r^mLAf2Ud} z)q?U58Z(kL6>r=!h_#K=Rw|i69QL+UwKu3Zph_;vCvS)aHL(MTxbM96hO;oVQ5R##Awm_kMTz;&} zm1Dd=??r6@BxB~ZW4-+xPgv<~jy0JBBy!zLb z8Li3%%UjW;lf>_`CHr&L>t` z>m?Eu`2)*RxrKRVq+Zh6?V4Ii#m3m`d~o7WRuV(uCb1lzhWcT4u(}TVt znRsXrre0q+b9s(N^mX<&e59Ocu}H7uc8dG5b!p!R6AXu*>FdzmeF6;6wZ@Qotr>E* zb`!1&x!7r2ZuErO@$2B_mv_vb)OltWXqHuz!!ZoJWd`oa402}+)dcgd++?Ao7no@{ zR!7SR*0i<3a~7?j8M1$|;ai#Tf0j2%LOg|#&QEI&87DS1Oq;EAW=-QF;TF?po0B`A zisz`Je=v)7xvEL+e?{U^;Z$4jGWWO0;BF@S97*eT3bJEC|jZ`eY3T{hj>idp5bw^uG3y+L^nj&&-$fg9T^ zU2>8XFW`uL;CO(+0oxXfEZ%bN8ewOPnnu62&FxAj5sop>??PY4wo}fnV!lwWS)iQf z`^r&x?rE8%ok_zYFk6A*TvHD#veP-!2|qKo&-HkA)2@Lg-noj-fS#a=e>n6sOp5Jc z4@>mAq8}U2=DZB7-a(Ijfh3f;)ue3GiosPC2|vOcLo7=xi!M$|Bb6VmH&@F;;I;m| zhtHngZz5=YKkFBp7Q#APVl`MV=Mh|h^m~2dH(6o}`NwC5ed^)&b92Gr*S{QwH~%*( z%ALPmxkE%-n|8C92-~+vl8)C0TTr|I12r$hOMyToU~HrKeOV~*?gW?ez0W!+*RLaI zjz^Y)=xz?DIcg{q(L>|48eMoKkk?|^X$b>i^vJ0%*UdkQ4ugOft`j|Dm3EvNKZ>-B z_T4nRBF^Dr54Y8CPf69*`pZ6mZeDwLbA1PEQ$4e!-4rT^10s#-vU;FoI^JMdJpQkd zAVU7qqThqt+9zGvGRtcTkgiRp(j9| zf7Y7V(qnaUygiOn`p)0kt}*3$K*Z#7UoqTG-loH#4V5g$6c)iv16W+sB}65TLkPS3 z(RMb?_ew3pFoJpTlpV)xfNJqr*;L0FzimRRI{n!O=2uIS^7n%Et|x))69I4uJ7m=I z(ogK&NJ^wi;0{YP-nmh>QArd;snUIwZ5xoTX>z4;myG!{h`jF=fj_PJT4a>NY5I14 z|4vfn@`-!Ps4V!hbf@VD#O=S})2(ILx3@;vBJ?`JBzuXU-}Lp4-p3#A0yTGKSujIc zUaa!OtUyvey3fK6-wA5&MoHP{6<|!x^B&MFn*@wechpnro+O*cdK%XCh@E$F$Y8uP z*-Vr#yhM?y3?*?5*ZH#6Nll*AfMu1BCxchppcyvb0H3YkQN@e#I7rd z`A!IQ8Z%1jym4n}S&pKZ>LLF(DFIghBVB|&AMH`N2VBy8h@btIl|7c*wYt%uoPWev zG#E`}6@YI2fK~@D*;9_PWwoUr-0`#r0VgKv9&_ZQDrl55o2Uc&nOrH8u8O8MKlMIjVDFBF-T2plzieI_VmQkG zT>;F>e|IDA*$7u^ee^qg;J6DOrduXeeLsT1`JT1J7bcX(^6p;xxDc z?{|udUn5`33PD}+*t#s+X61Zh)AV|VtI@ELNLm#MT+FGGP4`YQQVc%4SZ)8UKV-R? z8c7HN5xt2^qXN6Trk;!X2uxlu_`uO-g~YFQUfh9oqfC^Ar~VE3anT|&DuxblBZMf@ zT(VgeNmWonFrk+6qmHs-7VXPXI{+kT(Cj+9Wehh!qmoWKCq#9vWqLA{3Pfm{JL~GD zCJvq9yxO$rgj9^8lL0{Nr*$qVG|DT5sv3tkO->g>HB& z4EE6#%r1lUonw|b^`hJY@!~sj{g;Iu{60Os z7It?cbmn_wu@uc9sYu1JAGW*_CpJs(;x~_46p8gzvJqoO4enaOG=wW``@}1%7A=Iy zY@V@gnL*t!#ch|7_w-QFgUT0Wu4xhLo{c&2augE?{oxsn{HRj^jDL4s)6A1;nz;aV z%cWDar^bECeW~1d4ZDCe9f*GbiH~)Rv zvF=5I&Tde;q3?34RBq5)i>jR;Xv-9l$k8<@ZRyv6iIa!tieGn<6|yfoNiqv3oCb#D z7T4}3nhD)83XoCSp=>8#8eI>QDcrmUSN&AaoPPk?p6X8*ej?>7P=4dymMXj~p#q{rG- zmSp8yVJqu;=nlmlO`7S3v4QHTV?tG?%oOSUL(#f_*5@0qrz=_S9B*;opw9)d%4A*H zFG94PWid~wC5u5#fT$s?qV0qu^VC;Nvpo>ioSN3P9-Q{HLbnFoj+qCJgLcn|Jq4`H zkNqL+6FK)Vk=a)n;ZGAASiea)<{KY)x^TWT(G^ee_DbvFMwRp~7n^=863HW-lCYJQ zh+Pp1-v}RLM1|a`;;A7CsHx-B2=lTZIeG^Zy>qA({%_9jGxC~>tPK(8UC)7K^x=s% zhZgtv&NU0gF4Ve%I&Q9R0(8?FYeO%vaQQ{0$UfH;yYv+M_zdIXrO594!ne0~{GYA4 z$+vCVjfzC}l$X{m-?ueROB3*B+xUiUqskWHV;fRCj>fuR=CpV--80kn( Date: Tue, 29 Sep 2026 17:16:56 -0700 Subject: [PATCH 2/2] helm: bump litellm-helm to 1.1.4; unit-test the enabled k8s-aibom subchart Addresses review: the parent chart version increments so the changed chart publishes and selects reliably, and the enabled configuration is exercised by helm unittest (controller Deployment, ClusterRole, and the default AIBOMControllerConfig render when k8s-aibom.enabled=true). The default-off path cannot be asserted as zero documents by helm-unittest (disabled dependencies are not loaded) and is covered by every other suite rendering with default values. Signed-off-by: Glen Messenger --- helm/litellm-helm/Chart.yaml | 2 +- helm/litellm-helm/tests/k8s_aibom_test.yaml | 37 +++++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 helm/litellm-helm/tests/k8s_aibom_test.yaml diff --git a/helm/litellm-helm/Chart.yaml b/helm/litellm-helm/Chart.yaml index 3421e8f619a..6145fcb52d4 100644 --- a/helm/litellm-helm/Chart.yaml +++ b/helm/litellm-helm/Chart.yaml @@ -18,7 +18,7 @@ type: application # This is the chart version. This version number should be incremented each time you make changes # to the chart and its templates, including the app version. # Versions are expected to follow Semantic Versioning (https://semver.org/) -version: 1.1.3 +version: 1.1.4 # This is the version number of the application being deployed. This version number should be # incremented each time you make changes to the application. Versions are not expected to diff --git a/helm/litellm-helm/tests/k8s_aibom_test.yaml b/helm/litellm-helm/tests/k8s_aibom_test.yaml new file mode 100644 index 00000000000..770a8a41ec0 --- /dev/null +++ b/helm/litellm-helm/tests/k8s_aibom_test.yaml @@ -0,0 +1,37 @@ +# The k8s-aibom subchart is condition-gated (k8s-aibom.enabled, default +# false). helm-unittest does not load a disabled dependency's templates at +# all, so the default-off path cannot be asserted here as "zero documents"; +# it is covered by every other suite rendering with default values. These +# tests exercise the enabled configuration end to end. +suite: k8s-aibom optional subchart (enabled) +templates: + - charts/k8s-aibom/templates/deployment.yaml + - charts/k8s-aibom/templates/clusterrole.yaml + - charts/k8s-aibom/templates/controllerconfig.yaml +set: + k8s-aibom.enabled: true +tests: + - it: renders the k8s-aibom controller Deployment when enabled + template: charts/k8s-aibom/templates/deployment.yaml + asserts: + - hasDocuments: + count: 1 + - isKind: + of: Deployment + - equal: + path: spec.template.spec.containers[0].name + value: manager + - it: renders the k8s-aibom ClusterRole when enabled + template: charts/k8s-aibom/templates/clusterrole.yaml + asserts: + - hasDocuments: + count: 1 + - isKind: + of: ClusterRole + - it: renders the default AIBOMControllerConfig when enabled + template: charts/k8s-aibom/templates/controllerconfig.yaml + asserts: + - hasDocuments: + count: 1 + - isKind: + of: AIBOMControllerConfig