From 261f3c159e8292a00ea228fd379bc1b4ec2be151 Mon Sep 17 00:00:00 2001 From: sonicaj Date: Fri, 8 Sep 2023 20:13:17 +0000 Subject: [PATCH] Publish new changes in catalog --- community/rust-desk/1.0.0/Chart.lock | 6 + community/rust-desk/1.0.0/Chart.yaml | 26 ++ community/rust-desk/1.0.0/README.md | 8 + community/rust-desk/1.0.0/app-readme.md | 8 + .../rust-desk/1.0.0/charts/common-1.1.1.tgz | Bin 0 -> 61733 bytes .../rust-desk/1.0.0/ci/basic-values.yaml | 15 + .../1.0.0/ci/only-encrypted-values.yaml | 18 ++ community/rust-desk/1.0.0/ix_values.yaml | 33 ++ community/rust-desk/1.0.0/metadata.yaml | 8 + community/rust-desk/1.0.0/questions.yaml | 302 ++++++++++++++++++ community/rust-desk/1.0.0/templates/NOTES.txt | 1 + .../1.0.0/templates/_persistence.tpl | 33 ++ .../1.0.0/templates/_rust-desk-relay.tpl | 43 +++ .../1.0.0/templates/_rust-desk-server.tpl | 55 ++++ .../rust-desk/1.0.0/templates/_service.tpl | 59 ++++ .../rust-desk/1.0.0/templates/common.yaml | 9 + community/rust-desk/item.yaml | 7 + 17 files changed, 631 insertions(+) create mode 100644 community/rust-desk/1.0.0/Chart.lock create mode 100644 community/rust-desk/1.0.0/Chart.yaml create mode 100644 community/rust-desk/1.0.0/README.md create mode 100644 community/rust-desk/1.0.0/app-readme.md create mode 100644 community/rust-desk/1.0.0/charts/common-1.1.1.tgz create mode 100644 community/rust-desk/1.0.0/ci/basic-values.yaml create mode 100644 community/rust-desk/1.0.0/ci/only-encrypted-values.yaml create mode 100644 community/rust-desk/1.0.0/ix_values.yaml create mode 100644 community/rust-desk/1.0.0/metadata.yaml create mode 100644 community/rust-desk/1.0.0/questions.yaml create mode 100644 community/rust-desk/1.0.0/templates/NOTES.txt create mode 100644 community/rust-desk/1.0.0/templates/_persistence.tpl create mode 100644 community/rust-desk/1.0.0/templates/_rust-desk-relay.tpl create mode 100644 community/rust-desk/1.0.0/templates/_rust-desk-server.tpl create mode 100644 community/rust-desk/1.0.0/templates/_service.tpl create mode 100644 community/rust-desk/1.0.0/templates/common.yaml create mode 100644 community/rust-desk/item.yaml diff --git a/community/rust-desk/1.0.0/Chart.lock b/community/rust-desk/1.0.0/Chart.lock new file mode 100644 index 0000000000..092aa80b83 --- /dev/null +++ b/community/rust-desk/1.0.0/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.1.1 +digest: sha256:a7dbe3e4d42dbcd4325776e5e01a1d630c7f185f79e7ebf22b1b9cc80f56eed7 +generated: "2023-09-05T17:35:07.358112662+03:00" diff --git a/community/rust-desk/1.0.0/Chart.yaml b/community/rust-desk/1.0.0/Chart.yaml new file mode 100644 index 0000000000..e431087bde --- /dev/null +++ b/community/rust-desk/1.0.0/Chart.yaml @@ -0,0 +1,26 @@ +name: rust-desk +description: Rust Desk is an open-source remote desktop, and alternative to TeamViewer. +annotations: + title: Rust Desk +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '1.1.8-2' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ + email: dev@ixsystems.com +dependencies: + - name: common + repository: file://../../../common + version: 1.1.1 +home: https://rustdesk.com +icon: https://avatars.githubusercontent.com/u/71636191 +sources: + - https://hub.docker.com/r/rustdesk/rustdesk-server + - https://github.com/truenas/charts/tree/master/community/rust-desk + - https://github.com/rustdesk/rustdesk-server +keywords: + - remote + - desktop diff --git a/community/rust-desk/1.0.0/README.md b/community/rust-desk/1.0.0/README.md new file mode 100644 index 0000000000..7680db0a53 --- /dev/null +++ b/community/rust-desk/1.0.0/README.md @@ -0,0 +1,8 @@ +# Rust Desk + +[Rust Desk](https://rustdesk.com) is an open-source remote desktop, and alternative to TeamViewer. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Rust Desk` directories. +> Afterward, the `Rust Desk` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/community/rust-desk/1.0.0/app-readme.md b/community/rust-desk/1.0.0/app-readme.md new file mode 100644 index 0000000000..7680db0a53 --- /dev/null +++ b/community/rust-desk/1.0.0/app-readme.md @@ -0,0 +1,8 @@ +# Rust Desk + +[Rust Desk](https://rustdesk.com) is an open-source remote desktop, and alternative to TeamViewer. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Rust Desk` directories. +> Afterward, the `Rust Desk` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/community/rust-desk/1.0.0/charts/common-1.1.1.tgz b/community/rust-desk/1.0.0/charts/common-1.1.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..39c0df9de491d52296bf3bcd47dc27e489e97919 GIT binary patch literal 61733 zcmV)#K##v4iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POvFciT9!Fb>b({uFpP&K;{COP2Q;Kb_py?W8lglf}n&y5D;< zxj8TiNf=WELqKvoiNE{rU?Tw#T(nqOT0Eya76}vzg{2l0szNdzlVs;?1T)sVgX8#5 z%YXX)e*fs;K>XY9_uYT{2mSt^b`K7Y50Cbb_Vy3|)Zg7ZINtjc=sy51rDsAJ%>LA0 zxGlGH-^l}$gfPf3N$AN201UGjoq#hjE5J*9ox$u5h}p3LQ~VpsC??4XnC@-BG%bGa zZbXQN8BUq_eF|b#HRM&nfMfvw|G}HV0EZaH;0!Vtli|h~;)Fq*pp2eubO9Pe9G`#) zP5*!R6TPDhjcG3=;|%~3I7TOcWfPP@x&go>i%-Cav6PQR{yS;|ZbJ$L;dANJSle-+Q4LAMLG zA`;S_i)W`#Up?!Mqt3=KCf6|L8$t}PQA|(3=lcx+%*{f+8RO(NiO@O8*a`Sszu({3 z@IxHHIKGDA%~LdhlbDIkCe6q-x)Q6CujCB?D9WZdMCTb{BqZ?(V4?9^7Cnn6l%ed! zIfuX(Gi4~zAJI5vcTaJ~zfHpn#5b1{Fn}>d^3^5&H#z~k&oS>#7$Qnvkq8NN0O*1X z1f$iq!Xc#@&3QHJP<#8L5uPDBrkFT3JPhG2xh4TSc@7rw^W zB%KSL!wPKnDzQ20*U+b8e&R74B932%QbI8!*_|4128Vj&CvkjEVjSL`fER<;gq>%I zqJ(X1Tthl~;e)_GJ?`~;ySw!;{X;@gILR=(J0l50pBQg0BuZS6GwJ;8 zi>D{x@aV7N*V|X8m;X2cLBB6(0zfuNPU&lsToA&f>`=UZOHo!-6|bIWWRe>15RBd= z@g1-ID~^$rM+`VHj>+wLhNn12L-dS>Fosh6(fbYGEY#=7d`nRnl5u*TkpYg8UKLVK zxtJt;rmKBYd{y;r}YjO2@pZ)2w~Uvh$zNWL7neN!*aMlcy7 zJtl7ipw)qcKVtj71HaH%jkl$YS}sVgNHl$s`LU(lH)myX=0tmxA2b7@+hJDo#ITt;*2u+<%}c) zJe0_hqH&3<6jGCjFq#jYki$+uAZ9Sf<21&QB29KiVw7nHEZ$^tx(EjKS^yMV6`U|K zCXbhZD-k_yh!>KLbYo8;)bJ+51gMuHgQjcRMe^e+&p=CUQ?nI1y8s!x!(Y zHv%g*!W6(X1tCnpH39=NNg@DQrK-Ux(^C!nG8u{uF;fHjVjz2qIS6n)83LT-Eo_4{ zMvx-Fw*UYWfGM3Iv#CM_f{YI@hDk3$db{Kj$iGQ~z=Wa*pef4kZbv9X9CnODKD#%r z{^ta|y*jf-k-G_ z`_EtsvzQF&gP}2n*$!`@5fL^{9}EdLP8-{g(3FnG4~9a7raN>ru0=ymq!-D*P{>dO z1{oR4jRTBv6vgNkW@zKjfU{$DecSvINF25{9w?43XM;Cz)c& z@7_Oj8+`YrOKIo~Weg8+2-%VV{zl@7M$TNbLg+o8#PKBxGsI{i2^TL*l|s?!F-%42 z{Fi6%;MKJxCm{KE7sZ>*-9^1B)yS@4C`F5F7?$CMFh-?Ol5oABN_`W>4DuIsjhFs* zpP#=iNvHu(&_Yc?hpH)1cKkxhmE)bh!2?bEAgj{t1x0sEDs$QsFVtX0jPh4tC zx$sCSpC%hnNH}SRx|4L6!3cqWk!vmmUc>Nak^(kDAc72DbAjilo%{O@(e4?HV<`~n z`FFDM`7^*t7*8Su0{p2r-R;RK+JkA@Q|JX?E5acI0T-bI5ah1|xzoJ1UU$O`MKl0` zM254a00cYg>j(KZ070&<1VBlZz5G=N+~02qvohF{f;@~nCxABu$UyYZAl*(uur0+d zb8TDihN9{gS9WlQA_tZ%qUp}5ZMMMsgA#^eOgD-?S%`@jj0pP`5|w4aZGhQdsCbd% z_!kONQ9no3p^c%*Sr}jBZ>8vLV5ng${LV(?HhD!Nn|i;G5F4S4;~DY-2A&|o844N6 z?f}Vh?FfKygu)w;!VD$MC}Ye;z~|xsf8xN#01rTdP=unM0i@`t0M`M(!5BwU_o62N z3e|2~e%w&AwaeumoYYRr?md@pdD%@dQ%)X(p7`U77MhHyY7{mm#L44=!XS9X3qSn@ zbb;i>a*kjMbddn`ipm`mrZF!#8pclpnbI040VoEpfKt3OKnY@50PrWF(<$qXsPDWo z3KtX1LxD(;pqOniLna06Mf&-(qW=ATq31`rxGTlgrznld9asINndCA>p|UrS;y_By z76+hwT(HV=nc*?a?wq$mppp_V$?|`RerI z#p%;uK3u$cbM@i;^z!oeHy2L>yRWX*ziwuLLR0#LLYul|Jcdc+cC`!WsPw8EmR<#u zgyC4vsxFMiI1v;QoxZ;ZDQ6%5@gFrMD1&T5{~w45pfN%z*yDdEC~&3}{=@XvIj{IZ z`^sgzGiSf!>!n)$GWcvRgS~z6G~oLW2%f9II^YXPaKdF2a3lmLA?^JlIs1Q+YmhV5 zO-WSwiGMkHtPBrbRRRyd2-1I`yAnqUFnuefO_T57fm^Vbms7>muHZKPSPZNI3MEmF z2GTh3Pdh(p`yQ8AZqOa)$q8Xx0;aszH~}^e+sb|o6AEsT;9z9JD2|ZQ``zZh{k2>@R=s-Xc64vET#*yMgC(gkr={Hx(xI-~@=5;@pl)Z7z3qjPS3~6lE1` zyVUEtMf`m+?lPBaU`2NI=FQwKU%wqLB310=hd}z#^244u4AM<4Q%LY^%g&bUY{y-7 zgrFbazU+}Kg3ZrbjQIPT%d7jqlrW5smW&}vg(OK($hzvt`|+XJ>YZ*z#CZV#3P%J4 zzeCJ8XW&YiR>-(2j>Nd%^}r=(1-!%_Cn8BA8k9gOc0o7nCKL3vDIr7N)5~Y~xiuuPVQ5lDlX2>;S4q)-me9^0dqmn0z6RJ6 zv9b((^8S9ugXo9Ntq3v%{_msz?milKA4MM?{k{9>Rrk?lr$;}=buE1PqDc8G#4(D5 zd4LmD+Xez3*_CiHzzL=!6g{kf0|L$<0}${A0uYP|mqA>Wxg-XeGKG?fN|v|oEi4(_ zZtEBH5)5j5nN%3n1VZ(ewf4p_w|6D$m?*Gh6Ip8uj-_I z&fwE9$iM)9Lex5ASwP~bl&}tu{;DJ_@s}xKNdbeuu>=f(YvD>} zNE7N!XG1uMzJ2jjo-x5>h^&4vvhkdkcwSecS$?qkWJm)7V=h04KMeUn;b#@jiLRxG zp8dwCUe(@MAJmMU(;0cBWj8k(lSnor{xV8iJq}h)_6kM-yv1#O9&myR5yS)23u){6E*wbcpNytG)q0*)hN=Z^oa zgyh|RSxP?K-4jx>*N|wK5c|aoWjZw85J8?=h8*4cjGO3VpO-khf^_(L}chy6B@=6r3a6--GwyKmNlmIxH1^ zu8LNSP(eqI9m)9k^uVPWoL;YIj?Vyp`apPv$AOs32DxmjwFfp%a_GMbFQ#hPd=Ch` zbHH5&lD@+G5)XiUD||_Ki$gp`iA~uuZDEOEIqWjYbjQr;1~b%1H`zNbI?xj3O0=tL zq=|r5BQ^;I5ltHE?bvt|Q)EwKEk1Z=v3Apu{|c8M(XLJGni2Kl=|gPiCvcjk@tu+n zsb`@Cn|VV4cnl=S%K0wt-Egg#JT@`9czF-H zT@l5@=NV~&Z*q!k_Ixb&>AQ1$tgtvVIX>nZ<&r!fH9Vi|qlHt0Nnr+~K(+UyRbttu z0YRj8ifelhNQXqTXt1mFfpi(m_v!@coBg&Iq`765w@3dr8admab-t=L(>6xr_4D06 zP4<5g%x|ISAC3NhhsTGzZv2mf-Q%_We-)3zjm2<(tHytUoXe}#OPfcFm$}V&$7Xptt%+gh6UJYHoE!1 zX5_Eg$vVYaHrAk3OCGW$m0AGv>C*)&b&R?#E3Q_fi_c4C$So9TqwB4?>kO*1;E1c# zn=MZCy(-P6$!%-Q#%dhptC4HV!IGAzrB1g%&v#wU@~`x$aO}iU6nD3-=s9(W!V~iM#EE4kly8zQm@=aW{r|8BR(|AJJE0hfp*fJ}q5(S^* z!`}g0{@D`a>z>A;2jlpqs2vpj{vskB|2G`R)@3bWm}mntLrH`(&n(mp1hH;X{?P$n z0L$>WBYUkTO@4UNGmbS5K*dd_O>@fB(8??}C&7$h`75OwwAwX(IrJ+XZ#NL}{(eKx zNB)YXG1$^!{te1SV!JT)&!WF7HbZhs9~INB+AzU=*) zEB(kuWYbSX)d{YO#x~;x=zS5?zpVH=U z;?-_48?R}8K3f!N!5_pvFxP1E9+^n?UB|_*EvY}uQ>Fh!`FZ)`DqxfTcXYV#>VL<3 zYyY2>JVMVaoFkT@0v1!}8`A=dZnjhe&7Q1Y7c5#|P#uJ6N(*h!@Pt__glmQHJ68yc zMY24dQ0pKPWswc}r6r`-%RgAJ6BcxT59UbRn+fEJ$)F}^ed{RUX`@fTve}3Ep*iyXzAwMgUJ6?`roq7{{GZL z|Jyru^}oaY_5F|4JVMD^(%Ij)ckb8z%GqYaUc>iPn$cg{Ew|987 z*8f)V2wm^B9BfdGHYkRB8Jc0uZ2G#lL~46pe{-anx5LsXTt*c_q9os3m zwL|bw*G_K!N_$~~dtnj|dYBYy>g#H37Exap7qA^k>igABmn7J&gdQug zA@Suag^NlOBBHx;83AlP)!`3Bpcby)Qv7d45&l=+4;L$=>h5#gX(vbUab237yodxO zdU*0Uho=KI4PYE!!|+C7%G(bwWNCl;xNAaU+hQbv+nMBai;q1es}lomW+;py9?K}X z99?0k$nHQOaSA~2RD|6P@)peM=`_6L1JbgeqO8MkEmK(W-D%*lxINh`MyHenukwPh zJ4@E534f^51U#^2Za%XWHsZlQ^O(~*(1!{*{m&o(!3{!bb<)QwnCY~4Gr2}t zf*7J)YbbWwsC#{9FK%-e{%&Pcn8FaVI~9+Nkqi#iGSdrMRCQ&t3v)Npv9rt#N_w+N zc!H(Bu3x_}3=yTTNQ4?=26HN=)39e$nZwKnf)K_rAAq3PcYy3&;IRQ7I5XAg#h6SI z_9m5cNE9;P6y3>0ir-C=iX4`Sk*H{&A}cWU!PsRSdKk-&&0b(92g`6x-4{)0eu*B&HM*nSJiB* z|DEw|WlklqLH|40KRk5wzun#b{#yTA#pBig#9%K+3G^M|uT%>>Yf=Nx+UtR$XoYh1 z+gVAU0$?i0`Pz$`{3d*ta1sGV%=$slX`u_AwNeHR{;%+sZ-5vhrG@su*6B4x32Ute zh7X_z7RucURlx$xjN0J$sLqL{z1Hdea5|m4Rvu2R`@VFqZ%X9>Vs-izAJG9Pnr4PR zP7p2PX;!O_-VLYVPO^~6t&}#=bJPfrlF%&lI|}H^h_?5~JIk@4weqA<0>ubY)O)Qz zm!yKVxcdW$yWfWZD))v)Axf-0QFd8o$fYjuUvLuPWT@78{%gJ5*UNpq+^ywKVx&?g zz!a<8JeBKi1AvA3YQyr%Wsi1S5JlM(hv+m6$;2DjXWqT2UF!l_s~LHKUOF=mLX?h^_g|1IKDJG->Q{}gf}RYZruN(`YwarWUUu~4ZWgho0Ara`i7h# zMJgl#cy_sWEtIZ>(uWmF?K4wOx4%PLUI1G$rp(y`O6#@LF|&8fu$##H`7!N<87r*_ zK_H`eA<11I9iSvEYTuwcf9*8GQ^?Q_y7O0_XKxY}d+x^LZNIir+w)5Ka#5DyWcbvg z*S|V3{TDrdzorYQEPBP&KExg4{{6~Z`eL30pJtdLEhJVd(hU$i&BL>b%1XPi0$VY-C zN*R(-VZfHU_XMvgN(R=mfaPujC_>2Hj|Q!Q4NSUVfPsi0G|dhiAp|u z20k6b=uQC*MryqV9aUMsC`S@9SNCI)@7HOe-8Fy>cZvvrn5xaP zJTU;Iw{DZZXqe1^y=e>)W0UG0f9k~9V$A^3C{I4r{ zEd5`N_7d#?)&2r2JrK0!a>K!(TejT+pR7BB+H6lEEX5WvDbk)jNwBm&ovV!91t#Qs9T2xd`EPDYgFY8aDi z7{_;VQ-c#m#BG0jMO={^l&G7Ne-x>p#Q&8EZRZ0@rcWm+Ivb(z=0W-Y?%}?h|NZ#j zV9ozm@<{&9#~3_IrXm*A(@7eO^VYdV02R@Kb8Ltcl=aNHG>a?%0(svp0Gsj;5Zs`< z0Bqi%yN-0LobS{?{%*(~QQ*I!2vNb$8~ST7hvl3aNK)_;>Q4g%Q|Ae;`wAzSc+dYe zp+%Dv@uBCuYG~WmbUzfm9mBV-XzIuVh-0v&gQA>if`BfcT{t6&IE4O99Z7(9kLY`V z6ZtR8upEMXo9BbzttXCoFwHrHvPWuAa)RW9(wHi0b!x73`z(wW74+nF=A|Oe_s2A< z_x~Xh2HOjm3>Q2GZrK0#kM_&@-#Y%sY94w253xy>Q1Fu6BFe<`oA(lQ<_XM`kpBxuTdDiNl6zgN?L4Hb)DNsjV zyYm*D+!4S_a(mf7bnR%oH8T^v-~iaWF|lb@-&IW%oV4esv8D8%e-9y z)O#di9m=_MDxJxdxRK?WW|xz6NJ!ED;zSNyPnhmbn&C0b?!3LRL+HtJOG3EfWYHOC z1=l{6v}Ylo!iA5)re)7AVWLk|)im`?puAJO*cFj7FJByHJvp-CpwjTaFbeQL-PHT4 z{nC-N*^phsgUMqRJI;Jp#C`h$aKb#zIs*XglXY=(F5d}yF}dx4t(d7U>sAEpj(VAw zRIlB>mgJ;jqmkQ6O|NH0m~U7eur+LfF)um?%5qDb6=!#zH_m*Ys99j~1u!B!TfV|+ zM6LX1_|QCH{O|q!&X?oL!cF4CYh#){Q5WJw+%zBk7&80yuJ?&gTSr zof11&ySD2F=d%brqM%z$FfOP_695%Jln@i-H0X62WeL0S3Wus$kWdiXA|c$PaE!n$ z0yhb{l~XX60tXox1A7>>rJD01%mDh7#yG?*z7r5HbI&>u!USY!fHL78DVAP@GZeD; zZkwwjA~U^c?;4HZ6q8BDr#8%20Efrt1eq`ghg@FVf|O3ih=O23kro+)j^mtY@=iU> zLEgy#^jyyhn?O=rbucj9$Zipkc$f>AmzYqT45fCdq|{u?%%PvglyLY7k{Vhl*!X~C zU_6N#PGemeBYF8@8(>cV+;~J1q@5J=X+F)fvf8A`J^rHH;V<&(NjadBXCJTOnWpyl z8kxLu-3nCP3SxI>&ZMOF9OEM|W*14kI#ugwpvh9HC(I`-^`R{1=a4r9>;%Pe5aH5hMVv3A~ z&ZQJ{rK%|j5sslplIIS>&f^U zWwe0C;XDKS;2K=t$v$vEI*Vp}3-745e~PU&K!K1ZVaQO{<2?M9vlPYBfrbv)h)|IY z#&(c~iS9&x4^ud}zZobpcl0$(oUlOr|L7n9fg)be(LTaLf!-QHdY+*H{se-40JhXf z@lEhjm?kN#{B82=`**&zl;+cU9v!{ z#j%aI6SL~_RrY{f*GCz9@l=?h^F7y8;BnNk(uaPK7vecDlG>?%IpIxweC7d-ovO658sNf(V%b_ag8fjsfwvT`xm^7q2UNYT-~ z-sN~B_)#$gBT9Q zl#wz)hNk2OMF9xVrxa%>3OeqfN|TOgUDTe7P<$*O(HeRM3bok@qdKNsRJwkL%Aih$qSo27-5En7-c@js`=*l)qiBt~TRfb$6`>e&xr% z|8tRg=Yxo=yMzcZP5R&dekuOrL4U3Pt>ls0yS4%iCP^r-qzp&~hA2T9WLzf^Qvv9m z)^HhQ&RwfBK6O9~?Mi5Ea)u@1@W9yqdIE|F+^j87;%3Pt3Bl36x@2-W83+?sHz;o< zWgG{SI9?P_4a2^wC7_42%h7d;s!VwC7-3$z_#5mm$vY1)1gg<#_iYdyC);$WR)?5P{(T1|awl%r^7B_Qv|1 zJhl9vuvPH?-TpzD|L+~F`Tr`OHcOf0cEZMJ?Xt!QL2-q&H%p~(LKzv)SZP2AGg>O` zdJSFEh!%UM@WIsV|@+s7ps6riE2o-ih9|E%3+&0KZ7?T8Mccy`G zT45j*Ew0UiU-hZl|K-)roewY@F02AH?f?6IH~#bS?(X{j$4VZ{P{s!vh{M;#Hh&cb zfrI=-}(fvaWg5oq5Za0`!Sx@Ra{;@5nNUj}xWAd*1E2kJuBzp*)$LzkrVu z!Vs_>v{it_97-%=f%Zzi-Krlj8%k$Tvk~#Ox}8~_!`Ci^OMja7fBqdN3tj(f;s5R0 ze~u52*ZH4U@>u)78tf&q00r@f-~xGHmdprzSI5n?j%rY>ebw{bzs=TcQn> zRI2&NdguNQo~HdDCDVmZ02=oHqvQR)YyUq!JYMhrt9Y#a|5-9!&bE(|=?}5xi+((i z+`kPrr*5VQ|;Jeo-4W~c0Ki7)YUKq!=4ty(C%`qcp*Rt+Skqm=aOE2IjhW$9Z5iqmC@L* z85y6L!D49M{E*Ky~1HL`U}Z7zU3l73T9f|9ADg3dmC z$`~(z&JDV2z$Slb=BDh)M3niubcw8-wX}#YY3SWJN_&w?oWyI%3HBz>hv4nDISn7T zs#i~E6P~v{%+OfI+bXhgY6l)YarJdmw+-j|j4wioY@j0clc@OEx+79JOO=Z2S!12V z%sgpuqP86_f8=32BJhZ+aHm36$wQuOg>Z~w;R~jE;&`7m41?IN*)q3){n&U{-0N|8tS>A??2hhX?zm_#f-| zzpHsl`ad7-r5OP@uph+`Ap5dpV?d>PWyiMmm#Xp)r6{s!cYOk;iZ_=+R)|ZKYQ)fkA6Vklos;;OH3C_ z0NLdKQ9l1WKI*Ui|5oypBa z`5`z!(V3;PfSsSf>6G9IBsc~s!3jf|8_CZKglBGyIZn<7=*wbfly=hwl)^nsafIO+ zOsOxjd4}YEOna|?d-3$e>4&q^^GnB{(PU)#4&oNi(KXt8+_tI*Z%wHPq4e3u35+es z!nNRSfjNWs%|t$&p4ir+NrFF4Q0~T3?N;DH#5W$H8VP+zAdUkNgk+pfL}a`P z!!c%e0SJZ}Oh-7R0SKlzLd0h^3}Grp)gX;W#K;{nM0tV1JeEK|v2p|3b!!IYbXGHvtH){)g`Y0iROl9?-6`7-&^r{5>a#50}rbs=!FY zVyl%{Fq~mJnM;AlgnaXhFd?&Sf;t@#@PBRXr(Ms~PWJTT#c$6p_=a}+%ZryUu3kL5 zlwH-kR?YTaiqSMn!@s?_eDTZ6XCIzE`|ZVqV^HJ4nW;#Im$8ZWhf;SGh$@m zo862T*MyyCh@ynm1X$Wkc?FD2Q=MHkI2D=0xGsmLC<`2Y*tWa* z@Xni9i0TEvC(TAUV+0IyT!DuV&pKOXPUEkc^m_f|Pm}x?;{giq!WcbV{;&Q1@v$ra z?e4Abf3M`R8#fz)1%y&mO$LR_9nS*J; zolKsjS{DDdxQ46cgQAx`PE|kVjRKa5I|uV5XpMnQK@$}@%!?CKAT%2>Rm(0)KDvq( zq=vt^H(c2GOWjhl)$LWQh;lMJMNdL#X$&*waUfH=2Oua`b4T4pHG&}Tx!qK*(3K;l zmZ5k3&DTQ?<2mv<&plWt-J1$k8Ozqf+7I+J$$u%y*rEYIo8tc*?3VI>@9(ekf3M`R zhwAO>u}`!!g>ge^u&o#=iKK-Od2avf(>Yxe zQ-Bh99iyn%>p4EX0|$eiDrrkE5}pjugDHR@Hxrb@?l|zAM0Q>K>ebFqBG*kyB6%*Y zx@17LWQ$tRrohYTGa^~#r7@F!6}QnmA{=sKENIFkq@W0<`86UgaH+1P86M~6b*E|EHEmNx&TaXpF=6ddk-LhE)@HuA{PVU%(uT=vqps1hX0J)R zRui}aX59?7W^vxd>bdO9=jv9>IYBFCat&=OLUMQ}NafsaIlrw=duMsoO!rRn<@U+B zhUYD6Opb~XRQ!YwmVW}4arLa-ywEv^!`Dq|^u-s$ht4P<8ZSfj-EFWN@{!9a@)&H1 z>kjtY;*MRp*{WN9EKJWc!bnJB(_X>Cw8~szRZmr2eW`fMqJaKb?PNHBaeNKKo2T-7 z&O0?uord5_xx$yXW%tNS%e?Gk)lomW9JdR-n@TSUi}JF7Js6^tZb?BX=rKuClz~#S z(hOvfa6~98!0BHCT(4YR>`-FS0r&j(SLMHGt#&#P(nio^_l*tRNzKOJn!dYyD;*?6MKOYxxJ3@&yW4Jmq z$vDpJZAo1lu_^tq&Qq& z8YrzkyR&GXOB8|y%%rrJTWzhOH)#2}%WHxehB5xPzV2f=_m3dex|^eu>(9@Wdg7`+ z0{C+R$kei1pv1l$rZllcYGH-2>Rc$`s$7b~p5bn5sC!b{wIp4wHI+;QreCV7Sh;;N z#Bq}=nlZV^#Z(CqBn-J zEY6kBh~DU^K?PV9o>;fX1vJiyVge(7th#O~WR8J^kGQP^#pwxlfj&-fCNc`g2vR06 zE)ir~4#k~2D~v%hhh4^!Dp2+Ks#v5tH5=DW6lBv`kL&1GDKLKR-Syjln)yGuUNi}C zJ^$bB?;e%%e;pk4*ZhAKk7fTq7lXYlmd|1R7{-6qm1Vnq2)M6BM*PAw65}aK5TyYK zIE%vSZ;?!XlG<({0>G8y3u0MSw5es7rD32>-a9@wNy`o=WV73-2v+TqJh z0(5ObLpVk_dCoLqzI118Tq4v~rrd+A_`Vjz8e@cQ|JK-VtG`QPS3$_?`_(xVlN@t& zPhv2WlZV+}@uMMr;U+ePR?7hU*&C5u0Im`ju^}y1l&n0UDC#;=P_Zt2$7dy*U{TtE zqs(OjE3a>m(NKl|e2x9fKNAEnV`0zb{iEgr2Q~YIP|X%UYMg$G$$NhVb*iXEGhe8IwbNJN+Q0@Kb;}hXfktwPf@Dp{2BWr|;> zVv@R=D=qjV|IieLAde^aW{R@g3^OG8sy;Gi)?~>!YyMi^&3=WlAu1pg zpMC9BTs;xldI~uiOViy`6vMkq6p|$3;xgy1lMG#rGDJrtj=1PO2}4Aw`ARikR7+8Y zNu+;!!tQ91S0G_|?#QE?Jhx8KGc(bKPhiNeL`eu8-LXMTAUiq;co$hvN=ejSRDJ?} zE`(*M&X`IUggBZx3aw>m=Wtcc(XtNY>OBQ1bhrpju%0_k9k9Dd*IjU$5W9dRGB~g( z8Z?T|mek~#b@KE!?}n!Yujo!pry8m^&_WxbUV~KAUda#!xx#e@`hmhKg-YnY?n1kkpI9q&* zPU_?JjP5gEBV*ShHVRSOR8q2fO`%p#mNx# zx23a+^zRYV4zq1AMo@SjO%hSJI7idn>iH9A*S4Q`XE78EqSa!tig0Z;8gx4)^!fQ) zppjVeMmBeszV$s#c5GSR5&4dz!|urv#ZPnd8>SP@cdVG0w*K_|{B6yRh!Dnz54%TQ zDr)jR`V@l3a}5oi1Mo*oH_YR-+M8W1(TpO)d3um*!X;;m0&|bYdC`g79Y1>Q_<=}b zwE$yN%yAO|pk#h-BAFP(iE@&b*;8^N+DKI7=_~m@Xm1edBrmh_RNe3B79g$^Pr%Q@ zEv$N$%h~djBn+sa$TS?GXc8mP=bVgs-I0b&89$~S(AS4C;`+5rH@SFfNnIxG&%zZ&ugiYd4J@xos&aP{cenw z?%)yEIi=3uo&a&scCxdRp&|OT+ZWC4WIIm}{!S(@c6JM=uAQI2t7oq&E4+Sv{@dPD zvw}ckh=dp*Xz1MD0U!vubP@dTR{x*>?7iFV{_Xu2@&9-I?%&@3)Y;;1`JZ3L|Jm6L z%GITK${`rlw%$EEzk2@aAMf#henH~Z|Ly$ertKhsvW#S}=&%|!1HG;D7~%xHNEjN5 zm5qiyu-n-NTffExGWDY0JLIok;TUt_U%ou-_s5+w;x_VIGTSwZq%i+%=X~dC=lRa7 zoqy=Io^!}fDZF!zcdqcxbG-8k@B9PjWic;oql^=9eaDxOD%0OP;Dw%jN=d@yX!Uyk z03CH~H;{Z9x!xp_G^!6Bk6;!;hK3|F^U-T%OO}^Y>USg@AYn`ifKdbjslWt4dSnj3 zEdsYNVN$M@Zi&Kk-<66A&k#dl)kw@?>o#`nVy!)*PXZrQFZWc0V7b46Mar)0)S7po zrWc!Tu#H8#yQDpv7z5gog9h^P#Ro&&W@|zhBs=v0O z^&5Sf?Eh|>hIvi_8tnhO2c`JGyZdYV|7sq~a#rjQmulF7&Y!Xrx!ajcKg6*>sZUEi z9I&q#hFdh-g0$DZIzjfmcji&Nn;QBX&FooAR#tb8I zdQzB|!eUMpMS5Hp5HMgAowy=(V;{}mnOdbpKlgc@I!f=H_6jXkXrcbwmVpLPHX46} zIF+|Mdtm-{U2lJZN1@Sxaed;183jn+se7~J*!m>CfkYahGfMzT)QrzDec$S6siP7D#FxOr@`<2~==53$GI7ESjw~Q^y5|EAkiucEFOf1rV za1`1Z;zjTMW_LF9DVN^t>%at) zlS%l?yq7W*!fb>x@GeJw8x%;s7YSP!0q^>=ENYW=uk(+Hr^)`yP&UTNypf;e(-i+{ zclXfs|32K^UE6A(Q^Ll_IJ{w&!%uxV0X`zwH8j3|XebPm}l06|c^ z(CMk{Q~8ooY(nk24#hnKy6gBfy;W2kUDvgZy9Rd&?tugk?(XgcclR{z4uRnA?(Q1g z2@u@f9lCz*=X?J#y6dES)Is+iYp+^!&TFgh4Y3RVeX?Ci-5`2uSpSg_Io{sRYM8_S zFu;P-bZh5y&IQp|bMml*<0Tz>Cx62!#=*mBofzVs^gcXp2F&ETcn}G z%<8v>nx4+lUV>Awzne+Z`t9`1DVqi?NPYby+8{xi9Yh#j{G=%PN(~16GaLcw{V}}; znbxNMhVA!%5k-L10HrX)$VoHdWn8iZ`-FTKCm2f3qY^XN>>QIld>Io`HXQlFuz|hI z?28G7aw{)u61L|ZJVddyhZ$`J#Z?JlKjxA8kujvWcXieOP(h2#=CCE#*1Q5^? zZszcIp>$kFvX}8Ams~9AnZtF_TQ&B5%Ds;b$zrY}t>^t2$&2glUg1|?I)(l7gDElV zeF$GTAi~Fq%v|+r%>XV_=voI|?8_+S;}obY0o7DV-#-L0o+lYJsNuX^A<=aevU7<^ z{T?_YW5YWcQVOqz5S#sPEU{jpIvxYo!8(4R(dAehQR0EGjzp}>cgLu4rB!TNTK5z2 zM3+yYT1%fqxFwtr=v6u#zgaasF9^?XiYk7BU&gmr_I~Illw905n4YOiyLuetvY!}I z0fB7Ci^LY+)Fz_}%*((GG<5m9<1V{4R1Z4c8R5Ud^hnnbVd{_(F%dbJ&|v8Ew*~>Y zTBV1FN^9^`C!;#5{D8l<4}OmG5G-#NFJdzSnVo}!i(#Q|>*Id*wC$2+Vmdt)!6dE` z_qsq)XGQhzMVWTYV}meRKkW6gvlp|>)$Mh> z+$bK4TfK6jX{9a$IqN9hJ> zhNSw#hI1~pGcdGU+;HlA%d+Hg(`z9{Rgit+aMRPQ=Xb`CGe5S!5K-wb{P&smQrUp| zPZHU_%L=_RlYz2a%XaeEB5@SV9E-tfvKYbrfV|J%W*3Q2k(K3LuBR^g%dIAg;ieIQ zl{eY$MY>&$^sDU_(oe)#*T-n!dGi7sKm=F;rJ%;<|FUjpAYY{b;+_59U_#0Yja6`D zYk9^^oWm0Shxb8yNl5*}s*bG$^5#!Q!AvnlAUSq!<}1*9e$x){qJ$#3iS5G6RvR{Q z)o%eA$OKy^sw1;Lb2f;n>nK#_2HmGEFim&90&KFWEdbd?>I2Z_29Ep1zXYC!zZZT0 z+OG}-F|gP~O9lC{N_U_%%>VLeLxfR0f;LJ*-#49mm)dOo5O6Xpk_(!H8+|{|GmQ3d zjbp3*3)>ylR!FCnl~-4p|3+)+d9V(skA-M35%-N68_sUFU(!@Bq))dQ_@dL(VkeZXj)3>~&~z}Zdah(JVc9Tj ziMvoch95tP|JN4O;t)(l^0MkG+2AVvqo2X}vOug+FnjqGgF&*rcLh_$vz^dLc52SI zBS#^#>Dl2B+9242f>O4+e0ZHf$lk9-xVUOy1TCJJ$-kjDG$slzTv}T#rkQ$z=->%P zV4qMQ8L?Iw5On{Lgd}}zo*k&;`~Xq(lT`$^9u!O0+mU*hT1P9DEl~m}=hd1jNM^E2 zaGb!GWNNmb32e!zM&a%P*s~TEJ+L#i0NL3&8P6+V(9_fXpGCn7?awvbvp`D1#v8bW2c6`|d_-BSE>0!k+PsG}Cy)nHUDOlxm4<4pEBOQH30l=^!m zmh@+0LkDH`PuoM!X?3(z*|Fo!ct83-5|N1IxiPYf4+GX{Wn>k!`9y-LS6)yb;Dox- z$o+329`%1;U&(8-r_HEm89Kp8F2Um5;lF%2 zf}o~|i0{N1;MU#K?<7gUhh%{KyFYQ1*7eZSI$Dw5^k_2hu0F+tj32vX_AJKmiXhku0 ziKuX^dB;_{R8h0`SRoK@I4hTXb59WwIB&_;%o8#zJEgz_43zXEJ>xxWo3$X(%qUBqh+JXvvJfXLVa zcMnPXnE7>SajPUTi6TZ_CM*BCWS~4Z!iJ1BX=cXd5@};m14+_5sG1AcrsG@~Zg!Ra z?F1VlrSN%NE#uy7ZX`5-J>uffKHx#raax?t;hGJ1X1Xp_-ul04nlK|rzVohPrjTv# zEAK{9Rf_7NUVF7s8pd&kG6YCiPGuV(=DW0+TAp9GNev&R*10i6SFiIPQFx0%pO$RYF*A2BYL z5XNMh6`lwtYYAv9gCKLq+MQ7dqhk~`FH57pgr3^_28F~Cj_k>pOsE+`GWptn zHB2{C{C@g-eP&HW@Dtg<&*znfW38)-91s4Z&|i%)e3TZ|l~=X|s|}+hG5SdYdqagj z#zUTN(3$J3RCkGX1(S#wQ)r?u<_C|pv|6N|R$MiKROMccIvM?xTY`7EJ&i=Rxu<+_ zDME^Qu%ylM(2KuiRNlYjOwok{wT44G0keMuk%GU9X`A%KE1UQ8<|@glcm-19q4d4* zMjt?bpAq>bCvqR|Nph{C3Fdu}!0MWt{W3UA{|xelI85Et~Z44XO+LUQB(R z*h^LRM)}J9TglU|#2eucCQ@mmdY?aizQ*(Nw@~DB)-$}}9p+9Etvq-iz&3(rAsBrO zx3(d(AYMCQ!VYuk{#)jC@-?AQ!vC1trQ&SLWQugUFqw=YVjs2G@J4gn<_Akn@xP%8 z{`IkjbLrDyPG=PRgo!1CI~QG2*a4|etBw8~`DyqF#>C@)ENg9V!=qVwf;=A|iMT*T zfz#Bjcr@EWr9%G^enOGFHn09RFs_c)m_0ijTEzph?lth-!09Df@-*-ew|oOIkiLSK z5g>VXmWsawwVu``rI*M~w)=O6?c+S>nfa*`>v8_&=yqGO59Z*nS^@%TwubL}4qt%# z$H(PEfYGabsfX7x$LlzQbG4}QMN1d*9G2CvX89#wao|Of*=7hj3%KYw6!dxDEocHR zWwLP(d&a-s7scM&EUA*Wbl;)Hn!2GS^-=N0%wzg~CkPU~#s1MH{*-fY4{ROwy!$PK zdjtUe6;%+pW3Nc?a-~Mu%}!A3V!jq!WYj#m9!diM!|pW)A;J?Nx*RkCwiJh3`#l16cpAE^)XFqM&Ptu++c1XK-zS1>$&{ zd6?Tz#Rxd$9wox;=DV(qZ_T~9trP=rsw#YQ#}&;{y@1-jEm7=frffbH0dK1Nmh0uozyGxa$9mg`B`q5pW5~pUEESB2PzKB!vPcQu`a~u z9Pc&eOb#*qKi?xOI>y=-SSSl}R(b{SX6I7&W~|{H?5=Dk-&uWQ^K6E1aI!<+L3L3% zCswNfI{Nz4<@@@26L2U)`YT5*_A#*XVbrmeZgIgL)6U)T}8~g#;eYkx0-^ z9&Wqv2@HkE$$78a#l~ztsj+3)Z@*Y7PWq&@Wa*-;T5#4;d)#>1V|U{Ihqxm2XIl9? zN)|^s^QtHr+-6$$-a4TA>D<>JOF}GG)Qx%XE6Q^XqjQk?4>ui8SbHq|!~5EY zGJp>d1qe$Ft4Jqae1asm>RY^>T$ZOg^^`23@=h8H0@`DF5wnn)##51WL@J#;{W!$6 zLqGqL|4uz?XxY)tleVXdJ+)p&AiUVxiD%Ta)TVI{HWcGDJi9A#0t8Pk+YfsrN8oK< zKSD`104r2KYwJpw_{-&`s|A;L?U|jPSh$zVJ8NB(#Sf-_1-qs{h2+*J9b&hIvfn}$ z|xoxky zuK>9$hr6aoXdT~Gh$0U6hwZgJpUn(YL1t)37Zma~QHJA(HyyE-Fqy)B^DyzFZGW7g zffA{~xQe-jB!zg4pDsPAl}jS|=6cFSgn-NtXLI7mS%d#K3mF2(FMTJ%EtJ;TjuuX1 z2f3uSaD`N+vcI9ACW0t<{(D>x7Uw-l>pSa+QIo5e1r{nk2BZMw3FZ2#q1mG2#34{1S8gG_%Dj6)xP z>~UXy0c1!?0Clu`kyz4{)k>Pl#~R>}M7y3KH;bH(((z40Kq4zdH94qfkGV62-tKmD zPEJ>0jW#CJ_=|j|V;M^@smzvJv>xj~{%?d?-fX1@?7X|^LJw+;A|?6==UA)5boSqa zb-URr&Rf`ZZn6t3Ub15;libhx#zFD3`^-9lNG&oAWFe!PN}rWVY1}O%Pi{gllY)dZ zRu!(O9QM*v9H*#f1342+%Z>E@WF{6b4#~w8F##$Uv5^g^-Et&eAl>ShQ@-3HnGgN= z+b4?X0mRLn|8vv4prgnP{p0!8qP)-(c}qy@RI}M{*b?HeISCZBUHY_tlpjIGG^ctDqG_emGs{-N1=6TYd{+nkjeqmaCg{o5DVH zl;yo`@N7J_o@J4vLg1m$=x{*sM|o8RF?L9i4@kf~w-TfCVK!xflnY2~P#Y{k6z|Pc z=`rPe>8LbnD)V2ERrLiERZTK`AMD`%=}nOu(HeWMOh5K#zN_nHFq%`Nh#*mm_X^n}sKhigJxe?w_1{K{c^w7BjgmNP2fOVxM+@NJ|%e&=!! zeWzwv6HA9)Z2J>sT4a(}x^ah+xOa*D?PfDw390pLC<5zg2D(OUoB~?+i;PeW^uwAe zMzl1|4J+-|I@l*EUcyvShCtwlsKBR4Jc)HIMP3Ev;)jLcZKV4n0i zHc4D#S6L2KaZNoO={q$noQ1ftX0OxdfbQPDu^u?$_J~k#RhDnqIfK(!inRPK6zdm_ z2EjIK9@lE8AeBZXuq~^TGe-;WN8)>TbQ0JUjS=YxFUH1U09)$XK5Owi3eD`eM;#+|(+cTMWq=&Rs?@N?3i+-pR>d;OZ*DB;H< zvFdiN8GtU(86QUqRV<>-jJwfY5VA4p`ilx&bFMnvm2CjG9Sx~;6Bs_NPli6(PloRU zZs4&0rZYewI?t9V+Fou@s#jv~b6NmLLbqW*pAi_(X!f;I*6C? zZY_ z+nfvq>)6cOEHwNaaVr!y=w&)8)4?Lhm5Ju9NDMu!PaRAO9pb0BA3}Fp2LXZ;MXByV z(l>P^Rp+!t^?HFR5BU>My-HcNLyp4!XI3E_Qgjjt9`}GqesJp)eT!SYUx3J zcmlzb)ZWuXT=t$LPI{tW1;Mi-kUfhH=7J%nohl<{XM^>UhV3criEnEplA(2EC@{9qJmO_ zVS*DB#BJin+wnWJaZW5G$lk$6RlWwiBgZ5)|?}B#x>U z9L|c#o(jI@yLezPmRCV&MR{Zs@m-b5#&hy0jwds>cIP}EjMgnj53k`xkYX}jDlb;U z0v17uS=i*uV%8(P5>Jf7HVLZG6-^s?a96)8iZ*vSdi>l>h(>^Frh(Thy9fC%Z<_kf~u)C|A~n+xAC{kE22*g<^A7wixBil3mrBocF-Tx)plvGUATQU6G#o$=6h3UzBkzWe(l=vZ|m$knAMrY ze~aleA~3#eb?4NSHFdbiiQ!^jwyqepUnfUV9ttRa3LQCO3Qg|Tc!W5#DF^__?$%#H zKJQ)c|06GC0OJ(!CKIX7m@`>on>F}KC!_V$kc)vntd4CW{`1HgYt|^;>EyL)XE0>= z!Y}A*0)dI}+P4XRDnUg$Q?a>%|@QX*dr zC5LC#eMe-a3m}U{(ve;u$q901&=L*AWGy(rSm`%wG3?bedh_|yWij;r6d51vZN@8B zil-GsCALs22txaH?jQ2fd%VKPn8hy;l?(hYT5jl4kS*RNnz@g}Q=;!C%1s%k(pLGY z_9%;SI+LSKe1eR93~qX<2kb^7{F*JHo{@=m-)=IglhJNSV`VrL&Q3f8qD;=yq&K3P zNbEn1#7%FCRdNqemJp~n02q8B%mcpE0e>`Ce*gw^dL`3tY}8!-m~LH?-sN9rHjvmS z87n&dEvxZ4(}PEu{2J1^ov8zMKf2Ha+!1B}9zef&6Cf`Cn`eQqVOaj%`F?|Xzq3|M z;5_(Q!%}(1%9;LghU9n5^6X-(0Ow2%-Dmj6FaFAnHa({T3;TEJQxjg2esJOE2w$Ni ztOqA*KyH58x4HRIcKjBh6L2kS!#jus_*i4ehO29#|Fq=cCFsKME-?Kzp?laR?&!qpzm=r``2Uffx3m9;dZruLk%5rTU!e@-8U=MohE>0NTzdKe zpl@;1fIf~W+Td?!o+F`{m;8F8^W+!%q5e<p(EFi3z~!1=a^^zxFd z<`Gcme*hbzJooGRL7u#>|D6;Tf_ zS@``=Li53Mf4NnWK>h&4MHJRppcLS{ zQS7T_mwNR-_TADP6yE33-m|XFiq0}sXL3Go&SpX!MKbd~jj!76Qh8EZn~2}8nYjdR z&ajYZQ6eVVQ@0VslYRr-(=!le!xeK(I3B$VV=MI~mEIL=w{f-uzQ5coIz{t|7C=pz zTRj6>^wMQLyCrgD~|4LAe~7m$GY-G%zrKe)z`J&%v-^I`J`! zFr2heIn?hZ{iS2zLD>u#8Ye2W@7i;CgD?s05daYT%Mi~@yJFYW8o}ojp5E~ z4~zCQDQo51*j|FuZrg^2qO6}mGCO}fxBoeStWyB=xR;LDH;}8NXX}50jMfd{;5>@= z>wR(J*?u2P3{a21JwWP5vPaU3N{5%TZWD#bOj%JwbVcI-G?!NV*ZL__0a3_FbP>i( z+@u11(_Gz@@?a(9S*2YVPo+vW3^IDx27jY;?*-R5az@#Ft?e~w`c*y$nqE1?46Cu~ zFqqhHGc6~?VK*She$&yqg2z7j&>g$Z4kK2{bAYJQX|H}NtNhBDczl&)-7W&(zh=o`<5{xQ9zH9~7R4$Mq-RJ?I0&^D#$}1^BQ;-;s)C zu=HXnwK_6D;xS6bTuCaH4`zQ>^W5XV7OFj495W;%p_!D2Zje)m-_uh5agBY&B3G|H zaj`5gBXL@fOFfkH!HVGc-RVpr25SC%o67NXEZyO4opW2jUUl*kY#vzGTOpkk7U)*E zpXp8G)(KBZsFKCpWO5fNF=!Rm{XGoJ=PLo^5mqr%>G04u;dIgVe~pS}D83vFB0-u| zH-+E#paR)uh@i{A;wtxXdL0_zgXiqA>omlG6^PuJ<;x$UW?0?L8yZc9@_}<@r7N;F zrC+PY7^f@ePM`{ND?>GjQS@>tUha_U9bp0izvash&);Ft>m)gAJ2rdl7Pgbl4h)JE zXQ;{Y&&TOpkgxCCbT8%k$fLxXLf9FT?9YmjQVi<{>d*Xb>XCs5o|dbn=n`b zLntvWHl0sSCT9@5|B^>IDWHVc$#aDB&+S>$u`HtZGby`If3z=R*U$D(I+Np^mus%S z#Y^aIc73tm5A4K+S53zJ{R{bdWQQoZswb>O8=NY$LpdV!vB_*~_a&Tu*kW6zfX>8` z55%ET5VPIx36myz=~pga2O0m1(R#oBuj_8b1?07`7D>0-#ge-soDRG)%U@2!MiRlGgYAOR%1Li!dE zkIdD=76lPQK@#A>cd6@E#h!>YH7Gs0o*`!*ff)S}R{J^hgUzC7x&saA+E?K3 z>+*fGQ=u^N=5#w!Wun*W*lOZ*_9BqgdFnp5{*w=0u#T^R;Ll}W1dPyCq3T)V6-Av?tr8uCdWcBgSgybCxDtEM{HB0_c%cE9vEgBL zN06lLNg<) z8w{2*7&?blh(9@vkv(?{Q0$&?)z^Zv7;=eJ`2&6A5~g?0Mmbo%80Z_FZQh_K6GtVK zl*?v4;}aT-{PU9Z55A z;H3%9y~&wP&L7gBYrG7>&85?+fIVX7!-jl!3t=(hb1OSI7U}xaeUR4rVu1u!JI_gkL5YNP;WV<}!1&%5vrNh^NF`_^E8ee&t%MKI!wAD)YN) zLe3Xoyuf?!)CXo5CO%DX!z(VW*d@+iu^%Q{>_8#g(@_(pfq+tEt{>%(@yq4H{8A{j z3Tj1k`iiNr4g3d}Dle2&>*Z$WfNh`NQcm_I(?j9NpfiJkzb%Jo_Ke4N3QJyIm8AT} zPdAGpTk&)CV1yBs_jEe_(WK^)hVUlC(WZUbGEk7#vhidXCixojaUBWMeFtF;%>XqU zhLsxk9)>;MwmO2BL*+PN%L96S_xq_Q8qm3V){XNyMA&W=gvlw4_6Prbu;pu4I(E*m zyx=*S(X`V7|C{W!Q2V6YL7Im?_dvD~@1I@f--USBLtY#b9dzc_Mbf(Xc&s3NqEGB0 z+)Q+XUZ=662dit8r3~+mS151cBG?0BMY$tAMF^h0a-yYS9HTQv>tR3rcM3$)6=H^E z%>x2h6}MOnuO0Ak-&VTD#jZ#NutIQq`L1Y!@>bVmE`R;MmfU7`8OFQVUZHXi^M#dYC$d@(_SM9%I!OxL3;TtP0rfgV4|A z?)!Z91ybM5?`zaGEn``2k{911#fyx2*xAT~!twuJR*d^0qg`z~??k7R>a(m-mn) zwhGQ~=~pDja2gqWY>LLM^%DW=^l!YdE2=rBGlQ;8Pn;U(IvI&qu+il}Jj#)R4 zrjs_U*@{{&opo@K8H39xO=|XM|br((nozEBu+xwXC zXz^ht8|mCfGta4QF&ODtQMG#_RTI*B59qtr{wO^p4$~km6}i_q;%l5$U#h_>+%57y zkvIYQjvDgEM3{d>+)eIuBTe^~qspSu*&wDn{DDnIW8sx%^H~Xeh^270f>t8sPxfV@ z*ceN{KXj2khexX1K;ZVDGynNt?{^UT6x#Wlp+(rp+EW}6eIU^A&4oHf{IbE=F#T2b zRTV9v&ac^?dkd~}4$^2k>+`bQQ+Xz_dJb_*>EF}TxoF#xa0Z>hHnty?nyWp}4wF;V zXMu0@#X@N%=j0N^(Z-!iOwNP?)bs^YqJlR0RF4VH6lp>)9D+z@iyigOE%5HyC$7v? zPXzqXf^0)LE(y4w?GI2*VBUHBwKJNF*e`P=Zt4pR|Kx0j_GRksakHU^%BeB(pPtnY zLAonfW_?Ml5Y`L--7MZU-x1jD;^XhugJ6dra;gwpbefVxHPW_G7&s-(A#b&lD-XTc zt?YCI+CHjfM^vf+$jDaSfIG*EkIEh%Z##GCLY-;&f;{~-o7oLe@ynUil~1^Y!06?} zR?3@;>iM<7+Q-4nh9XUwI1?GU8f0Q8xJG%^6>#4jAmn^!16#~%sQzUokT~H+c0pZ( z*KI{5t2e?|PoqG6N^59IJVV>WkTd(^c#rH;G|dKfL(V0=`+X%*ORGVwHcFpR#UJiP zh01t8x41$8=Is_DL5c`Ah3=$nmJWr%Zf5G9{NyW8HzuiXv{dKM*Xiro?e0n7@v-Ik zV`WeQc%gCM9f#n2c`l}f@1G~EGQB5p;VNpuKZvtGFGLRzwbrbn(q89R{H7ZG9Pl%T z|2m)LNFh<|T@p3r2Q?~Lf;3W@y+0E~P-P!X z@CyRnXom>7S$TGP%=i$l1}X`{5sV?GU9 z?IG=t2(iI;9q7QCuP%SPnN)8%v8&JKaH= z{Y*4L<~SY=-iY-2fk!Pn-*+#Fc$D-@3<)%;V(MJA>765vRC*T=-+unGX5kZz&u8;=B02FEtDz24?cVbPDtaN6}%E3t16Q zO6+da9j;Cklam?FxIZg@J@ikXl#*ODP@Y>>-GnT;F035r%X2!Y_e~v`kyEd`X5^dt*+~pH#5m)S2m~usmH0vj_0RKs%zJfq{&hhOFY|b7QY|ZN zE*A7dc6uwj!PW4#E_~@+QW{9|ybp20cfefBzMYKS#n}^A+`B!_CK+Rlx8Y7rEnS@4 zX6!>oa+xWTB6MHd;LU>gA!~C5Jqq7< zR(fT2Tb$M2tqgal^nkl-JL%fDSpO}yvu~c#4hGkit$xyPyq*J%RpgrYd6jFxn!C=i zm2Lca6*tDtN|oUpbOS2RF^qQ%9tn!e{yP8~RCb9nntTSpE8QRa&yi;a;Knh;3p^%A znB(vUq^|jJp1~WXL$nDBWpu@bJ~34K<7~G(djnt}+Sf0xdUrZl^L8EJ*+ZBi3KW)_ z^jFx$Y9L9}=RJqm?j7J#sl2a2y=36_hr6h|hJe1u$${k#bUggAjKhhu8bdaddKJtd z-;gcN)DCtq;U+Y`jD-1{vFsSA16+RoxJPED-Fpw0ip)~am(Gek7`UyGF|103N^MEU zxQOP59EqLTS}LU;1LO{cz4qMKNKdw-hl%qFzw}(fF(GyM0yh#oZoYZ;bGeOnu~Ph^ zhsRC6sg&doSZ%-HlRz^wFfxno7#YNy;*d-T26;NyJDh@EKlT(sB6?gvbD#q$rN-zx zCri$5mwl6B6P0#*UzMbzxBAf1ZTi=M4ce>T$_hhdDpZfmW`n_rhCY9!%%a$6o7JW42URFl>6gqALv}=?~QDMd!zi^0{tOB_J5y zh~13hLZHEQvbtbJ%%b1HhXt5uPIIu-bGr0zAzH|!3Trxa$e={Q` z>R`?7xzNvB%>7fH=dELUmUM6HLMCBM`F<&?)^a(%I+xqD`J%mURhD|nY=OYj0@C0! z0aD%i&S+oceTou>&UDvD5wf-Z7F|uhWW!j$VE&nvzQRsO_VK&l-&`L3oOjv2SZ1a; zet9VaVQz=q-rmUw;;ruf(CBc;BVIeEH172q%Ml!WCD~8A z3w(f1wEo$t#XtHOSyaA*Z;wCD7PvlzwJ5=#v%RY9Q+9boqkcpP*;@9irNyAz2%C60 zJxTQ$iyU52&}(9K->3O>BT;qs^H?cGupvi{yWH-+#i8r#B2fK#Z+7B6sw#SM1wco7 z&S{ltT?9ClnBG}C^5Osb*NDAF#Xov}@3TGAY#LBJz$83axJW*4;%V5dwc1CPGU1;@ zJYPKF_q&1(=Dt(@?LUzJy=QwU@t3V6RfMzegD^5miZ1GS zQ`bUXX2)?=;#Ih;>~qbIYa#?yryzfcrkNCyc*pto>k+MgH-Z#jhzt58kG#U?mIn

%%~z0G@6 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 z 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 V%1}C%{|Nv9|Ns5!M=k&Y2mqVuc~1ZU literal 0 HcmV?d00001 diff --git a/community/rust-desk/1.0.0/ci/basic-values.yaml b/community/rust-desk/1.0.0/ci/basic-values.yaml new file mode 100644 index 0000000000..d6e1822e58 --- /dev/null +++ b/community/rust-desk/1.0.0/ci/basic-values.yaml @@ -0,0 +1,15 @@ +rustStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + +rustNetwork: + natTypeTestPort: 31115 + idRegHolePunchPort: 31116 + relayPort: 31117 + serverWebClientsPort: 31118 + relayWebClientsPort: 31119 + +rustRunAs: + user: 1000 + group: 1000 diff --git a/community/rust-desk/1.0.0/ci/only-encrypted-values.yaml b/community/rust-desk/1.0.0/ci/only-encrypted-values.yaml new file mode 100644 index 0000000000..26f85a6098 --- /dev/null +++ b/community/rust-desk/1.0.0/ci/only-encrypted-values.yaml @@ -0,0 +1,18 @@ +rustStorage: + data: + type: hostPath + hostPath: /mnt/{{ .Release.Name }}/data + +rustConfig: + allowOnlyEncryptedConnections: true + +rustNetwork: + natTypeTestPort: 31115 + idRegHolePunchPort: 31116 + relayPort: 31117 + serverWebClientsPort: 31118 + relayWebClientsPort: 31119 + +rustRunAs: + user: 1000 + group: 1000 diff --git a/community/rust-desk/1.0.0/ix_values.yaml b/community/rust-desk/1.0.0/ix_values.yaml new file mode 100644 index 0000000000..1858d82bc4 --- /dev/null +++ b/community/rust-desk/1.0.0/ix_values.yaml @@ -0,0 +1,33 @@ +image: + repository: rustdesk/rustdesk-server + pullPolicy: IfNotPresent + tag: '1.1.8-2' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +rustConfig: + allowOnlyEncryptedConnections: false + additionalRelayServers: [] + additionalEnvs: [] + +rustNetwork: + natTypeTestPort: 21115 + idRegHolePunchPort: 21116 + relayPort: 21117 + enableWebClientPorts: true + serverWebClientsPort: 21118 + relayWebClientsPort: 21119 + hostNetwork: false + +rustRunAs: + user: 568 + group: 568 + +rustStorage: + data: + type: ixVolume + datasetName: data + additionalStorages: [] diff --git a/community/rust-desk/1.0.0/metadata.yaml b/community/rust-desk/1.0.0/metadata.yaml new file mode 100644 index 0000000000..3d4b0bbcf8 --- /dev/null +++ b/community/rust-desk/1.0.0/metadata.yaml @@ -0,0 +1,8 @@ +runAsContext: + - userName: rust-desk + groupName: rust-desk + gid: 568 + uid: 568 + description: Rust Desk can run as any non-root user. +capabilities: [] +hostMounts: [] diff --git a/community/rust-desk/1.0.0/questions.yaml b/community/rust-desk/1.0.0/questions.yaml new file mode 100644 index 0000000000..906c5b3fb7 --- /dev/null +++ b/community/rust-desk/1.0.0/questions.yaml @@ -0,0 +1,302 @@ +groups: + - name: Rust Desk Configuration + description: Configure Rust Desk + - name: User and Group Configuration + description: Configure User and Group for Rust Desk + - name: Network Configuration + description: Configure Network for Rust Desk + - name: Storage Configuration + description: Configure Storage for Rust Desk + - name: Resources Configuration + description: Configure Resources for Rust Desk + +questions: + - variable: rustConfig + label: "" + group: Rust Desk Configuration + schema: + type: dict + attrs: + - variable: allowOnlyEncryptedConnections + label: Allow Only Encrypted Connections + description: | + Allow only encrypted connections.
+ Clients have to use the generated key to connect to the server. + schema: + type: boolean + default: false + - variable: additionalRelayServers + label: Additional Relay Servers + description: | + Configure additional relay servers for Rust Desk.
+ The internal relay server will be added automatically.
+ Format:
host:port + schema: + type: list + default: [] + items: + - variable: relayServer + label: Relay Server + schema: + type: string + required: true + - variable: additionalEnvs + label: Additional Environment Variables + description: Configure additional environment variables for Rust Desk. + schema: + type: list + default: [] + items: + - variable: env + label: Environment Variable + schema: + type: dict + attrs: + - variable: name + label: Name + schema: + type: string + required: true + - variable: value + label: Value + schema: + type: string + required: true + + - variable: rustRunAs + label: "" + group: User and Group Configuration + schema: + type: dict + attrs: + - variable: user + label: User ID + description: The user id that Rust Desk will run as. + schema: + type: int + min: 2 + default: 568 + required: true + - variable: group + label: Group ID + description: The group id that Rust Desk will run as. + schema: + type: int + min: 2 + default: 568 + required: true + + - variable: rustNetwork + label: "" + group: Network Configuration + schema: + type: dict + attrs: + - variable: natTypeTestPort + label: NAT Type Test Port + description: | + The port to use for NAT type test.
+ Internal port will always be 21115 + schema: + type: int + default: 21115 + min: 9000 + max: 65535 + required: true + - variable: idRegHolePunchPort + label: ID Registration and Hole Punching Port + description: | + The port to use for ID registration and Hole punching.
+ Internal port will always be 21116 (TCP/UDP) + schema: + type: int + default: 21116 + min: 9000 + max: 65535 + required: true + - variable: relayPort + label: Relay Port + description: | + The port to use for relay.
+ Internal port will always be 21117 + schema: + type: int + default: 21117 + min: 9000 + max: 65535 + required: true + - variable: enableWebClientPorts + label: Enable Web Client Ports + description: | + Enable web client ports.
+ This is only required for web clients.
+ schema: + type: boolean + default: true + - variable: serverWebClientsPort + label: Server Web Clients Port + description: | + The port to use for server web clients.
+ Internal port will always be 21118 + schema: + type: int + default: 21118 + min: 9000 + max: 65535 + required: true + show_if: [["enableWebClientPorts", "=", true]] + - variable: relayWebClientsPort + label: Relay Web Clients Port + description: | + The port to use for relay web clients.
+ Internal port will always be 21119 + schema: + type: int + default: 21119 + min: 9000 + max: 65535 + required: true + show_if: [["enableWebClientPorts", "=", true]] + - variable: hostNetwork + label: Host Network + description: | + Bind to the host network. It's recommended to keep this disabled.
+ schema: + type: boolean + default: false + + - variable: rustStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: data + label: Rust Desk Data Storage + description: The path to store Rust Desk Data. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "data" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Rust Desk. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Rust Desk. + schema: + type: string + max_length: 6 + valid_chars: '^(0\.[1-9]|[1-9][0-9]*)(\.[0-9]|m?)$' + valid_chars_error: | + Valid CPU limit formats are
+ - Plain Integer - eg. 1
+ - Float - eg. 0.5
+ - Milicpu - eg. 500m + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Rust Desk. + schema: + type: string + max_length: 12 + valid_chars: '^[1-9][0-9]*([EPTGMK]i?|e[0-9]+)?$' + valid_chars_error: | + Valid Memory limit formats are
+ - Suffixed with E/P/T/G/M/K - eg. 1G
+ - Suffixed with Ei/Pi/Ti/Gi/Mi/Ki - eg. 1Gi
+ - Plain Integer in bytes - eg. 1024
+ - Exponent - eg. 134e6 + default: "8Gi" + required: true diff --git a/community/rust-desk/1.0.0/templates/NOTES.txt b/community/rust-desk/1.0.0/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/community/rust-desk/1.0.0/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/community/rust-desk/1.0.0/templates/_persistence.tpl b/community/rust-desk/1.0.0/templates/_persistence.tpl new file mode 100644 index 0000000000..ac61c4737d --- /dev/null +++ b/community/rust-desk/1.0.0/templates/_persistence.tpl @@ -0,0 +1,33 @@ +{{- define "rust.persistence" -}} +persistence: + data: + enabled: true + type: {{ .Values.rustStorage.data.type }} + datasetName: {{ .Values.rustStorage.data.datasetName | default "" }} + hostPath: {{ .Values.rustStorage.data.hostPath | default "" }} + targetSelector: + server: + server: + mountPath: /root + 01-permissions: + mountPath: /mnt/directories/data + relay: + relay: + mountPath: /root + {{- range $idx, $storage := .Values.rustStorage.additionalStorages }} + {{ printf "rust-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + server: + server: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + relay: + relay: + mountPath: {{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/community/rust-desk/1.0.0/templates/_rust-desk-relay.tpl b/community/rust-desk/1.0.0/templates/_rust-desk-relay.tpl new file mode 100644 index 0000000000..61db714f07 --- /dev/null +++ b/community/rust-desk/1.0.0/templates/_rust-desk-relay.tpl @@ -0,0 +1,43 @@ +{{- define "rust-relay.workload" -}} +workload: + relay: + enabled: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.rustNetwork.hostNetwork }} + containers: + relay: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.rustRunAs.user }} + runAsGroup: {{ .Values.rustRunAs.group }} + command: + - hbbr + {{ if .Values.rustConfig.allowOnlyEncryptedConnections }} + args: + - -k + - _ + {{ end }} + {{ with .Values.rustConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: tcp + port: 21117 + readiness: + enabled: true + type: tcp + port: 21117 + startup: + enabled: true + type: tcp + port: 21117 +{{- end -}} diff --git a/community/rust-desk/1.0.0/templates/_rust-desk-server.tpl b/community/rust-desk/1.0.0/templates/_rust-desk-server.tpl new file mode 100644 index 0000000000..32c4b03d3f --- /dev/null +++ b/community/rust-desk/1.0.0/templates/_rust-desk-server.tpl @@ -0,0 +1,55 @@ +{{- define "rust-server.workload" -}} +{{- $fullname := (include "ix.v1.common.lib.chart.names.fullname" $) -}} +{{- $relay := (printf "%s-relay:%v" $fullname .Values.rustNetwork.relayPort) -}} +{{- $relays := mustAppend .Values.rustConfig.additionalRelayServers $relay }} +workload: + server: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.rustNetwork.hostNetwork }} + containers: + server: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.rustRunAs.user }} + runAsGroup: {{ .Values.rustRunAs.group }} + command: + - hbbs + args: + - -r + - "{{ join "," $relays }}" + {{ if .Values.rustConfig.allowOnlyEncryptedConnections }} + - -k + - _ + {{ end }} + {{ with .Values.rustConfig.additionalEnvs }} + envList: + {{ range $env := . }} + - name: {{ $env.name }} + value: {{ $env.value }} + {{ end }} + {{ end }} + probes: + liveness: + enabled: true + type: tcp + port: 21115 + readiness: + enabled: true + type: tcp + port: 21115 + startup: + enabled: true + type: tcp + port: 21115 + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.rustRunAs.user + "GID" .Values.rustRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} +{{- end -}} diff --git a/community/rust-desk/1.0.0/templates/_service.tpl b/community/rust-desk/1.0.0/templates/_service.tpl new file mode 100644 index 0000000000..279b58f0fc --- /dev/null +++ b/community/rust-desk/1.0.0/templates/_service.tpl @@ -0,0 +1,59 @@ +{{- define "rust.service" -}} +# https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/ +service: + server1: + enabled: true + primary: true + type: NodePort + targetSelector: server + ports: + nat-type-test: + enabled: true + primary: true + port: {{ .Values.rustNetwork.natTypeTestPort }} + nodePort: {{ .Values.rustNetwork.natTypeTestPort }} + targetPort: 21115 + targetSelector: server + web-clients: + enabled: {{ .Values.rustNetwork.enableWebClientPorts }} + port: {{ .Values.rustNetwork.serverWebClientsPort }} + nodePort: {{ .Values.rustNetwork.serverWebClientsPort }} + targetPort: 21118 + targetSelector: server + server2: + enabled: true + type: NodePort + targetSelector: server + ports: + tcp-hole-punch: + enabled: true + port: {{ .Values.rustNetwork.idRegHolePunchPort }} + nodePort: {{ .Values.rustNetwork.idRegHolePunchPort }} + targetPort: 21116 + targetSelector: server + id-registration: + enabled: true + port: {{ .Values.rustNetwork.idRegHolePunchPort }} + nodePort: {{ .Values.rustNetwork.idRegHolePunchPort }} + targetPort: 21116 + protocol: udp + targetSelector: server + relay: + enabled: true + type: NodePort + targetSelector: relay + ports: + relay: + enabled: true + primary: true + port: {{ .Values.rustNetwork.relayPort }} + nodePort: {{ .Values.rustNetwork.relayPort }} + targetPort: 21117 + targetSelector: relay + web-clients: + enabled: {{ .Values.rustNetwork.enableWebClientPorts }} + port: {{ .Values.rustNetwork.relayWebClientsPort }} + nodePort: {{ .Values.rustNetwork.relayWebClientsPort }} + targetPort: 21119 + targetSelector: relay +{{- end -}} diff --git a/community/rust-desk/1.0.0/templates/common.yaml b/community/rust-desk/1.0.0/templates/common.yaml new file mode 100644 index 0000000000..cd6cff1af7 --- /dev/null +++ b/community/rust-desk/1.0.0/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "rust-server.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "rust-relay.workload" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "rust.persistence" $ | fromYaml) -}} +{{- $_ := mustMergeOverwrite .Values (include "rust.service" $ | fromYaml) -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/community/rust-desk/item.yaml b/community/rust-desk/item.yaml new file mode 100644 index 0000000000..5cf55c179e --- /dev/null +++ b/community/rust-desk/item.yaml @@ -0,0 +1,7 @@ +icon_url: https://avatars.githubusercontent.com/u/71636191 +categories: + - productivity +screenshots: [] +tags: + - remote + - desktop