From 2cb380e88464ad40666cf3d299422750a2d25259 Mon Sep 17 00:00:00 2001 From: ac658123 Date: Fri, 18 Nov 2022 15:40:42 -0800 Subject: [PATCH 01/62] US855843 Add env var for audit log cleanup --- charts/portal/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/charts/portal/README.md b/charts/portal/README.md index 0f7414e5..a02788ac 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -140,6 +140,7 @@ Install the chart again * [Portal TLS Defaults](#portal-tls-defaults) * [Portal Cipher Suites Defaults](#portal-cipher-suites-defaults) * [Portal Request XSS Filter](#portal-request-xss-filter) +* [Audit Event Logs](#audit-event-logs) # Configuration @@ -416,6 +417,16 @@ Take the base64 output and set it to the variable below and restart portal stack | `authenticator.additionalEnv.ANTISAMY_FILTER_POLICY` | Zipped policy file in base64 encoded format| +### Audit Event Logs +Audit event log purging is enabled and set to 365 days retention by default. Set +this variable to customize the retention period. Set the value to 0 to disable +this feature. + +| Environment Variable | Description | +|-----------------------------------------------------|--------------------------------------| +| `portalData.additionalEnv.AUDIT_LOG_RETENTION_DAYS` | The number of days of logs to retain | + + ### RBAC Parameters | Parameter | Description | Default | |-------------------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| From 79cb82817e5d0b058e08843d53184224e1ff583f Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Fri, 20 Jan 2023 08:34:57 -0500 Subject: [PATCH 02/62] cast & use integer values for replicaCounts --- charts/druid/templates/minio/minio-statefulset.yaml | 2 +- .../portal/templates/analytics-server/analytics-deployment.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/druid/templates/minio/minio-statefulset.yaml b/charts/druid/templates/minio/minio-statefulset.yaml index 4d5ba4ab..08686ee7 100644 --- a/charts/druid/templates/minio/minio-statefulset.yaml +++ b/charts/druid/templates/minio/minio-statefulset.yaml @@ -49,7 +49,7 @@ spec: - command: - /bin/sh - -ce - {{ if gt .Values.minio.replicaCount 1.0 }} + {{ if gt (.Values.minio.replicaCount | int) 1 }} - /usr/bin/docker-entrypoint.sh minio server http://minio-{0...3}{{ $address }} {{ else }} - /usr/bin/docker-entrypoint.sh minio server /opt/data diff --git a/charts/portal/templates/analytics-server/analytics-deployment.yaml b/charts/portal/templates/analytics-server/analytics-deployment.yaml index 4285dd10..2656fa74 100644 --- a/charts/portal/templates/analytics-server/analytics-deployment.yaml +++ b/charts/portal/templates/analytics-server/analytics-deployment.yaml @@ -17,7 +17,7 @@ spec: {{- if .Values.analytics.strategy }} strategy: {{- toYaml .Values.analytics.strategy | nindent 12 }} {{- end }} - {{- if and (eq .Values.portal.analytics.aggregation true) (lt .Values.analytics.replicaCount 2.0) }} + {{- if and (eq .Values.portal.analytics.aggregation true) (lt (.Values.analytics.replicaCount | int) 2) }} replicas: 2 {{- else}} replicas: {{ .Values.analytics.replicaCount }} From f143ec262e2acbe7d525d3539f8c6c84de4474d6 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Fri, 20 Jan 2023 09:10:49 -0500 Subject: [PATCH 03/62] 1.0.9 tarball bump --- charts/druid/Chart.yaml | 2 +- charts/portal/Chart.lock | 2 +- charts/portal/charts/druid-1.0.8.tgz | Bin 8502 -> 0 bytes charts/portal/charts/druid-1.0.9.tgz | Bin 0 -> 8710 bytes 4 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 charts/portal/charts/druid-1.0.8.tgz create mode 100644 charts/portal/charts/druid-1.0.9.tgz diff --git a/charts/druid/Chart.yaml b/charts/druid/Chart.yaml index c1a7dad9..312aed5e 100644 --- a/charts/druid/Chart.yaml +++ b/charts/druid/Chart.yaml @@ -7,5 +7,5 @@ maintainers: - name: Gazza7205 sources: - https://github.com/CAAPIM/apim-charts -version: 1.0.8 +version: 1.0.9 appVersion: 0.17.0 diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index e61b20d2..9ad58d5d 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.8 + version: 1.0.9 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 8.8.16 diff --git a/charts/portal/charts/druid-1.0.8.tgz b/charts/portal/charts/druid-1.0.8.tgz deleted file mode 100644 index 0932fd6cb9e42ab30626db329502653622e8aca3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8502 zcmV-6A<5n!iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKD1a~ip}?|i1p|AQ``Q?>V;&@^ChLX|%-Hap{!#P$Ivv-jP# z%O$!6Xxy}VT52aG@%`IxN$Q7M{orK-@t_Y0R_n3!SbD7AT1&PcV7q=kg+4RpaOV8< z48b%_vvYDH{x?li|KDt#wts4zG|fh{)jnyS{=|Qn?Vo`89K`4$pbYvynH$%oH|_@s z(8HgQPcd=3;GtQ8o)`aV8jVxKtk{TJKK7W1`_(7Vw#W?hZZ1E78{#wQfSwDTIl~qO zVjfkdWQMw6%9uyH_4)*}X)rP@GOM5Wc(yw9@T_L>q_i@F*kusA$fw;(4Y-hJeG9*S zg{MukU6Fr_Nm`*K@GT^gEmt<1d#DSb=Q-Gdoc_u~)V79U8m}w6?)*InlK&r|6CnCr z3%~;YKjptQ{%^Nh2maqiI99lqGHBfci@0Mv34FmZpayy#w5AAL@QHF%IR>{=95On< z6xfL3iHmH&2pAz?BhMjoWCKV61jAq?6Ou7tQ^a$t3kbMC56B@N^23$nsKS%Hb;t-h zK+egd%0&FxJ*oiUiBtpR5sDe{=Urey&hT~dF>stAvV6q4U=-F;<6rs5V_rYy^o?QQ zFi!1kPXBZOMT}v0LIE6+2lNV9Q|L|*z+>JIF0%MXo*KFUePPIVp#yBl;0RJ=aB3-H zfp>vsexztPe4j0Qfc^}yFTahU zLy?xrmn$f=XV_Igg+0ZiXfUz~Ux#meG{#@Lz(x->FB}j695jK}oD<87qDnRLOVsYG z)Ys#rJ&@AR#J9WP)PZy4^FbaH-$DZD@h=cV&dk9Y*l=1<5>M6j=9&0XBsUOo?Mt zrL)BJ678Flzz>!!aLr8@UWa2mC>a z3&z+%e5nrW=2eMVbdTmT%f#Xp{}1J}J*xZ|yd`AfAlX>p`Q#5|u^Qhi_~-ENOFPN| zd2cVG&PU?Rb}nWpXhds&7rZe|$#%1ZgZRRKLmX_)yWnzsMc9pxC~}!BC^|LDv_ASX zK$Oug`1TmlKSMLImo(d*4EU7UXsCKU@y zxP~fATGFy+<8`B;>FYLjVJnvGk%f)r3x&GI7PQ0R^W*_JUGRHva3xny8+{2g@P!fj zOm2U#8*-faL~pKI(--Yy(@kz|Rk2zRID``{Ux(^%Y`=90}(_to?yR=(u7 zOit|A=95oswdwqCpf|4FXf9^uFwqiypzP5*9oFX44XZp)Jma{;n~WFm6N)+0DLrkQ z#bXrZ%4TaA?IoL-9L+Xtro0hF38Bw0FIC^1)Za&U|-l1-Z2-+|ICd1@5D4u4)_0Ugyi-QeFU&e8FUsui&=6YvK=K ziw9j>tO@)G7>f0P5Vspgl_+VAU%;`8Kvm2xgQu;6n(|TH&JBq= z@qH5*pQHquC%t|^zK?ALz60h5t_3x#2r~eT>lp`* zGY5YL(7|KOmp0E6nhB}-$GL-{I$SE0ak*ZqU zDz)R~?-0}j-^Do?S_oACy9%mz)s>knY8DtGc{XNzR$&yoVI*TFYrIJFBuJv!&wVc4t;Y{Q2Ma8)p z67ovUwx_h1WhQ7cnr{&cDXzwXdohxQldxuwYRZxm5}O^X9FQOyEFd$5^Ea+PDNY#> zHTlou?pbC~(;!AdR6-bjhWnvd7Kxs8YSBBVB`via9 zasK>y9Jf{B$C~8FTBcOjPIpQ8cL86Dk(A=_C5BQae1@@%DELbZX4Kec8qH`F1t?bq z{HG0wo5B}mW1=C}_%)qBLz5gbZ46X6vSfD)7x)We5szOPCneL&;CBmyr^(&Bs-PO_ zbueU2ZDLU)0&<0lM?mYyty{2$T!wtl#}w5l8MDvOM|FWMp4J2cBgD`%0ji-kq*?eQSC-LBIb?^dkJPCMBPn>IE&5|8<%T?f!q- zJUKnw|F;oR`hSh1$~|`NE;twC{sDSNl^J4??*&43ErFlZCN7GEZ#~AUB7~YUY;`HhfrI;cgGXbZoNg}-mo+>7G*dKhlJn!FK^*;1fivI8Q z^}Bxmra!p*?Rt1C3kny|7?(97m@BL}$#Zi(D9XdP7w{eY84wobJHNiV?Ok5=2Y2tU z-`>6Nf9k(aWtLPK5qt!;zO#Z~<7v|LvA8|2sW7@c(u~KL3aORKopx$M)1i zmQ-eP0?LqodD8_~#6=N2C+UndjH|EB*UeCaC5EY+@^1$H35xU(!dMz1Xt|B0i1Hrn zMX(w;cQA6<<;|`~cX3$2{|quT4jhU$u?|?k|0kVhGtK`^v(;`M_YqAP9aLbV8*cPdd;CPHEZ&xQ;QnGYG7MEZNu z&SF3u2fLGxB86Oa?GN!yJkqVWfj)E`Bs7bo=@2zSonkyV=?3LYEnQBP(koV^H_&wn z6AJBWaSYE8WpL(+#=GRRc6iGh>v#k}qNJ%vl0`|H2slr;ZD>^}ZHQ(|xS6P}i1!zs zg^_>3nNyhUJ8-dUBbR|jv!p#m)vIbFN@7i$q>zkM_6X(KyQG?-L!bK@PZcwA3+odMW!S1u5p>w}&YB|Y-k{U}q;vC$jG=RZ95^2$i?}xJf;VP55ocl&u=sl;{n}z9HmrvszHKc=_;AsL3ojx95C@a~iK($e&?X ztVnNtXrY_*fOWQfa@5cNic+uodm~BUg7bf?+0^d;%|@%;IGq2t5!R9aW#>iyB|uXU z-xo=s!q^Ih#S*{gmlA%syt=%;`#5+nt){#6x-`6stX<^yUq7C|>!(YV_*7zn6qa|< zyY2nj8}{#R|8*l9>`OC2J4Qvv*l_^XFhm^_Er0|?TD1kaU~$GUQll;DR&97|*_Br{ znT%>w0NR`~OY&=!Cu?_HOgwtYNj?ps8rlHHIX@2jcfuC4mXWIdhW5~7{o25 zS)_^jqH$50%nq%VKFS{%@Zg?7y}WR>yyJv){er z{MC`*MhXcoIPHpiTSSG15jTo3Vy!Rs4=7%m|2IH_7x4e-NvoytfAge$@c*=xumS$N z_X`2oJ0v)DdE5aUoLP<(Oj!Gt3k<9D?;L+yz3&gYGLal#)V}( z1ySo^$3-PP4S<|8MZv}>vQp?uP_o+8CGg}7HYl4U1=PLs^Zsyn_pbjh9TpW=rVJJx zaY*RBDi4naF(#c67{P!|jl>sO##Tp$do*7}Ub+#({`sJPySI%fA}?x0BE#+threGB zE}pj)+O;ZERIZWm%<-RHl+Wb3M(C{1R4D-{9eaIKd2k z;Kv}U@zIP&-at0(hC>vhNbb0v0hH=lFe=?al5fIPwW3rs7|9BYi+d3|Cs9J#`zm4a z;*}bV&|*kD$I*h8uF__@mKWgoFRJFFi&2$Pdkw_*-Qqd@^(^psKO9=>P}NG zKAl5riVTOycO~fAzrR)aK2_~j>krTm&m&=4T76ZW!7oGn6;->9mKle~|K#*ZnDR_X zr}WDI2FRZSi`TB^Rfbx8GXjbPi5XRpOiGV<0q4d19sOw<>ah$XG12yu2QgN*@V<>{nV@L{D}_8lI68Tjz?0K{t}lex0KDC_~ScrXXw z17xvvRE#X9&JF7Ti@61C6<1X5L|cOuLGE@?dmv8Dav+`^Y0z2Hgsl9rV9Pu}mAiu~ zOPAG^kxHII_QyG&8@JJIK5SYodxXxRBQv#9$JyxNLEewF3;qqN0|f2geaz6cYoRJo zR<8o5?NSDO?m$Xa-c;kSisqJ@D1Gk8V|V?*r6@Lhc1dH#=zT_|R^`dgSazK{K)sl^ zZ*=)j{C-vPYhy34i}2r*6W#xV**?7gw4JaH{;R)nR*C}WJ&3k1Sa2R~?|T1u*Sq_5 zaQ&`77)Fo%zA@hjmp3vx#C;PVlGmU5gZI~ii!6v-;$R}qltGa*R!6#t{`KJE@~U@x zor7AJRH)`#wa%x;u5WsS+soU_>#Mu->yKBr=`}wd79(7F(r@lX>;IsC^ZxR@S5%4^ zIbBv&eR<9*vMwIj3(M^PQe?`n63=4)-)XmX{D=Q_ z*#EZ?O7NeHc-WUZ1?=(m5B3fUO18KsMS_;XUjXpcsQ5ZGgI|V$&-<~VM16GO1H=v- zInjq)cqnO54mz|fLX|gJ)&qm`r`=10gp`@IA|jNNb6xZ$DQaCjsGx++30e;g%Fq8a z_J2il6Kss}#3io;@g!~CcZBCf06Yf+z?WqJ7)2aC1>9C5T1m=TWDS@pyj=vZa9dmti_6QuG8DHIs`$n{X%_75KO%0`+Sd!=GWY*YeEz8^#r)JD`A3u=XFP6Tj zM~+%(=%Jo4R8tQ%K6Bkk4nVvRg`7OYkX&(=Sd7ji+mxeSTa4)ZFHkf2?-RZLx{&`H zrvCn0qtiL;|Jw=c;Q#9E$mf2MVkazLfb_=%Nq9d5@ZXqkB!Dkt6T|NF>#M8&xxhw? z&A}fZyLq4a!XW9DrS>j9^#`|?!@g7x$R|ii^!{>q+rJXZ2RH9~mshv_f8KWM^;ic% zW>}Oe)Ks{2rSq@Eeap%GNiI&DG<`)tWro z4+~#qR=q?`j&P!^sKue>T32C07PGGQMo#X{2w6{SBb#@N=DRh0SyT|IwKY0KVQDpt zQe6(&1Lb-gS#Y`(n$ExT%kU&HvIX}XIxYr|bDFq%1DAn`OIugkw$hg6@?JhPTn-HD zISWDIJV;mvgmb{)H_D5{1*V)S{>wL%)Ga+Nm^$w|WJ1$j7n*7Ey{Rze3qYr(RpojX zgazGwFdj@94@T?wu8;efpx^&y*tQ)s6Q?&n{ny%fz=Hc<%j{&{|1mp<``=c=I`aR# zS&@GaOr_i>JU|lmAtCG~JAzG(!s@xfas<3+$gI9w_*ybkD5s z7+5W(+&M5HF1SI&&F%0p@$aL_J~!6%AiQK@Y45@XJ;x7j#21}Muib$>#wm_?kHK%y zCd30G7j`FwB~3-T--&;Z-3dRrDkCAk)!58advXo$yf4P{!6E##;`wh~Ja7^I*Y4>0 zU(IHxc{u-VBdm`9WzKZ_c?dBBGy7g5Zm3PD z74gG@-0Q-3>EhPK6H7{Y8p77Y7mLey8q4t92@5s`5mUvkWE!rCVfNfS{AJjO@0kPO zB4KY74nBal-Q2zO0sJPFX%la|DVghb9qyKH8S7b07nQM+)%1&jn86S4xOdTV_@lit zn!W$Kn8<&(W&dTi+PeOK=d^W@|7|6#hyNzCqv+o6VzQI_ej(l~2-2td}Y86LV!{IbSN*`eHO*%=&V@OzzDHSyzsy=UtbINW;{c zB0F%9uZd_<@%g%`TF#Q|*8m%&e>9qPvO;D{_NQ)J%U|k(5dV%5Y`H4E4zLr zG===xcWsefwCO*Y8++p6y|k(DYv7~ZwpNg^K@%nx-E9LV7R`>ALY3!}Kaj;P?ahXY z&>gpv(42OrsFE}C*Hjgco?X5dov_-5I&@}h~(v}<5I$~Dc@)2LIF?48E zPwXRTU%Sq{3lc55@;2oQIm0KC81u3+UClnlG&N!S0SMVwN4c9$(zn;wZ{PRtdN<1J zBZK}$|LXR#_kNh$6*-f(KC$TCJ(?STP~ujXnWIZ@owXJ7N!y%vXkOUl-tR+YPTXBS zvrplb2ONH;y{HkF89%*ib!JR;X{Us9Y=8L~ex_2gANSAly_1bE!@l@3`4+KEL!@Xu zlq*TJtIo^Gq!TM?-eSv-$h;$dyS=?hf6Il(Gs`O6KD0vVEG{Z!L3^j_YjPab=H)MiPbf5V&;S9}#)eF|$QSCb>B1wui0Pc3-G^Yqp8dPJEtcH{BJ8^W&h8K%fsAtn{4+x2zzCH(Z{b@9yJsqJDuYI@l^1W5>{s znYRLSOY@;?_Z)8uuYwt9nA!Z{id{sr9IOn@$$hE(FuokkT4^boPs(Us<#MLpp>l{; z@=Yv$_Wd79T)paAdEEuqs}-+Q=?h8@sd-s*9EPt%uzrQf-UUhtNwP0R$l;vuLx%GG ze>?s^JBK2)MxX~;D!`RideD=cf z@1Oy6&;WWK4WP|Eg>v47w(TQIIs1D)b{VLKG*#0J8ug%sK-HiRmJyz942M|Ik;XHS zLG=;KTC9?wN{U0(1U0H=DFBRQkcqwnq*%LQm?>d-4J@O`5IXuvxw)!+GY!LNJ*vH+ zmYkL*tWjIsGwCulG%Hta>dBR+oRy15{* zsdjxK2AtnP#rW?k=x=@p?r%3O@aijBX(_M1>e9a_`0cKo^A_~l!8vcrId8OYtAgxZ z-^;fZboozs6RAOY70E=bBM4d~|2;Le_g|WgPU9f|*-8jG8oGAOBI(PhVfhF$1pcOq zh$7z2TwDL15fx>G%3S=l@f)bKw7Ngw^ri6kqQf+b@FyXJ8nC=qfl&+IfE>NKrQCpYKza0Wnl8$}&iN7floD; z*hotGbD1E81AGTK1o}3>gZFv~0egoFCqwbH*sucirn)>A?k$)PxrJoled<8TJ7iL!@z$ zEBTg4`ecy{+B|Gc!_bl?*&yq77-xKhXW}bQU-&_xF^N9yl-lM5eC}fHCEco*B zuVlps%H0-Z=6gQQ1ah#Z#N8i>>$YdzcEG53{PC*qi3jNk^C?7{!^pbZXD$QTM5VD1~P_xmjXtBoC4tU z6uDp&V8_Pp1bEQ8hZ97NqslS3oni`T;7Q3Cog&8pd^wYMKI~3j@k=;l_yGxZ6(t_J zHZQ?N6S3=nzj;0y<1fetpD~+)|MPbPT)WO35Laa7M2SZj9qc0GsA60U?}m){h!=8B zW;5b~Pv=8mW1k*Xj0t9S`JZgWQNFHg-$pn-2EY0Q+7_9C-p%C)a3gMU zpyxto&ag$n`4sx>s3I8OPcC=iornT9MR6wafGD`&b4n>;$e?v^996o&H z4MsIVEFj~MqOe98i>WYkp$xh^C29p>A0C)b%nE(I) diff --git a/charts/portal/charts/druid-1.0.9.tgz b/charts/portal/charts/druid-1.0.9.tgz new file mode 100644 index 0000000000000000000000000000000000000000..439652dc7ffaac075089450a82afa98e918a2ba4 GIT binary patch literal 8710 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 literal 0 HcmV?d00001 From ba2a81815df3240832e592c6b7f4ceb9086fce82 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Fri, 20 Jan 2023 09:23:49 -0500 Subject: [PATCH 04/62] bump chart version --- charts/portal/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index f7abdf5f..5a58fb99 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.1.2" description: CA API Developer Portal name: portal -version: 2.2.7 +version: 2.2.8 type: application home: https://github.com/CAAPIM/apim-charts maintainers: From dc0ac7c4240972341f53ce3cf3d3c73f15b223be Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Wed, 25 Jan 2023 11:22:37 -0500 Subject: [PATCH 05/62] new Chart.lock/tarball from newer version of helm --- charts/portal/Chart.lock | 4 ++-- charts/portal/charts/druid-1.0.9.tgz | Bin 8710 -> 8430 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 9ad58d5d..58a62775 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.0.9 -digest: sha256:2fe61485ca51763c36ea978445378b12692baa33a630f701f1c52566144afd6a -generated: "2022-06-22T13:00:43.4999218+05:30" +digest: sha256:5e3537874a26738981880d03fe38ce363e1be6109c8a5f850eef68adda5cfd3b +generated: "2023-01-25T11:21:36.948126-05:00" diff --git a/charts/portal/charts/druid-1.0.9.tgz b/charts/portal/charts/druid-1.0.9.tgz index 439652dc7ffaac075089450a82afa98e918a2ba4..7faf759d492b7c912242d2990e88fcd819cffe52 100644 GIT binary patch literal 8430 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 Q0RRC1|55&*BLFr50Dp_f#sB~S literal 8710 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 From 402c85f7b3e85740b5dd5d71b61e911e1f7d44c2 Mon Sep 17 00:00:00 2001 From: markgxchen Date: Fri, 27 Jan 2023 11:15:55 -0800 Subject: [PATCH 06/62] US857194 add README for portalData.additionalEnv.AUDIT_LOG_TRUNCATE_BATCH_SIZE and portalData.additionalEnv.AUDIT_LOG_TRUNCATE_FREQ_MIN (#189) Co-authored-by: Mark Chen --- charts/portal/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/charts/portal/README.md b/charts/portal/README.md index a02788ac..cfee7fc0 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -425,6 +425,8 @@ this feature. | Environment Variable | Description | |-----------------------------------------------------|--------------------------------------| | `portalData.additionalEnv.AUDIT_LOG_RETENTION_DAYS` | The number of days of logs to retain | +| `portalData.additionalEnv.AUDIT_LOG_TRUNCATE_BATCH_SIZE` | The max number of logs to be removed during a single interval | +| `portalData.additionalEnv.AUDIT_LOG_TRUNCATE_FREQ_MIN` | The frequency of log truncation intervals in minutes | ### RBAC Parameters From 0fa2c421a417031a153569c8a154eecdd7f7a6f6 Mon Sep 17 00:00:00 2001 From: premchandervodela <72003681+premchandervodela@users.noreply.github.com> Date: Mon, 30 Jan 2023 16:48:37 +0530 Subject: [PATCH 07/62] charts/portal: For Portal 5.2 changes (#188) * 0000000 : For Portal 5.2 changes * 0000000: For Portal 5.2 changes * 0000000: For Portal 5.2 changes * 0000000: For Portal 5.2 changes * 0000000: For Portal 5.2 changes --- charts/portal/Chart.yaml | 4 +-- charts/portal/README.md | 53 +++++++++++++++------------- charts/portal/values-production.yaml | 44 +++++++++++------------ charts/portal/values.yaml | 44 +++++++++++------------ utils/create-tenant.sh | 2 +- 5 files changed, 75 insertions(+), 72 deletions(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index f7abdf5f..9596337f 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 -appVersion: "5.1.2" +appVersion: "5.2.0" description: CA API Developer Portal name: portal -version: 2.2.7 +version: 2.3.0 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/README.md b/charts/portal/README.md index cfee7fc0..a4049986 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -4,6 +4,9 @@ The Layer7 API Developer Portal (API Portal) is part of the Layer7 API Managemen ## Introduction This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using the Helm Package Manager. +## 2.3.0 General Updates +- This new version of the chart supports API Portal 5.2. + ## 2.2.7 General Updates - This new version of the chart supports API Portal 5.1.2. @@ -45,7 +48,7 @@ This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using Solutions & Patches](https://techdocs.broadcom.com/us/product-content/recommended-reading/technical-document-index/ca-api-developer-portal-solutions-and-patches.html) page. ### Production -- A dedicated MySQL 8.0.22/8.0.26 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-1/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) +- A dedicated MySQL 8.0.22/8.0.26 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) - 3 Worker nodes with at least 4vcpu and 32GB ram - High Availability with analytics - Access to a DNS Server - Signed SSL Server Certificate @@ -91,7 +94,7 @@ To delete API Portal installation, run the following command: ## Upgrade External Portal Database to MySQL 8.0 MySQL 8.0 is supported as an external database starting from API Portal 5.0 CR-1. This section helps you understand the overall process of upgrading an existing Portal database running MySQL 5.7 to MySQL 8.0. -1) Before upgrading the Database, see **Before You Begin** and **Check Database Compatibility** in [TechDocs.](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-1/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) +1) Before upgrading the Database, see **Before You Begin** and **Check Database Compatibility** in [TechDocs.](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) 2) Persist Analytics Data into Druid Database @@ -116,7 +119,7 @@ MySQL 8.0 is supported as an external database starting from API Portal 5.0 CR-1 $ helm uninstall -n ``` -4) Upgrade MySQL 5.7 to 8.0.26. For more information, see **Perform the Upgrade** [TechDocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-1/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) +4) Upgrade MySQL 5.7 to 8.0.26. For more information, see **Perform the Upgrade** [TechDocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) 5) After MySQL is upgraded, ensure that you can connect to it and then follow the below steps to start the portal with MySQL 8.0.26. Ensure that the value of **tls.job.enabled** is set to **false** in **values.yaml** @@ -524,18 +527,18 @@ Portal Analytics ### Portal Images | Parameter | Description | Default | |-------------------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| -| `image.dispatcher` | dispatcher image | `dispatcher:5.1.2` | -| `image.pssg` | PSSG image | `pssg:5.1.2` | -| `image.apim` | APIM ingress image | `ingress:5.1.2` | -| `image.enterprise` | portal-enterprise image | `portal-enterprise:5.1.2` | -| `image.data` | portal-data image | `portal-data:5.1.2` | -| `image.tps` | tenant provisioner image | `tenant-provisioning-service:5.1.2` | -| `image.analytics` | Analytics image | `analytics-server:5.1.2` | -| `image.authenticator` | Authenticator image | `authenticator:5.1.2` | -| `image.dbUpgrade` | db upgrade image | `db-upgrade-portal:5.1.2` | -| `image.rbacUpgrade` | Analytics image, per Portal version | `db-upgrade-rbac:5.1.2` | -| `image.upgradeVerify` | Upgrade verification image | `upgrade-verify:5.1.2` | -| `image.tlsManager` | TLS manager image | `tls-automator:5.1.2` | +| `image.dispatcher` | dispatcher image | `dispatcher:5.2` | +| `image.pssg` | PSSG image | `pssg:5.2` | +| `image.apim` | APIM ingress image | `ingress:5.2` | +| `image.enterprise` | portal-enterprise image | `portal-enterprise:5.2` | +| `image.data` | portal-data image | `portal-data:5.2` | +| `image.tps` | tenant provisioner image | `tenant-provisioning-service:5.2` | +| `image.analytics` | Analytics image | `analytics-server:5.2` | +| `image.authenticator` | Authenticator image | `authenticator:5.2` | +| `image.dbUpgrade` | db upgrade image | `db-upgrade-portal:5.2` | +| `image.rbacUpgrade` | Analytics image, per Portal version | `db-upgrade-rbac:5.2` | +| `image.upgradeVerify` | Upgrade verification image | `upgrade-verify:5.2` | +| `image.tlsManager` | TLS manager image | `tls-automator:5.2` | ## Subcharts For Production, use an external MySQL Server. @@ -627,14 +630,14 @@ The following table lists the configured parameters of the Druid Subchart | Parameter | Description | Default | |-----------------------------|---------------------|--------------------------| -| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.1.2` | -| `druid.image.broker` | Broker image | `druid:5.1.2` | -| `druid.image.coordinator` | Coordinator | `druid:5.1.2` | -| `druid.image.middlemanager` | Middlemanager image | `druid:5.1.2` | -| `druid.image.minio` | Minio image | `minio:5.1.2` | -| `druid.image.historical` | Historical image | `druid:5.1.2` | -| `druid.image.kafka` | Kafka image | `kafka:5.1.2` | -| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.1.2` | +| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.2` | +| `druid.image.broker` | Broker image | `druid:5.2` | +| `druid.image.coordinator` | Coordinator | `druid:5.2` | +| `druid.image.middlemanager` | Middlemanager image | `druid:5.2` | +| `druid.image.minio` | Minio image | `minio:5.2` | +| `druid.image.historical` | Historical image | `druid:5.2` | +| `druid.image.kafka` | Kafka image | `kafka:5.2` | +| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2` | ## RabbitMQ The following table lists the configured parameters of the Bitnami RabbitMQ Subchart - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq @@ -643,7 +646,7 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | ----------------------------- | ----------------------------------- | ----------------------------------------------------------- | | `rabbitmq.enabled` | Enable this subchart | `true` | | `rabbitmq.host` | Host - must match fullnameOverride | `rabbitmq` | -| `rabbitmq.image.tag` | RabbitMQ image version | `5.1.2` | +| `rabbitmq.image.tag` | RabbitMQ image version | `5.2` | | `rabbitmq.fullnameOverride` | Overrides the name of the subchart | `rabbitmq` | | `rabbitmq.serviceAccount.create` | Enable creation of ServiceAccount for RabbitMQ | `true` | | `rabbitmq.serviceAccount.name.` | Name of the created serviceAccount | Generated using the `rabbitmq.fullname` template | @@ -839,6 +842,6 @@ $ kubectl scale statefulset -mysql --replicas= ``` ## License -Copyright (c) 2022 CA, A Broadcom Company. All rights reserved. +Copyright (c) 2023 CA, A Broadcom Company. All rights reserved. This software may be modified and distributed under the terms of the MIT license. See the [LICENSE](https://github.com/CAAPIM/apim-charts/blob/stable/LICENSE) file for details. diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 6995d436..996735b5 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -20,7 +20,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-1/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: @@ -441,18 +441,18 @@ tenantProvisioner: # topologyKey: "kubernetes.io/hostname" image: - dispatcher: dispatcher:5.1.2 - pssg: pssg:5.1.2 - apim: ingress:5.1.2 - enterprise: portal-enterprise:5.1.2 - data: portal-data:5.1.2 - tps: tenant-provisioning-service:5.1.2 - analytics: analytics-server:5.1.2 - authenticator: authenticator:5.1.2 - dbUpgrade: db-upgrade-portal:5.1.2 - rbacUpgrade: db-upgrade-rbac:5.1.2 - upgradeVerify: upgrade-verify:5.1.2 - tlsManager: tls-automator:5.1.2 + dispatcher: dispatcher:5.2 + pssg: pssg:5.2 + apim: ingress:5.2 + enterprise: portal-enterprise:5.2 + data: portal-data:5.2 + tps: tenant-provisioning-service:5.2 + analytics: analytics-server:5.2 + authenticator: authenticator:5.2 + dbUpgrade: db-upgrade-portal:5.2 + rbacUpgrade: db-upgrade-rbac:5.2 + upgradeVerify: upgrade-verify:5.2 + tlsManager: tls-automator:5.2 ## ## Subchart Configuration @@ -689,14 +689,14 @@ druid: # topologyKey: kubernetes.io/hostname image: - zookeeper: zookeeper:5.1.2 - broker: druid:5.1.2 - coordinator: druid:5.1.2 - middlemanager: druid:5.1.2 - minio: minio:5.1.2 - historical: druid:5.1.2 - kafka: kafka:5.1.2 - ingestion: ingestion-server:5.1.2 + zookeeper: zookeeper:5.2 + broker: druid:5.2 + coordinator: druid:5.2 + middlemanager: druid:5.2 + minio: minio:5.2 + historical: druid:5.2 + kafka: kafka:5.2 + ingestion: ingestion-server:5.2 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: @@ -706,7 +706,7 @@ rabbitmq: image: registry: caapim repository: message-broker - tag: "5.1.2" + tag: "5.2" pullSecrets: - broadcom-apim serviceAccount: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index fdd4df9c..7a32b228 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -20,7 +20,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-1/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: # The saas flag should be left as is unless otherwise specified by support. @@ -372,18 +372,18 @@ tenantProvisioner: # affinity: {} image: - dispatcher: dispatcher:5.1.2 - pssg: pssg:5.1.2 - apim: ingress:5.1.2 - enterprise: portal-enterprise:5.1.2 - data: portal-data:5.1.2 - tps: tenant-provisioning-service:5.1.2 - analytics: analytics-server:5.1.2 - authenticator: authenticator:5.1.2 - dbUpgrade: db-upgrade-portal:5.1.2 - rbacUpgrade: db-upgrade-rbac:5.1.2 - upgradeVerify: upgrade-verify:5.1.2 - tlsManager: tls-automator:5.1.2 + dispatcher: dispatcher:5.2 + pssg: pssg:5.2 + apim: ingress:5.2 + enterprise: portal-enterprise:5.2 + data: portal-data:5.2 + tps: tenant-provisioning-service:5.2 + analytics: analytics-server:5.2 + authenticator: authenticator:5.2 + dbUpgrade: db-upgrade-portal:5.2 + rbacUpgrade: db-upgrade-rbac:5.2 + upgradeVerify: upgrade-verify:5.2 + tlsManager: tls-automator:5.2 ## ## Subchart Configuration @@ -546,14 +546,14 @@ druid: # affinity: {} image: - zookeeper: zookeeper:5.1.2 - broker: druid:5.1.2 - coordinator: druid:5.1.2 - middlemanager: druid:5.1.2 - minio: minio:5.1.2 - historical: druid:5.1.2 - kafka: kafka:5.1.2 - ingestion: ingestion-server:5.1.2 + zookeeper: zookeeper:5.2 + broker: druid:5.2 + coordinator: druid:5.2 + middlemanager: druid:5.2 + minio: minio:5.2 + historical: druid:5.2 + kafka: kafka:5.2 + ingestion: ingestion-server:5.2 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: @@ -563,7 +563,7 @@ rabbitmq: image: registry: caapim repository: message-broker - tag: "5.1.2" + tag: "5.2" pullSecrets: - broadcom-apim serviceAccount: diff --git a/utils/create-tenant.sh b/utils/create-tenant.sh index 4399fdfd..97f89ff0 100755 --- a/utils/create-tenant.sh +++ b/utils/create-tenant.sh @@ -30,7 +30,7 @@ function print_steps() { The tenant has been added to the database. The tenant info can be found in the tenant_info file in the current directory. Please follow the rest of the instructions at TechDocs to enroll your gateway with the portal. - (https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-1-2/install-configure-and-upgrade/post-installation-tasks/enroll-a-layer7-api-gateway.html) + (https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/post-installation-tasks/enroll-a-layer7-api-gateway.html) 1. You will need to navigate to the portal at https://${tenant_id}.${domain} and create a new API PROXY. 2. Copy the enrollment URL From e275aa84f36eaccc3f7043a14ba104671d475c30 Mon Sep 17 00:00:00 2001 From: sm895441 <125248373+sm895441@users.noreply.github.com> Date: Mon, 6 Mar 2023 11:56:33 +0530 Subject: [PATCH 08/62] =?UTF-8?q?Updating=20mysql=20image=20tag=20from=208?= =?UTF-8?q?.0.26-debian-10-r78=20to=208.0.31-debian-1=E2=80=A6=20(#195)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Updating mysql image tag from 8.0.26-debian-10-r78 to 8.0.31-debian-10-r78 * US840140: Adding ip/range property PROBE_IP_RANGE to support CIDR in dispatcher additionalEnv --- charts/portal/Chart.lock | 6 +++--- charts/portal/Chart.yaml | 2 +- charts/portal/README.md | 7 ++++--- charts/portal/charts/mysql-8.8.16.tgz | Bin 39117 -> 0 bytes charts/portal/charts/mysql-9.4.7.tgz | Bin 0 -> 45774 bytes charts/portal/values-production.yaml | 4 +++- charts/portal/values.yaml | 4 +++- 7 files changed, 14 insertions(+), 9 deletions(-) delete mode 100644 charts/portal/charts/mysql-8.8.16.tgz create mode 100644 charts/portal/charts/mysql-9.4.7.tgz diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 58a62775..55adde84 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -4,12 +4,12 @@ dependencies: version: 1.0.9 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami - version: 8.8.16 + version: 9.4.7 - name: rabbitmq repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 7.6.6 - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.0.9 -digest: sha256:5e3537874a26738981880d03fe38ce363e1be6109c8a5f850eef68adda5cfd3b -generated: "2023-01-25T11:21:36.948126-05:00" +digest: sha256:45840f3eec375256b9a5290a11fd3346176a9e497ce9993d27a9813624a5800b +generated: "2023-02-19T23:42:54.3933573+05:30" diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index 4891730f..b1fdb145 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -16,7 +16,7 @@ dependencies: condition: portal.analytics.enabled repository: "file://../druid" - name: mysql - version: 8.8.16 + version: 9.4.7 repository: "https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami" condition: global.setupDemoDatabase - name: rabbitmq diff --git a/charts/portal/README.md b/charts/portal/README.md index a4049986..933b3643 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -30,7 +30,7 @@ This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using - Depending on the platform and the Ingress setup in your environment, configure 'ingress.class.name' and 'ingress-nginx.ingressClassResource' in values.yaml accordingly, by following Ingress-nginx's [community documentation](https://kubernetes.github.io/ingress-nginx/#getting-started). - If you are not using the subchart use 'kubernetes.io/ingress.class' annotation to support backward compatibility. - [Learn more about configuring multiple ingress controllers in one cluster.](https://kubernetes.github.io/ingress-nginx/user-guide/multiple-ingress) -- The Demo database that is based on Bitnami MySQL subchart version is updated to 8.8.16. +- The Demo database that is based on Bitnami MySQL subchart version is updated to 9.4.7. - Upgrade jobs are moved to pre-install and pre-upgrade stage. This eliminates manual deletion of jobs in future upgrades after API Portal 5.1.The overall bootup time remains the same as previous version upgrades, even though you may observe that the helm install takes additional time to show completion. - API Portal 5.1 no longer requires Solr component that is used to provide auto-suggest search history from the Portal dashboard. All the references to Solr are removed. - You can now configure existing imagePullSecrets or external registries to pull the images. Refer portal.useExistingPullSecret, portal.imagePullSecret in values.yaml @@ -48,7 +48,7 @@ This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using Solutions & Patches](https://techdocs.broadcom.com/us/product-content/recommended-reading/technical-document-index/ca-api-developer-portal-solutions-and-patches.html) page. ### Production -- A dedicated MySQL 8.0.22/8.0.26 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) +- A dedicated MySQL 8.0.22/8.0.26/8.0.31 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) - 3 Worker nodes with at least 4vcpu and 32GB ram - High Availability with analytics - Access to a DNS Server - Signed SSL Server Certificate @@ -294,6 +294,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `dispatcher.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `dispatcher.readinessProbe` | Readiness Probe for Dispatcher | `{} evaluated as a template`
`If not specfied, http get request on nginx status gets checked ` | | `dispatcher.livenessProbe` | Liveness Probe for Dispatcher | `{} evaluated as a template`
`If not specfied, http get request on nginx status gets checked ` | +| `dispatcher.additionalEnv.PROBE_IP_RANGE` | IP address range in CIDR notation to whitelist readiness and liveness probes for Dispatcher | `not set` | | `dispatcher.additionalLabels` | A list of custom key: value labels | `not set` | | `dispatcher.additionalEnv.CONFIG_HTTPS_TLS` | Enabled HTTPS TLS Versions | `If not specfied, Portal TLS defaults are enabled` see [Portal TLS Defaults](#portal-tls-defaults) | | `dispatcher.additionalEnv.CONFIG_HTTPS_CIPHER_SUITE` | Enabled HTTPS Cipher Suites | `If not specfied, Portal Cipher Suites defaults are enabled` see [Portal Cipher Suites Defaults](#portal-cipher-suites-defaults) | @@ -676,7 +677,7 @@ The following table lists the configured parameters of the MySQL Subchart - http | Parameter | Description | Default | | ----------------------------- | ----------------------------------- | ----------------------------------------------------------- | -| `mysql.image.tag` | MySQL Image to use | `8.0.26-debian-10-r78` | +| `mysql.image.tag` | MySQL Image to use | `8.0.31-debian-11-r36` | | `mysql.auth.username` | MySQL Username | `admin` | | `mysql.auth.existingSecret` | Secret where credentials are stored, see global.databaseSecret | `database-secret` | | `mysql.initdbScripts` | Dictionary of initdb scripts | `see values.yaml` | diff --git a/charts/portal/charts/mysql-8.8.16.tgz b/charts/portal/charts/mysql-8.8.16.tgz deleted file mode 100644 index 9bb2a92c441241d4cb099046b21019c84d236b26..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 39117 zcmV)iK%&1NiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMYgciT9UC^~=ZQ{c*dH+G&WS$2N(=-%G5?l|3(Go8e1ySsO9 zrjG@Ykc0_EZ~)MbI>|flYrL=bKFK@yMFJ#9QI_N=-RACeED|VG0fj=LP=%T=*uUcb ziy5T6w}A8bFI#wyj*gC=J$WMkJvurn|2r5w8~kPPWbpLK^OI*!pAG(UG&nwaI`|7X z+6FS^Cu1DazZ|XIR++f3-IOLclY}f%Hgd9x?T@1k)cABLf+)iz8G@VR z4ouVh=eND1-tqHJgi@45C=hGV@k z<_VnRUP$JB{dWfd4yO{C0O)r?4(rA=J?MStedt7pg%qb;zLHD~H~}F=kRt%W-|%!6 zF95uOIELdGf!B-6|NIGramF~Jof#2$8kDA(&$6+NipH|fDMI}@6m{}Xa^7@sC>k~p zY-%85h_gQ9FnrHc={}xM)n9>p9ULDYeKVn*GLq3y4P-;tn30J{ z_#V-~ploW$-?FKjf?2-p4W4zrG{ZkU&ST5}n1t`Q(Z&+_e{^zkQjz~B&mZLfeLS0% z-IjnJ9Q6jB2u~5?L%?S6`02CZlV|Ygc<}A`crqS8IUa=HK9AsE2ZLwNqVVbQ$x(EI z!f&5K_&oad_&AzO2GNt}e|
  • tr(d_GIt`J?~6Wf+*xD8iMZe(eWS{41(jQS4Yo= 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

    jCtYki2^!6#I22qw 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 diff --git a/charts/portal/charts/mysql-9.4.7.tgz b/charts/portal/charts/mysql-9.4.7.tgz new file mode 100644 index 0000000000000000000000000000000000000000..716e485eb754a91b43f8253d032d14a92bdbecfd GIT binary patch literal 45774 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 # key1: value # Additional Secret variables to be added to the Dispatcher Secret @@ -815,7 +817,7 @@ jobs: # MySQL Stable Chart values - https://github.com/bitnami/charts/tree/master/bitnami/mysql mysql: image: - tag: "8.0.26-debian-10-r78" + tag: "8.0.31-debian-11-r36" auth: username: portal existingSecret: database-secret diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 7a32b228..cef9cdac 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -276,6 +276,8 @@ dispatcher: # Additional Environment variables to be added to the Dispatcher Configmap additionalEnv: +## Add whitelist IP Range for Dispatcher +# PROBE_IP_RANGE: # key1: value # Additional Secret variables to be added to the Dispatcher Secret @@ -660,7 +662,7 @@ jobs: # MySQL Stable Chart values - https://github.com/bitnami/charts/tree/master/bitnami/mysql mysql: image: - tag: "8.0.26-debian-10-r78" + tag: "8.0.31-debian-11-r36" auth: username: portal existingSecret: database-secret From 0261cbd7cf2223df474ddc68d25ab8840afc7547 Mon Sep 17 00:00:00 2001 From: Ilya Melnikov <70610034+melil02@users.noreply.github.com> Date: Tue, 9 May 2023 09:40:13 -0700 Subject: [PATCH 09/62] [charts/portal] Rabbit upgrade (#210) * Update rabbitmq-load-definition-secret.yaml * added vhosts declaration * Update Chart.yaml --- charts/portal/Chart.yaml | 2 +- .../rabbitmq/rabbitmq-load-definition-secret.yaml | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index b1fdb145..f3c43f4a 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.2.0" description: CA API Developer Portal name: portal -version: 2.2.11 +version: 2.2.12 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/templates/rabbitmq/rabbitmq-load-definition-secret.yaml b/charts/portal/templates/rabbitmq/rabbitmq-load-definition-secret.yaml index b35920ea..5e213ad4 100644 --- a/charts/portal/templates/rabbitmq/rabbitmq-load-definition-secret.yaml +++ b/charts/portal/templates/rabbitmq/rabbitmq-load-definition-secret.yaml @@ -11,6 +11,11 @@ type: Opaque stringData: load_definition.json: | { + "vhosts":[ + { + "name": "/" + } + ], "policies": [ { "vhost": "/", @@ -41,4 +46,4 @@ stringData: "arguments": {} } ] - } \ No newline at end of file + } From 80f995ecf9a0cd770085d6f5d0f586f35724610f Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Mon, 15 May 2023 11:38:29 -0400 Subject: [PATCH 10/62] bring over portal/druid changes from previous PR --- charts/druid/Chart.yaml | 2 +- charts/druid/templates/broker/broker-pdb.yaml | 18 +++++ .../coordinator/coordinator-pdb.yaml | 18 +++++ .../templates/historical/historical-pdb.yaml | 18 +++++ .../templates/ingestion/ingestion-pdb.yaml | 18 +++++ charts/druid/templates/kafka/kafka-pdb.yaml | 18 +++++ .../middlemanager/middlemanager-pdb.yaml | 18 +++++ charts/druid/templates/minio/minio-pdb.yaml | 15 ++++ .../templates/zookeeper/zookeeper-pdb.yaml | 18 +++++ charts/druid/values.yaml | 18 ++--- charts/portal/Chart.yaml | 2 +- charts/portal/README.md | 55 ++++++++++++++- .../analytics-server/analytics-pdb.yaml | 18 +++++ charts/portal/templates/apim/apim-pdb.yaml | 18 +++++ .../authenticator/authenticator-pdb.yaml | 18 +++++ .../templates/dispatcher/dispatcher-pdb.yaml | 18 +++++ .../portal-data/portal-data-pdb.yaml | 18 +++++ .../portal-enterprise-pdb.yaml | 18 +++++ charts/portal/templates/pssg/pssg-pdb.yaml | 18 +++++ .../tenant-provisioner-pdb.yaml | 18 +++++ charts/portal/values-production.yaml | 70 +++++++++++++++++++ charts/portal/values.yaml | 70 +++++++++++++++++++ 22 files changed, 490 insertions(+), 12 deletions(-) create mode 100644 charts/druid/templates/broker/broker-pdb.yaml create mode 100644 charts/druid/templates/coordinator/coordinator-pdb.yaml create mode 100644 charts/druid/templates/historical/historical-pdb.yaml create mode 100644 charts/druid/templates/ingestion/ingestion-pdb.yaml create mode 100644 charts/druid/templates/kafka/kafka-pdb.yaml create mode 100644 charts/druid/templates/middlemanager/middlemanager-pdb.yaml create mode 100644 charts/druid/templates/minio/minio-pdb.yaml create mode 100644 charts/druid/templates/zookeeper/zookeeper-pdb.yaml create mode 100644 charts/portal/templates/analytics-server/analytics-pdb.yaml create mode 100644 charts/portal/templates/apim/apim-pdb.yaml create mode 100644 charts/portal/templates/authenticator/authenticator-pdb.yaml create mode 100644 charts/portal/templates/dispatcher/dispatcher-pdb.yaml create mode 100644 charts/portal/templates/portal-data/portal-data-pdb.yaml create mode 100644 charts/portal/templates/portal-enterprise/portal-enterprise-pdb.yaml create mode 100644 charts/portal/templates/pssg/pssg-pdb.yaml create mode 100644 charts/portal/templates/tenant-provisioner/tenant-provisioner-pdb.yaml diff --git a/charts/druid/Chart.yaml b/charts/druid/Chart.yaml index 312aed5e..cdf93428 100644 --- a/charts/druid/Chart.yaml +++ b/charts/druid/Chart.yaml @@ -7,5 +7,5 @@ maintainers: - name: Gazza7205 sources: - https://github.com/CAAPIM/apim-charts -version: 1.0.9 +version: 1.0.10 appVersion: 0.17.0 diff --git a/charts/druid/templates/broker/broker-pdb.yaml b/charts/druid/templates/broker/broker-pdb.yaml new file mode 100644 index 00000000..3008ac0b --- /dev/null +++ b/charts/druid/templates/broker/broker-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.broker.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: broker + name: broker-pdb +spec: + {{- if .Values.broker.pdb.minAvailable }} + minAvailable: {{ .Values.broker.pdb.minAvailable }} + {{- end }} + {{- if .Values.broker.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.broker.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: broker +{{ end }} diff --git a/charts/druid/templates/coordinator/coordinator-pdb.yaml b/charts/druid/templates/coordinator/coordinator-pdb.yaml new file mode 100644 index 00000000..950d4f1a --- /dev/null +++ b/charts/druid/templates/coordinator/coordinator-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.coordinator.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: coordinator + name: coordinator-pdb +spec: + {{- if .Values.coordinator.pdb.minAvailable }} + minAvailable: {{ .Values.coordinator.pdb.minAvailable }} + {{- end }} + {{- if .Values.coordinator.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.coordinator.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: coordinator +{{ end }} diff --git a/charts/druid/templates/historical/historical-pdb.yaml b/charts/druid/templates/historical/historical-pdb.yaml new file mode 100644 index 00000000..2c1bd883 --- /dev/null +++ b/charts/druid/templates/historical/historical-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.historical.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: historical + name: historical-pdb +spec: + {{- if .Values.historical.pdb.minAvailable }} + minAvailable: {{ .Values.historical.pdb.minAvailable }} + {{- end }} + {{- if .Values.historical.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.historical.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: historical +{{ end }} diff --git a/charts/druid/templates/ingestion/ingestion-pdb.yaml b/charts/druid/templates/ingestion/ingestion-pdb.yaml new file mode 100644 index 00000000..c4c2d41a --- /dev/null +++ b/charts/druid/templates/ingestion/ingestion-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.ingestion.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: ingestion + name: ingestion-pdb +spec: + {{- if .Values.ingestion.pdb.minAvailable }} + minAvailable: {{ .Values.ingestion.pdb.minAvailable }} + {{- end }} + {{- if .Values.ingestion.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.ingestion.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: ingestion +{{ end }} diff --git a/charts/druid/templates/kafka/kafka-pdb.yaml b/charts/druid/templates/kafka/kafka-pdb.yaml new file mode 100644 index 00000000..b4a2b630 --- /dev/null +++ b/charts/druid/templates/kafka/kafka-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.kafka.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: kafka + name: kafka-pdb +spec: + {{- if .Values.kafka.pdb.minAvailable }} + minAvailable: {{ .Values.kafka.pdb.minAvailable }} + {{- end }} + {{- if .Values.kafka.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.kafka.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: kafka +{{ end }} diff --git a/charts/druid/templates/middlemanager/middlemanager-pdb.yaml b/charts/druid/templates/middlemanager/middlemanager-pdb.yaml new file mode 100644 index 00000000..12e3fad7 --- /dev/null +++ b/charts/druid/templates/middlemanager/middlemanager-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.middlemanager.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: middlemanager + name: middlemanager-pdb +spec: + {{- if .Values.middlemanager.pdb.minAvailable }} + minAvailable: {{ .Values.middlemanager.pdb.minAvailable }} + {{- end }} + {{- if .Values.middlemanager.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.middlemanager.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: middlemanager +{{ end }} diff --git a/charts/druid/templates/minio/minio-pdb.yaml b/charts/druid/templates/minio/minio-pdb.yaml new file mode 100644 index 00000000..bd47987f --- /dev/null +++ b/charts/druid/templates/minio/minio-pdb.yaml @@ -0,0 +1,15 @@ +{{ if .Values.minio.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: minio + name: minio-pdb +spec: + {{- if .Values.minio.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.minio.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: minio +{{ end }} diff --git a/charts/druid/templates/zookeeper/zookeeper-pdb.yaml b/charts/druid/templates/zookeeper/zookeeper-pdb.yaml new file mode 100644 index 00000000..05427117 --- /dev/null +++ b/charts/druid/templates/zookeeper/zookeeper-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.zookeeper.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: zookeeper + name: zookeeper-pdb +spec: + {{- if .Values.zookeeper.pdb.minAvailable }} + minAvailable: {{ .Values.zookeeper.pdb.minAvailable }} + {{- end }} + {{- if .Values.zookeeper.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.zookeeper.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: zookeeper +{{ end }} diff --git a/charts/druid/values.yaml b/charts/druid/values.yaml index e357a401..77e1e015 100644 --- a/charts/druid/values.yaml +++ b/charts/druid/values.yaml @@ -78,7 +78,7 @@ minio: # memory: 256Mi # nodeSelector: {} # affinity: - + zookeeper: hostname: zookeeper @@ -131,7 +131,7 @@ coordinator: image: pullPolicy: IfNotPresent resources: - requests: {} + requests: {} # memory: 512Mi limits: {} # memory: 512Mi @@ -151,31 +151,31 @@ historical: # nodeSelector: {} # affinity: -kafka: +ingestion: replicaCount: 1 image: pullPolicy: IfNotPresent + config: + partitionCount: 1 + portName: ingestion-server resources: requests: {} # cpu: 100m - # memory: 750Mi + # memory: 512Mi limits: {} # cpu: 1000m # memory: 1.5Gi # nodeSelector: {} # affinity: -ingestion: +kafka: replicaCount: 1 image: pullPolicy: IfNotPresent - config: - partitionCount: 1 - portName: ingestion-server resources: requests: {} # cpu: 100m - # memory: 512Mi + # memory: 750Mi limits: {} # cpu: 1000m # memory: 1.5Gi diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index b1fdb145..d175a262 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.2.0" description: CA API Developer Portal name: portal -version: 2.2.11 +version: 2.2.13 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/README.md b/charts/portal/README.md index 933b3643..36f6f120 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -246,6 +246,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `analytics.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | | `analytics.replicaCount` | Number of analytics nodes | `1` | | `analytics.image.pullPolicy` | Analytics image pull policy | `IfNotPresent` | +| `analytics.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `analytics.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `analytics.pdb.minAvailable` | Minimum number of available pods | `not set` | | `analytics.strategy` | Update strategy | `{} evaluated as a template` | | `analytics.resources` | Resource request/limits | `{} evaluated as a template` | | `analytics.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -256,6 +259,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `apim.replicaCount` | Number of APIM nodes | `1` | | `apim.image.pullPolicy` | APIM image pull policy | `IfNotPresent` | | `apim.otkDb.name` | APIM OTK Database name | `otk_db` | +| `apim.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `apim.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `apim.pdb.minAvailable` | Minimum number of available pods | `not set` | | `apim.strategy` | Update strategy | `{} evaluated as a template` | | `apim.resources` | Resource request/limits | `{} evaluated as a template` | | `apim.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -278,6 +284,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `authenticator.replicaCount` | Number of authenticator nodes | `1` | | `authenticator.javaOptions` | Java Options to pass in | `-Xms1g -Xmx1g` | | `authenticator.image.pullPolicy` | authenticator image pull policy | `IfNotPresent` | +| `authenticator.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `authenticator.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `authenticator.pdb.minAvailable` | Minimum number of available pods | `not set` | | `authenticator.strategy` | Update strategy | `{} evaluated as a template` | | `authenticator.resources` | Resource request/limits | `{} evaluated as a template` | | `authenticator.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -285,8 +294,11 @@ This section describes configurable parameters in **values.yaml**, there is also | `authenticator.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `authenticator.additionalLabels` | A list of custom key: value labels | `not set` | | `dispatcher.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | -| `dispatcher.replicaCount` | Number of dispatcher nodes | `1` | +| `dispatcher.replicaCount` | Number of dispatcher nodes | `` | | `dispatcher.image.pullPolicy` | Dispatcher image pull policy | `IfNotPresent` | +| `dispatcher.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `dispatcher.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `dispatcher.pdb.minAvailable` | Minimum number of available pods | `not set` | | `dispatcher.strategy` | Update strategy | `{} evaluated as a template` | | `dispatcher.resources` | Resource request/limits | `{} evaluated as a template` | | `dispatcher.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -303,6 +315,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `portalData.replicaCount` | Number of portal data nodes | `1` | | `portalData.javaOptions` | Java Options to pass in | `-Xms2g -Xmx2g` | | `portalData.image.pullPolicy` | Portal-data image pull policy | `IfNotPresent` | +| `portalData.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `portalData.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `portalData.pdb.minAvailable` | Minimum number of available pods | `not set` | | `portalData.strategy` | Update strategy | `{} evaluated as a template` | | `portalData.resources` | Resource request/limits | `{} evaluated as a template` | | `portalData.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -313,6 +328,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `portalEnterprise.replicaCount` | Number of portal-enterprise nodes | `1` | | `portalEnterprise.javaOptions` | Java Options to pass in | `-Xms2g -Xmx2g` | | `portalEnterprise.image.pullPolicy` | Portal enterprise image pull policy | `IfNotPresent` | +| `portalEnterprise.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `portalEnterprise.pdb.maxUnavailable`| Maximum number of simultaneous unavailable pods | `not set` | +| `portalEnterprise.pdb.minAvailable` | Minimum number of available pods | `not set` | | `portalEnterprise.strategy` | Update strategy | `{} evaluated as a template` | | `portalEnterprise.resources` | Resource request/limits | `{} evaluated as a template` | | `portalEnterprise.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -322,6 +340,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `pssg.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | | `pssg.replicaCount` | Number of PSSG nodes | `1` | | `pssg.image.pullPolicy` | PSSG image pull policy | `IfNotPresent` | +| `pssg.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `pssg.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `pssg.pdb.minAvailable` | Minimum number of available pods | `not set` | | `pssg.strategy` | Update strategy | `{} evaluated as a template` | | `pssg.resources` | Resource request/limits | `{} evaluated as a template` | | `pssg.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -342,6 +363,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `tenantProvisioner.replicaCount` | Number of tenant provisioner nodes | `1` | | `tenantProvisioner.javaOptions` | Java Options to pass in | `-Xms512m -Xmx512m` | | `tenantProvisioner.image.pullPolicy` | Tenant provisioner image pull policy | `IfNotPresent` | +| `tenantProvisioner.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `tenantProvisioner.pdb.maxUnavailable`| Maximum number of simultaneous unavailable pods | `not set` | +| `tenantProvisioner.pdb.minAvailable` | Minimum number of available pods | `not set` | | `tenantProvisioner.strategy` | Update strategy | `{} evaluated as a template` | | `tenantProvisioner.resources` | Resource request/limits | `{} evaluated as a template` | | `tenantProvisioner.nodeSelector ` | Node labels for pod assignment | `{} evaluated as a template` | @@ -556,6 +580,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.persistence.storage.minio` | Minio PVC Size | `40Gi` | | `druid.persistence.storage.kafka` | Kafka PVC Size | `10Gi` | | `druid.persistence.storage.zookeeper` | Zookeeper PVC Size | `10Gi` | +| `druid.minio.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.minio.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.minio.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.minio.replicaCount` | Number of minio nodes. Minio replication count cannot be changed after Portal is installed. | `1` | | `druid.minio.image.pullPolicy`| Minio image pull policy | `IfNotPresent` | | `druid.minio.auth.secretName` | The name of the secret that stores Minio Credentials | `true` | @@ -576,6 +603,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.minio.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.minio.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.minio.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.zookeeper.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.zookeeper.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.zookeeper.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.zookeeper.replicaCount` | Number of zookeeper nodes. It should maintain a quorum. Preferred for HA is 3 or odd counts. | `1` | | `druid.zookeeper.image.pullPolicy` | Zookeeper image pull policy | `IfNotPresent` | | `druid.zookeeper.resources` | Resource request/limits | `{} evaluated as a template` | @@ -583,6 +613,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.zookeeper.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.zookeeper.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.zookeeper.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.coordinator.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.coordinator.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.coordinator.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.coordinator.replicaCount` | Number of coordinator nodes | `1` | | `druid.coordinator.image.pullPolicy` | Coordinator image pull policy | `IfNotPresent` | | `druid.coordinator.resources` | Resource request/limits | `{} evaluated as a template` | @@ -590,6 +623,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.coodinator.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.coordinator.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.coordinator.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.kafka.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.kafka.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.kafka.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.kafka.replicaCount` | Number of kafka nodes | `1` | | `druid.kafka.image.pullPolicy` | Kafka image pull policy | `IfNotPresent` | | `druid.kafka.resources` | Resource request/limits | `{} evaluated as a template` | @@ -597,6 +633,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.kafka.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.kafka.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.kafka.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.broker.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.broker.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.broker.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.broker.replicaCount` | Number of broker nodes | `1` | | `druid.broker.image.pullPolicy` | Broker image pull policy | `IfNotPresent` | | `druid.broker.resources` | Resource request/limits | `{} evaluated as a template` | @@ -604,6 +643,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.broker.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.broker.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.broker.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.historical.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.historical.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.historical.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.historical.replicaCount` | Number of historical nodes | `1` | | `druid.historical.image.pullPolicy` | Historical image pull policy | `IfNotPresent` | | `druid.historical.resources` | Resource request/limits | `{} evaluated as a template` | @@ -611,6 +653,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.historical.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.historical.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.historical.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.ingestion.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.ingestion.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.ingestion.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.ingestion.replicaCount` | Number of ingestion nodes | `1` | | `druid.ingestion.image.pullPolicy` | Ingestion image pull policy | `IfNotPresent` | | `druid.ingestion.resources` | Resource request/limits | `{} evaluated as a template` | @@ -618,6 +663,9 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.ingestion.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.ingestion.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.ingestion.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.middlemanager.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `druid.middlemanager.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `druid.middlemanager.pdb.minAvailable` | Minimum number of available pods | `not set` | | `druid.middlemanager.replicaCount` | Number of middle manager nodes | `1` | | `druid.middlemanager.image.pullPolicy` | Middle manager image pull policy | `IfNotPresent` | | `druid.middlemanager.resources` | Resource request/limits | `{} evaluated as a template` | @@ -649,6 +697,10 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | `rabbitmq.host` | Host - must match fullnameOverride | `rabbitmq` | | `rabbitmq.image.tag` | RabbitMQ image version | `5.2` | | `rabbitmq.fullnameOverride` | Overrides the name of the subchart | `rabbitmq` | +| `rabbitmq.image.tag` | RabbitMQ image version | `5.2` | +| `rabbitmq.pdb.create` | Create PodDisruptionBudget (PDB) Object | `false` | +| `rabbitmq.pdb.maxUnavailable | Maximum number of simultaneous unavailable pods | `not set` | +| `rabbitmq.pdb.minAvailable | Minimum number of available pods | `not set` | | `rabbitmq.serviceAccount.create` | Enable creation of ServiceAccount for RabbitMQ | `true` | | `rabbitmq.serviceAccount.name.` | Name of the created serviceAccount | Generated using the `rabbitmq.fullname` template | | `rabbitmq.rbac.create` | Create and use RBAC resources | `true` | @@ -682,6 +734,7 @@ The following table lists the configured parameters of the MySQL Subchart - http | `mysql.auth.existingSecret` | Secret where credentials are stored, see global.databaseSecret | `database-secret` | | `mysql.initdbScripts` | Dictionary of initdb scripts | `see values.yaml` | | `mysql.primary.configuration` | MySQL Primary configuration to be injected as ConfigMap | `see values.yaml` | +| `mysql.primary.pdb.enabled` | Create PodDisruptionBudget (PDB) object | `false` | ## Ingress-Nginx diff --git a/charts/portal/templates/analytics-server/analytics-pdb.yaml b/charts/portal/templates/analytics-server/analytics-pdb.yaml new file mode 100644 index 00000000..abb8e90a --- /dev/null +++ b/charts/portal/templates/analytics-server/analytics-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.analytics.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: analytics-server + name: analytics-pdb +spec: + {{- if .Values.analytics.pdb.minAvailable }} + minAvailable: {{ .Values.analytics.pdb.minAvailable }} + {{- end }} + {{- if .Values.analytics.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.analytics.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: analytics-server +{{ end }} diff --git a/charts/portal/templates/apim/apim-pdb.yaml b/charts/portal/templates/apim/apim-pdb.yaml new file mode 100644 index 00000000..2b82b79a --- /dev/null +++ b/charts/portal/templates/apim/apim-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.apim.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: apim + name: apim-pdb +spec: + {{- if .Values.apim.pdb.minAvailable }} + minAvailable: {{ .Values.apim.pdb.minAvailable }} + {{- end }} + {{- if .Values.apim.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.apim.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: apim +{{ end }} diff --git a/charts/portal/templates/authenticator/authenticator-pdb.yaml b/charts/portal/templates/authenticator/authenticator-pdb.yaml new file mode 100644 index 00000000..7245af02 --- /dev/null +++ b/charts/portal/templates/authenticator/authenticator-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.authenticator.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: authenticator + name: authenticator-pdb +spec: + {{- if .Values.authenticator.pdb.minAvailable }} + minAvailable: {{ .Values.authenticator.pdb.minAvailable }} + {{- end }} + {{- if .Values.authenticator.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.authenticator.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: authenticator +{{ end }} diff --git a/charts/portal/templates/dispatcher/dispatcher-pdb.yaml b/charts/portal/templates/dispatcher/dispatcher-pdb.yaml new file mode 100644 index 00000000..0d8545a9 --- /dev/null +++ b/charts/portal/templates/dispatcher/dispatcher-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.dispatcher.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: dispatcher + name: dispatcher-pdb +spec: + {{- if .Values.dispatcher.pdb.minAvailable }} + minAvailable: {{ .Values.dispatcher.pdb.minAvailable }} + {{- end }} + {{- if .Values.dispatcher.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.dispatcher.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: dispatcher +{{ end }} diff --git a/charts/portal/templates/portal-data/portal-data-pdb.yaml b/charts/portal/templates/portal-data/portal-data-pdb.yaml new file mode 100644 index 00000000..f199cf0f --- /dev/null +++ b/charts/portal/templates/portal-data/portal-data-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.portalData.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: portal-data + name: portal-data-pdb +spec: + {{- if .Values.portalData.pdb.minAvailable }} + minAvailable: {{ .Values.portalData.pdb.minAvailable }} + {{- end }} + {{- if .Values.portalData.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.portalData.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: portal-data +{{ end }} diff --git a/charts/portal/templates/portal-enterprise/portal-enterprise-pdb.yaml b/charts/portal/templates/portal-enterprise/portal-enterprise-pdb.yaml new file mode 100644 index 00000000..6132c663 --- /dev/null +++ b/charts/portal/templates/portal-enterprise/portal-enterprise-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.portalEnterprise.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: portal-enterprise + name: portal-enterprise-pdb +spec: + {{- if .Values.portalEnterprise.pdb.minAvailable }} + minAvailable: {{ .Values.portalEnterprise.pdb.minAvailable }} + {{- end }} + {{- if .Values.portalEnterprise.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.portalEnterprise.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: portal-enterprise +{{ end }} diff --git a/charts/portal/templates/pssg/pssg-pdb.yaml b/charts/portal/templates/pssg/pssg-pdb.yaml new file mode 100644 index 00000000..0189d302 --- /dev/null +++ b/charts/portal/templates/pssg/pssg-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.pssg.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: pssg + name: pssg-pdb +spec: + {{- if .Values.pssg.pdb.minAvailable }} + minAvailable: {{ .Values.pssg.pdb.minAvailable }} + {{- end }} + {{- if .Values.pssg.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.pssg.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: pssg +{{ end }} diff --git a/charts/portal/templates/tenant-provisioner/tenant-provisioner-pdb.yaml b/charts/portal/templates/tenant-provisioner/tenant-provisioner-pdb.yaml new file mode 100644 index 00000000..87459a1f --- /dev/null +++ b/charts/portal/templates/tenant-provisioner/tenant-provisioner-pdb.yaml @@ -0,0 +1,18 @@ +{{ if .Values.tenantProvisioner.pdb.create }} +apiVersion: policy/v1 +kind: PodDisruptionBudget +metadata: + labels: + app: tenant-provisioner + name: tenant-provisioner-pdb +spec: + {{- if .Values.tenantProvisioner.pdb.minAvailable }} + minAvailable: {{ .Values.tenantProvisioner.pdb.minAvailable }} + {{- end }} + {{- if .Values.tenantProvisioner.pdb.maxUnavailable }} + maxUnavailable: {{ .Values.tenantProvisioner.pdb.maxUnavailable }} + {{- end }} + selector: + matchLabels: + app: tenant-provisioner +{{ end }} diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 87644460..a03d42bd 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -169,6 +169,10 @@ analytics: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -201,6 +205,10 @@ apim: pullPolicy: IfNotPresent otkDb: name: otk_db + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -233,6 +241,10 @@ authenticator: javaOptions: -Xms1g -Xmx1g image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -263,6 +275,10 @@ dispatcher: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -323,6 +339,10 @@ portalData: javaOptions: -Xms2g -Xmx2g image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -355,6 +375,10 @@ portalEnterprise: javaOptions: -Xms2g -Xmx2g image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -385,6 +409,10 @@ pssg: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 strategy: type: RollingUpdate rollingUpdate: @@ -417,6 +445,10 @@ tenantProvisioner: javaOptions: -Xms512m -Xmx512m image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -481,6 +513,10 @@ druid: replicaCount: 4 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 4 auth: secretName: minio-secret # Leave access_key and secret_key empty to auto-generate values. @@ -534,6 +570,10 @@ druid: replicaCount: 3 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 3 resources: limits: memory: 256Mi @@ -557,6 +597,10 @@ druid: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 resources: limits: memory: 512Mi @@ -579,6 +623,10 @@ druid: replicaCount: 3 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 3 resources: requests: cpu: 100m @@ -603,6 +651,10 @@ druid: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 resources: requests: memory: 1Gi @@ -625,6 +677,10 @@ druid: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 resources: requests: memory: 2Gi @@ -647,6 +703,10 @@ druid: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 portName: ingestion-svc resources: requests: @@ -672,6 +732,10 @@ druid: replicaCount: 2 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 2 resources: requests: memory: 4Gi @@ -711,6 +775,10 @@ rabbitmq: tag: "5.2" pullSecrets: - broadcom-apim + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 serviceAccount: create: true # name: @@ -862,6 +930,8 @@ mysql: port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid + pdb: + enabled: false persistence: annotations: helm.sh/hook: pre-install diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index cef9cdac..1ee8cd0b 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -171,6 +171,10 @@ analytics: replicaCount: 1 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -194,6 +198,10 @@ apim: pullPolicy: IfNotPresent otkDb: name: otk_db + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -217,6 +225,10 @@ authenticator: javaOptions: -Xms1g -Xmx1g image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -239,6 +251,10 @@ dispatcher: replicaCount: 1 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -290,6 +306,10 @@ portalData: javaOptions: -Xms2g -Xmx2g image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -313,6 +333,10 @@ portalEnterprise: javaOptions: -Xms2g -Xmx2g image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -334,6 +358,10 @@ pssg: replicaCount: 1 image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -357,6 +385,10 @@ tenantProvisioner: javaOptions: -Xms512m -Xmx512m image: pullPolicy: IfNotPresent + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 strategy: type: RollingUpdate rollingUpdate: @@ -407,6 +439,10 @@ druid: zookeeper: 10Gi minio: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 # consider changing to mode... standalone/distributed. # Once Portal is installed, minio can not be scaled up or down. replicaCount: 1 @@ -452,6 +488,10 @@ druid: # affinity: {} zookeeper: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -465,6 +505,10 @@ druid: # affinity: {} coordinator: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -478,6 +522,10 @@ druid: # affinity: {} kafka: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -493,6 +541,10 @@ druid: # affinity: {} broker: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -506,6 +558,10 @@ druid: # affinity: {} historical: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -519,6 +575,10 @@ druid: # affinity: {} ingestion: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -535,6 +595,10 @@ druid: # affinity: {} middlemanager: + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 replicaCount: 1 image: pullPolicy: IfNotPresent @@ -568,6 +632,10 @@ rabbitmq: tag: "5.2" pullSecrets: - broadcom-apim + pdb: + create: false + maxUnavailable: "" + minAvailable: 1 serviceAccount: create: true # name: @@ -707,6 +775,8 @@ mysql: port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid + pdb: + enabled: false persistence: annotations: helm.sh/hook: pre-install From 509b648ca0fe1c3789a3cd91d0d7a69cd4173eee Mon Sep 17 00:00:00 2001 From: markgxchen Date: Wed, 24 May 2023 13:46:42 -0700 Subject: [PATCH 11/62] US880884 dispatcher portal health check enhancement (#217) Co-authored-by: MarkChen --- charts/portal/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/charts/portal/README.md b/charts/portal/README.md index 933b3643..418d8acc 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -299,6 +299,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `dispatcher.additionalEnv.CONFIG_HTTPS_TLS` | Enabled HTTPS TLS Versions | `If not specfied, Portal TLS defaults are enabled` see [Portal TLS Defaults](#portal-tls-defaults) | | `dispatcher.additionalEnv.CONFIG_HTTPS_CIPHER_SUITE` | Enabled HTTPS Cipher Suites | `If not specfied, Portal Cipher Suites defaults are enabled` see [Portal Cipher Suites Defaults](#portal-cipher-suites-defaults) | | `dispatcher.additionalEnv.CONFIG_HOST_ALLOWED_DOMAINS` |Use | to separate allowed domains. e.g. mydomain1.com | mydomain2.com| `not set` | +| `dispatcher.additionalEnv.CONFIG_MAX_REQ_PER_MIN_HEALTH_CHECK` |allowed rate limit per minute to the Portal health check endpoint| `6` | | `portalData.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | | `portalData.replicaCount` | Number of portal data nodes | `1` | | `portalData.javaOptions` | Java Options to pass in | `-Xms2g -Xmx2g` | From c24567ea91d93f9157d203a816e6dcba5117d6a4 Mon Sep 17 00:00:00 2001 From: Andrew Cheuk Date: Thu, 25 May 2023 13:49:35 -0700 Subject: [PATCH 12/62] US880924 Remove Postgres refs (#216) Co-authored-by: ac658123 --- .../templates/coordinator/coordinator-statefulset.yaml | 2 -- .../druid/templates/ingestion/ingestion-deployment.yaml | 2 -- .../templates/analytics-server/analytics-deployment.yaml | 2 -- charts/portal/templates/apim/apim-deployment.yaml | 2 -- .../templates/authenticator/authenticator-deployment.yaml | 2 -- charts/portal/templates/common/database-secret.yaml | 8 +------- charts/portal/templates/jobs/db-upgrade-job.yaml | 2 -- charts/portal/templates/jobs/rbac-upgrade-job.yaml | 2 -- .../templates/portal-data/portal-data-deployment.yaml | 4 ---- .../portal-enterprise/portal-enterprise-deployment.yaml | 6 ------ charts/portal/templates/pssg/pssg-deployment.yaml | 2 -- .../tenant-provisioner/tenant-provisioner-deployment.yaml | 2 -- utils/portal-migration/README.md | 4 ++-- 13 files changed, 3 insertions(+), 37 deletions(-) diff --git a/charts/druid/templates/coordinator/coordinator-statefulset.yaml b/charts/druid/templates/coordinator/coordinator-statefulset.yaml index 5779048f..1e227c73 100644 --- a/charts/druid/templates/coordinator/coordinator-statefulset.yaml +++ b/charts/druid/templates/coordinator/coordinator-statefulset.yaml @@ -62,8 +62,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} envFrom: - configMapRef: diff --git a/charts/druid/templates/ingestion/ingestion-deployment.yaml b/charts/druid/templates/ingestion/ingestion-deployment.yaml index 8316a926..e3435edf 100644 --- a/charts/druid/templates/ingestion/ingestion-deployment.yaml +++ b/charts/druid/templates/ingestion/ingestion-deployment.yaml @@ -63,8 +63,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} envFrom: - configMapRef: diff --git a/charts/portal/templates/analytics-server/analytics-deployment.yaml b/charts/portal/templates/analytics-server/analytics-deployment.yaml index 2656fa74..58c14e74 100644 --- a/charts/portal/templates/analytics-server/analytics-deployment.yaml +++ b/charts/portal/templates/analytics-server/analytics-deployment.yaml @@ -80,8 +80,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} envFrom: - configMapRef: diff --git a/charts/portal/templates/apim/apim-deployment.yaml b/charts/portal/templates/apim/apim-deployment.yaml index eac77175..797d5fc3 100644 --- a/charts/portal/templates/apim/apim-deployment.yaml +++ b/charts/portal/templates/apim/apim-deployment.yaml @@ -106,8 +106,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: APIM_TPS_SSL_CERT valueFrom: diff --git a/charts/portal/templates/authenticator/authenticator-deployment.yaml b/charts/portal/templates/authenticator/authenticator-deployment.yaml index bc92e437..dc56fd90 100644 --- a/charts/portal/templates/authenticator/authenticator-deployment.yaml +++ b/charts/portal/templates/authenticator/authenticator-deployment.yaml @@ -66,8 +66,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} envFrom: - configMapRef: diff --git a/charts/portal/templates/common/database-secret.yaml b/charts/portal/templates/common/database-secret.yaml index 9d3e7211..45ce5b71 100644 --- a/charts/portal/templates/common/database-secret.yaml +++ b/charts/portal/templates/common/database-secret.yaml @@ -12,13 +12,7 @@ metadata: heritage: {{ .Release.Service }} type: Opaque data: -{{ if eq .Values.global.databaseType "postgres" }} -{{if .Values.global.databasePassword }} - postgres-password: {{ .Values.global.databasePassword | b64enc | quote }} -{{ else }} - postgres-password: {{ randAlphaNum 10 | b64enc | quote }} -{{ end }} -{{ else if eq .Values.global.databaseType "mysql" }} +{{ if eq .Values.global.databaseType "mysql" }} {{- if and .Values.global.setupDemoDatabase .Values.global.demoDatabaseRootPassword }} mysql-root-password: {{ .Values.global.demoDatabaseRootPassword | b64enc | quote }} {{ else }} diff --git a/charts/portal/templates/jobs/db-upgrade-job.yaml b/charts/portal/templates/jobs/db-upgrade-job.yaml index da54eac0..dded490d 100644 --- a/charts/portal/templates/jobs/db-upgrade-job.yaml +++ b/charts/portal/templates/jobs/db-upgrade-job.yaml @@ -41,8 +41,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: PORT value: {{ include "database-port" . | quote }} diff --git a/charts/portal/templates/jobs/rbac-upgrade-job.yaml b/charts/portal/templates/jobs/rbac-upgrade-job.yaml index 2f982b4d..689acc2e 100644 --- a/charts/portal/templates/jobs/rbac-upgrade-job.yaml +++ b/charts/portal/templates/jobs/rbac-upgrade-job.yaml @@ -41,8 +41,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: PORT value: {{ include "database-port" . | quote }} diff --git a/charts/portal/templates/portal-data/portal-data-deployment.yaml b/charts/portal/templates/portal-data/portal-data-deployment.yaml index 9bf308c4..a5ed99f0 100644 --- a/charts/portal/templates/portal-data/portal-data-deployment.yaml +++ b/charts/portal/templates/portal-data/portal-data-deployment.yaml @@ -81,8 +81,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: RBAC_DATABASE_PASSWORD valueFrom: @@ -90,8 +88,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: APIM_SSL_KEY valueFrom: diff --git a/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml b/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml index 04b64dc3..3cc8d3dd 100644 --- a/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml +++ b/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml @@ -81,8 +81,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: RBAC_DATABASE_PASSWORD valueFrom: @@ -90,8 +88,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: SEARCH_DATABASE_PASSWORD valueFrom: @@ -99,8 +95,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} # test only variables - name: RBAC_CLIENT_CACHE_EXPIRY diff --git a/charts/portal/templates/pssg/pssg-deployment.yaml b/charts/portal/templates/pssg/pssg-deployment.yaml index a4d84a28..161b5191 100644 --- a/charts/portal/templates/pssg/pssg-deployment.yaml +++ b/charts/portal/templates/pssg/pssg-deployment.yaml @@ -71,8 +71,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: APIM_SSL_KEY valueFrom: diff --git a/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml b/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml index 94576db4..e13d9fb1 100644 --- a/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml +++ b/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml @@ -91,8 +91,6 @@ spec: name: {{ .Values.global.databaseSecret }} {{ if eq .Values.global.databaseType "mysql" }} key: mysql-password - {{ else if eq .Values.global.databaseType "postgres" }} - key: postgres-password {{ end }} - name: TPS_SSL_CERT valueFrom: diff --git a/utils/portal-migration/README.md b/utils/portal-migration/README.md index 49aba322..dec485c0 100644 --- a/utils/portal-migration/README.md +++ b/utils/portal-migration/README.md @@ -1,5 +1,5 @@ # Migrate from Docker Swarm or Helm 2 Chart (v4.4 and above) -This migration assumes that you have an external MySQL Deployment that is accessible by both Docker Swarm and your Kubernetes Cluster. This guide has not been tested against Postgres. If you are using Postgres outside of your development environment, Broadcom recommends that you migrate to MySQL. +This migration assumes that you have an external MySQL Deployment that is accessible by both Docker Swarm and your Kubernetes Cluster. If you are not using MySQL for your development environment, Broadcom recommends that you migrate to MySQL. * [Docker Swarm](#migrate-from-docker-swarm) * [Helm 2 Chart](#migrate-from-helm2) @@ -276,7 +276,7 @@ ingress-nginx.rbac.create: ## Troubleshooting This section will be updated as we encounter problems related to installing/migrating the Portal to this form factor -- These guides do not currently include migrating MySQL/PostgresSQL databases. +- These guides do not include migrating from other databases to MySQL. - Please raise a support ticket with Broadcom if you encounter problems, raising a bug/feature request against this repository in parallel should result in faster turnaround. ### Unable to initialize new alias From c7c4e66f39e999fc1f4006237ac7259bcb05c3a4 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Wed, 31 May 2023 15:03:51 -0400 Subject: [PATCH 13/62] update chart dep --- charts/portal/Chart.lock | 6 +++--- charts/portal/charts/druid-1.0.10.tgz | Bin 0 -> 9022 bytes charts/portal/charts/druid-1.0.9.tgz | Bin 8430 -> 0 bytes 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 charts/portal/charts/druid-1.0.10.tgz delete mode 100644 charts/portal/charts/druid-1.0.9.tgz diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 55adde84..e197e0de 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.9 + version: 1.0.10 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 9.4.7 @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.0.9 -digest: sha256:45840f3eec375256b9a5290a11fd3346176a9e497ce9993d27a9813624a5800b -generated: "2023-02-19T23:42:54.3933573+05:30" +digest: sha256:124be185f24f9de96a59b9e5663261e068cc3cf75bbb15e1b30f0a579f5ae07f +generated: "2023-05-31T15:02:58.0516-04:00" diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..e423f06cc92029e1f2596af60aa9c785566015bb GIT binary patch literal 9022 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 Q0RRC1|55&*BLFr50Dp_f#sB~S From 90e91eb70a07d3776c39d7d0cb11553899e51eb0 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Mon, 5 Jun 2023 12:14:42 -0400 Subject: [PATCH 14/62] more accurate doc values, use bitnami options for mysql chart --- charts/portal/README.md | 25 +++++++++++++++---------- charts/portal/values-production.yaml | 6 +++--- charts/portal/values.yaml | 4 +++- 3 files changed, 21 insertions(+), 14 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 9ccf9ea4..223bb5c8 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -248,7 +248,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `analytics.image.pullPolicy` | Analytics image pull policy | `IfNotPresent` | | `analytics.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `analytics.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `analytics.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `analytics.pdb.minAvailable` | Minimum number of available pods | `1` | | `analytics.strategy` | Update strategy | `{} evaluated as a template` | | `analytics.resources` | Resource request/limits | `{} evaluated as a template` | | `analytics.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -261,7 +261,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `apim.otkDb.name` | APIM OTK Database name | `otk_db` | | `apim.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `apim.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `apim.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `apim.pdb.minAvailable` | Minimum number of available pods | `1` | | `apim.strategy` | Update strategy | `{} evaluated as a template` | | `apim.resources` | Resource request/limits | `{} evaluated as a template` | | `apim.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -286,7 +286,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `authenticator.image.pullPolicy` | authenticator image pull policy | `IfNotPresent` | | `authenticator.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `authenticator.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `authenticator.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `authenticator.pdb.minAvailable` | Minimum number of available pods | `1` | | `authenticator.strategy` | Update strategy | `{} evaluated as a template` | | `authenticator.resources` | Resource request/limits | `{} evaluated as a template` | | `authenticator.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -298,7 +298,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `dispatcher.image.pullPolicy` | Dispatcher image pull policy | `IfNotPresent` | | `dispatcher.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `dispatcher.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `dispatcher.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `dispatcher.pdb.minAvailable` | Minimum number of available pods | `1` | | `dispatcher.strategy` | Update strategy | `{} evaluated as a template` | | `dispatcher.resources` | Resource request/limits | `{} evaluated as a template` | | `dispatcher.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -318,7 +318,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `portalData.image.pullPolicy` | Portal-data image pull policy | `IfNotPresent` | | `portalData.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `portalData.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `portalData.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `portalData.pdb.minAvailable` | Minimum number of available pods | `1` | | `portalData.strategy` | Update strategy | `{} evaluated as a template` | | `portalData.resources` | Resource request/limits | `{} evaluated as a template` | | `portalData.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -331,7 +331,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `portalEnterprise.image.pullPolicy` | Portal enterprise image pull policy | `IfNotPresent` | | `portalEnterprise.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `portalEnterprise.pdb.maxUnavailable`| Maximum number of simultaneous unavailable pods | `not set` | -| `portalEnterprise.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `portalEnterprise.pdb.minAvailable` | Minimum number of available pods | `1` | | `portalEnterprise.strategy` | Update strategy | `{} evaluated as a template` | | `portalEnterprise.resources` | Resource request/limits | `{} evaluated as a template` | | `portalEnterprise.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -343,7 +343,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `pssg.image.pullPolicy` | PSSG image pull policy | `IfNotPresent` | | `pssg.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `pssg.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `pssg.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `pssg.pdb.minAvailable` | Minimum number of available pods | `1` | | `pssg.strategy` | Update strategy | `{} evaluated as a template` | | `pssg.resources` | Resource request/limits | `{} evaluated as a template` | | `pssg.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -366,7 +366,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `tenantProvisioner.image.pullPolicy` | Tenant provisioner image pull policy | `IfNotPresent` | | `tenantProvisioner.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `tenantProvisioner.pdb.maxUnavailable`| Maximum number of simultaneous unavailable pods | `not set` | -| `tenantProvisioner.pdb.minAvailable` | Minimum number of available pods | `not set` | +| `tenantProvisioner.pdb.minAvailable` | Minimum number of available pods | `1` | | `tenantProvisioner.strategy` | Update strategy | `{} evaluated as a template` | | `tenantProvisioner.resources` | Resource request/limits | `{} evaluated as a template` | | `tenantProvisioner.nodeSelector ` | Node labels for pod assignment | `{} evaluated as a template` | @@ -701,7 +701,7 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | `rabbitmq.image.tag` | RabbitMQ image version | `5.2` | | `rabbitmq.pdb.create` | Create PodDisruptionBudget (PDB) Object | `false` | | `rabbitmq.pdb.maxUnavailable | Maximum number of simultaneous unavailable pods | `not set` | -| `rabbitmq.pdb.minAvailable | Minimum number of available pods | `not set` | +| `rabbitmq.pdb.minAvailable | Minimum number of available pods | `1` | | `rabbitmq.serviceAccount.create` | Enable creation of ServiceAccount for RabbitMQ | `true` | | `rabbitmq.serviceAccount.name.` | Name of the created serviceAccount | Generated using the `rabbitmq.fullname` template | | `rabbitmq.rbac.create` | Create and use RBAC resources | `true` | @@ -735,7 +735,12 @@ The following table lists the configured parameters of the MySQL Subchart - http | `mysql.auth.existingSecret` | Secret where credentials are stored, see global.databaseSecret | `database-secret` | | `mysql.initdbScripts` | Dictionary of initdb scripts | `see values.yaml` | | `mysql.primary.configuration` | MySQL Primary configuration to be injected as ConfigMap | `see values.yaml` | -| `mysql.primary.pdb.enabled` | Create PodDisruptionBudget (PDB) object | `false` | +| `mysql.primary.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `mysql.primary.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `mysql.primary.pdb.minAvailable` | Minimum number of available pods | `1` | +| `mysql.secondary.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | +| `mysql.secondary.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | +| `mysql.secondary.pdb.minAvailable` | Minimum number of available pods | `1` | ## Ingress-Nginx diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index a03d42bd..d66262c9 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -878,8 +878,6 @@ jobs: pullPolicy: IfNotPresent -# We recommend that MySQL is externalised, the default implementation here is for reference only and is NOT suitable for use -# in any production environment. # We recommend that MySQL is externalised, the default implementation here is for reference only and is NOT suitable for use # in any production environment. # MySQL Stable Chart values - https://github.com/bitnami/charts/tree/master/bitnami/mysql @@ -931,7 +929,9 @@ mysql: socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid pdb: - enabled: false + create: false + maxUnavailable: "" + minAvailable: 1 persistence: annotations: helm.sh/hook: pre-install diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 1ee8cd0b..7b7ae827 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -776,7 +776,9 @@ mysql: socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid pdb: - enabled: false + create: false + maxUnavailable: "" + minAvailable: 1 persistence: annotations: helm.sh/hook: pre-install From fc563998e8b3a8db09e7410bfe31284a24c6452f Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Mon, 5 Jun 2023 16:26:27 -0400 Subject: [PATCH 15/62] missed minavailable in minio template --- charts/druid/templates/minio/minio-pdb.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/charts/druid/templates/minio/minio-pdb.yaml b/charts/druid/templates/minio/minio-pdb.yaml index bd47987f..365383b3 100644 --- a/charts/druid/templates/minio/minio-pdb.yaml +++ b/charts/druid/templates/minio/minio-pdb.yaml @@ -6,6 +6,9 @@ metadata: app: minio name: minio-pdb spec: + {{- if .Values.minio.pdb.minAvailable }} + minAvailable: {{ .Values.minio.pdb.minAvailable }} + {{- end }} {{- if .Values.minio.pdb.maxUnavailable }} maxUnavailable: {{ .Values.minio.pdb.maxUnavailable }} {{- end }} From a5a56d21f990d98e1d9dcf80c75860bad94c1e64 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Mon, 5 Jun 2023 16:42:48 -0400 Subject: [PATCH 16/62] forgot to update tarball --- charts/portal/charts/druid-1.0.10.tgz | Bin 9022 -> 9006 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz index e423f06cc92029e1f2596af60aa9c785566015bb..a1ba42e466d2055623620ab7fcafd48b1df0ac8d 100644 GIT binary patch literal 9006 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 Ud#a-U9{>RV|H>;dU;tJD0ELAG*#H0l literal 9022 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 Date: Tue, 6 Jun 2023 14:33:49 +0530 Subject: [PATCH 17/62] Re-adjusting the duplicates from stable branch --- charts/portal/README.md | 21 --------------------- charts/portal/values.yaml | 10 +--------- 2 files changed, 1 insertion(+), 30 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 2b3addd2..ae23440d 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -448,19 +448,6 @@ this feature. | `portalData.additionalEnv.AUDIT_LOG_TRUNCATE_BATCH_SIZE` | The max number of logs to be removed during a single interval | | `portalData.additionalEnv.AUDIT_LOG_TRUNCATE_FREQ_MIN` | The frequency of log truncation intervals in minutes | - -### Audit Event Logs -Audit event log purging is enabled and set to 365 days retention by default. Set -this variable to customize the retention period. Set the value to 0 to disable -this feature. - -| Environment Variable | Description | -|-----------------------------------------------------|--------------------------------------| -| `portalData.additionalEnv.AUDIT_LOG_RETENTION_DAYS` | The number of days of logs to retain | -| `portalData.additionalEnv.AUDIT_LOG_TRUNCATE_BATCH_SIZE` | The max number of logs to be removed during a single interval | -| `portalData.additionalEnv.AUDIT_LOG_TRUNCATE_FREQ_MIN` | The frequency of log truncation intervals in minutes | - - ### RBAC Parameters | Parameter | Description | Default | |-------------------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| @@ -667,14 +654,6 @@ The following table lists the configured parameters of the Druid Subchart | `druid.image.historical` | Historical image | `druid:5.2` | | `druid.image.kafka` | Kafka image | `kafka:5.2` | | `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2` | -| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.2` | -| `druid.image.broker` | Broker image | `druid:5.2` | -| `druid.image.coordinator` | Coordinator | `druid:5.2` | -| `druid.image.middlemanager` | Middlemanager image | `druid:5.2` | -| `druid.image.minio` | Minio image | `minio:5.2` | -| `druid.image.historical` | Historical image | `druid:5.2` | -| `druid.image.kafka` | Kafka image | `kafka:5.2` | -| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2` | ## RabbitMQ The following table lists the configured parameters of the Bitnami RabbitMQ Subchart - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index ab35ef06..b2245026 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -20,7 +20,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: # The saas flag should be left as is unless otherwise specified by support. @@ -556,14 +556,6 @@ druid: historical: druid:5.2 kafka: kafka:5.2 ingestion: ingestion-server:5.2 - zookeeper: zookeeper:5.2 - broker: druid:5.2 - coordinator: druid:5.2 - middlemanager: druid:5.2 - minio: minio:5.2 - historical: druid:5.2 - kafka: kafka:5.2 - ingestion: ingestion-server:5.2 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: From da3c4182c437da1ebc77f481c565f34c44f09f61 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 6 Jun 2023 15:35:06 +0530 Subject: [PATCH 18/62] Changes to support Portal version 5.2.1 --- charts/portal/Chart.yaml | 4 +-- charts/portal/README.md | 50 +++++++++++++++------------- charts/portal/values-production.yaml | 44 ++++++++++++------------ charts/portal/values.yaml | 44 ++++++++++++------------ utils/create-tenant.sh | 2 +- 5 files changed, 73 insertions(+), 71 deletions(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index 9724c553..38cc3786 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 -appVersion: "5.2.0.1" +appVersion: "5.2.1" description: CA API Developer Portal name: portal -version: 2.3.2 +version: 2.3.3 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/README.md b/charts/portal/README.md index ae23440d..baac7e9c 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -3,6 +3,8 @@ The Layer7 API Developer Portal (API Portal) is part of the Layer7 API Managemen ## Introduction This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using the Helm Package Manager. +## 2.3.3 General Updates +- This new version of the chart supports API Portal 5.2.1. ## 2.3.2 General Updates - Ingress-NGINX Subchart is upgraded to version 4.5.2 to support K8s 1.25+ version. - Ingress-NGINX Subchart deployment is disabled by default in values-production.yaml. Use any Ingress-controller that supports SSL/TLS Passthrough. @@ -63,7 +65,7 @@ This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using Solutions & Patches](https://techdocs.broadcom.com/us/product-content/recommended-reading/technical-document-index/ca-api-developer-portal-solutions-and-patches.html) page. ### Production -- A dedicated MySQL 8.0.22/8.0.26/8.0.31 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) +- A dedicated MySQL 8.0.22/8.0.26/8.0.31 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) - 3 Worker nodes with at least 4vcpu and 32GB ram - High Availability with analytics - Access to a DNS Server - Signed SSL Server Certificate @@ -109,7 +111,7 @@ To delete API Portal installation, run the following command: ## Upgrade External Portal Database to MySQL 8.0 MySQL 8.0 is supported as an external database starting from API Portal 5.0 CR-1. This section helps you understand the overall process of upgrading an existing Portal database running MySQL 5.7 to MySQL 8.0. -1) Before upgrading the Database, see **Before You Begin** and **Check Database Compatibility** in [TechDocs.](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) +1) Before upgrading the Database, see **Before You Begin** and **Check Database Compatibility** in [TechDocs.](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) 2) Persist Analytics Data into Druid Database @@ -134,7 +136,7 @@ MySQL 8.0 is supported as an external database starting from API Portal 5.0 CR-1 $ helm uninstall -n ``` -4) Upgrade MySQL 5.7 to 8.0.26. For more information, see **Perform the Upgrade** [TechDocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) +4) Upgrade MySQL 5.7 to 8.0.26. For more information, see **Perform the Upgrade** [TechDocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) 5) After MySQL is upgraded, ensure that you can connect to it and then follow the below steps to start the portal with MySQL 8.0.26. Ensure that the value of **tls.job.enabled** is set to **false** in **values.yaml** @@ -543,18 +545,18 @@ Portal Analytics ### Portal Images | Parameter | Description | Default | |-------------------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| -| `image.dispatcher` | dispatcher image | `dispatcher:5.2` | -| `image.pssg` | PSSG image | `pssg:5.2` | -| `image.apim` | APIM ingress image | `ingress:5.2` | -| `image.enterprise` | portal-enterprise image | `portal-enterprise:5.2` | -| `image.data` | portal-data image | `portal-data:5.2` | -| `image.tps` | tenant provisioner image | `tenant-provisioning-service:5.2` | -| `image.analytics` | Analytics image | `analytics-server:5.2` | -| `image.authenticator` | Authenticator image | `authenticator:5.2.0.1` | -| `image.dbUpgrade` | db upgrade image | `db-upgrade-portal:5.2` | -| `image.rbacUpgrade` | Analytics image, per Portal version | `db-upgrade-rbac:5.2` | -| `image.upgradeVerify` | Upgrade verification image | `upgrade-verify:5.2` | -| `image.tlsManager` | TLS manager image | `tls-automator:5.2` | +| `image.dispatcher` | dispatcher image | `dispatcher:5.2.1` | +| `image.pssg` | PSSG image | `pssg:5.2.1` | +| `image.apim` | APIM ingress image | `ingress:5.2.1` | +| `image.enterprise` | portal-enterprise image | `portal-enterprise:5.2.1` | +| `image.data` | portal-data image | `portal-data:5.2.1` | +| `image.tps` | tenant provisioner image | `tenant-provisioning-service:5.2.1` | +| `image.analytics` | Analytics image | `analytics-server:5.2.1` | +| `image.authenticator` | Authenticator image | `authenticator:5.2.1` | +| `image.dbUpgrade` | db upgrade image | `db-upgrade-portal:5.2.1` | +| `image.rbacUpgrade` | Analytics image, per Portal version | `db-upgrade-rbac:5.2.1` | +| `image.upgradeVerify` | Upgrade verification image | `upgrade-verify:5.2.1` | +| `image.tlsManager` | TLS manager image | `tls-automator:5.2.1` | ## Subcharts For Production, use an external MySQL Server. @@ -646,14 +648,14 @@ The following table lists the configured parameters of the Druid Subchart | Parameter | Description | Default | |-----------------------------|---------------------|--------------------------| -| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.2` | -| `druid.image.broker` | Broker image | `druid:5.2` | -| `druid.image.coordinator` | Coordinator | `druid:5.2` | -| `druid.image.middlemanager` | Middlemanager image | `druid:5.2` | -| `druid.image.minio` | Minio image | `minio:5.2` | -| `druid.image.historical` | Historical image | `druid:5.2` | -| `druid.image.kafka` | Kafka image | `kafka:5.2` | -| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2` | +| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.2.1` | +| `druid.image.broker` | Broker image | `druid:5.2.1` | +| `druid.image.coordinator` | Coordinator | `druid:5.2.1` | +| `druid.image.middlemanager` | Middlemanager image | `druid:5.2.1` | +| `druid.image.minio` | Minio image | `minio:5.2.1` | +| `druid.image.historical` | Historical image | `druid:5.2.1` | +| `druid.image.kafka` | Kafka image | `kafka:5.2.1` | +| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2.1` | ## RabbitMQ The following table lists the configured parameters of the Bitnami RabbitMQ Subchart - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq @@ -662,7 +664,7 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | ----------------------------- | ----------------------------------- | ----------------------------------------------------------- | | `rabbitmq.enabled` | Enable this subchart | `true` | | `rabbitmq.host` | Host - must match fullnameOverride | `rabbitmq` | -| `rabbitmq.image.tag` | RabbitMQ image version | `5.2` | +| `rabbitmq.image.tag` | RabbitMQ image version | `5.2.1` | | `rabbitmq.fullnameOverride` | Overrides the name of the subchart | `rabbitmq` | | `rabbitmq.serviceAccount.create` | Enable creation of ServiceAccount for RabbitMQ | `true` | | `rabbitmq.serviceAccount.name.` | Name of the created serviceAccount | Generated using the `rabbitmq.fullname` template | diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 51b828ca..03a902bc 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -20,7 +20,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/ # storageClass: "_" # schedulerName: @@ -443,18 +443,18 @@ tenantProvisioner: # topologyKey: "kubernetes.io/hostname" image: - dispatcher: dispatcher:5.2 - pssg: pssg:5.2 - apim: ingress:5.2 - enterprise: portal-enterprise:5.2 - data: portal-data:5.2 - tps: tenant-provisioning-service:5.2 - analytics: analytics-server:5.2 - authenticator: authenticator:5.2.0.1 - dbUpgrade: db-upgrade-portal:5.2 - rbacUpgrade: db-upgrade-rbac:5.2 - upgradeVerify: upgrade-verify:5.2 - tlsManager: tls-automator:5.2 + dispatcher: dispatcher:5.2.1 + pssg: pssg:5.2.1 + apim: ingress:5.2.1 + enterprise: portal-enterprise:5.2.1 + data: portal-data:5.2.1 + tps: tenant-provisioning-service:5.2.1 + analytics: analytics-server:5.2.1 + authenticator: authenticator:5.2.1 + dbUpgrade: db-upgrade-portal:5.2.1 + rbacUpgrade: db-upgrade-rbac:5.2.1 + upgradeVerify: upgrade-verify:5.2.1 + tlsManager: tls-automator:5.2.1 ## ## Subchart Configuration @@ -691,14 +691,14 @@ druid: # topologyKey: kubernetes.io/hostname image: - zookeeper: zookeeper:5.2 - broker: druid:5.2 - coordinator: druid:5.2 - middlemanager: druid:5.2 - minio: minio:5.2 - historical: druid:5.2 - kafka: kafka:5.2 - ingestion: ingestion-server:5.2 + zookeeper: zookeeper:5.2.1 + broker: druid:5.2.1 + coordinator: druid:5.2.1 + middlemanager: druid:5.2.1 + minio: minio:5.2.1 + historical: druid:5.2.1 + kafka: kafka:5.2.1 + ingestion: ingestion-server:5.2.1 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: @@ -708,7 +708,7 @@ rabbitmq: image: registry: caapim repository: message-broker - tag: "5.2" + tag: "5.2.1" pullSecrets: - broadcom-apim serviceAccount: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index b2245026..5285d9e1 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -20,7 +20,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/ # storageClass: "_" # schedulerName: # The saas flag should be left as is unless otherwise specified by support. @@ -374,18 +374,18 @@ tenantProvisioner: # affinity: {} image: - dispatcher: dispatcher:5.2 - pssg: pssg:5.2 - apim: ingress:5.2 - enterprise: portal-enterprise:5.2 - data: portal-data:5.2 - tps: tenant-provisioning-service:5.2 - analytics: analytics-server:5.2 - authenticator: authenticator:5.2.0.1 - dbUpgrade: db-upgrade-portal:5.2 - rbacUpgrade: db-upgrade-rbac:5.2 - upgradeVerify: upgrade-verify:5.2 - tlsManager: tls-automator:5.2 + dispatcher: dispatcher:5.2.1 + pssg: pssg:5.2.1 + apim: ingress:5.2.1 + enterprise: portal-enterprise:5.2.1 + data: portal-data:5.2.1 + tps: tenant-provisioning-service:5.2.1 + analytics: analytics-server:5.2.1 + authenticator: authenticator:5.2.1 + dbUpgrade: db-upgrade-portal:5.2.1 + rbacUpgrade: db-upgrade-rbac:5.2.1 + upgradeVerify: upgrade-verify:5.2.1 + tlsManager: tls-automator:5.2.1 ## ## Subchart Configuration @@ -548,14 +548,14 @@ druid: # affinity: {} image: - zookeeper: zookeeper:5.2 - broker: druid:5.2 - coordinator: druid:5.2 - middlemanager: druid:5.2 - minio: minio:5.2 - historical: druid:5.2 - kafka: kafka:5.2 - ingestion: ingestion-server:5.2 + zookeeper: zookeeper:5.2.1 + broker: druid:5.2.1 + coordinator: druid:5.2.1 + middlemanager: druid:5.2.1 + minio: minio:5.2.1 + historical: druid:5.2.1 + kafka: kafka:5.2.1 + ingestion: ingestion-server:5.2.1 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: @@ -565,7 +565,7 @@ rabbitmq: image: registry: caapim repository: message-broker - tag: "5.2" + tag: "5.2.1" pullSecrets: - broadcom-apim serviceAccount: diff --git a/utils/create-tenant.sh b/utils/create-tenant.sh index 97f89ff0..770249a4 100755 --- a/utils/create-tenant.sh +++ b/utils/create-tenant.sh @@ -30,7 +30,7 @@ function print_steps() { The tenant has been added to the database. The tenant info can be found in the tenant_info file in the current directory. Please follow the rest of the instructions at TechDocs to enroll your gateway with the portal. - (https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/post-installation-tasks/enroll-a-layer7-api-gateway.html) + (https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/post-installation-tasks/enroll-a-layer7-api-gateway.html) 1. You will need to navigate to the portal at https://${tenant_id}.${domain} and create a new API PROXY. 2. Copy the enrollment URL From 4596aa85e4b1621589d1cf1c21b832dadd97eb65 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 6 Jun 2023 16:34:04 +0530 Subject: [PATCH 19/62] Removing redundant version --- charts/portal/Chart.lock | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 0e05494f..c3133cc4 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,8 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.9 - version: 1.0.9 + version: 1.0.9 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 9.4.7 From d43d9ff2254dbcf7cc27e6faf57eab685f952eea Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Tue, 6 Jun 2023 09:18:15 -0400 Subject: [PATCH 20/62] doc better reflects values --- charts/portal/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 223bb5c8..a8f4d56d 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -740,7 +740,7 @@ The following table lists the configured parameters of the MySQL Subchart - http | `mysql.primary.pdb.minAvailable` | Minimum number of available pods | `1` | | `mysql.secondary.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `mysql.secondary.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | -| `mysql.secondary.pdb.minAvailable` | Minimum number of available pods | `1` | +| `mysql.secondary.pdb.minAvailable` | Minimum number of available pods | `not set` | ## Ingress-Nginx From 203a4758f698e3065dd57dfce880a2f0049a9b1d Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Tue, 6 Jun 2023 09:46:32 -0400 Subject: [PATCH 21/62] post-merge helm dep update --- charts/portal/Chart.lock | 4 ++-- charts/portal/charts/druid-1.0.10.tgz | Bin 9006 -> 9006 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index e915e942..8b3606de 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.5.2 -digest: sha256:9369611e2ec40c223228f7bccf23bb4c839448677772acff0778f53874607a4d -generated: "2023-04-11T00:03:56.7118775+05:30" \ No newline at end of file +digest: sha256:3a33f27e52502313a5ddcab2d5527da96aa420b9b604e24170edc841b1db1ff3 +generated: "2023-06-06T09:45:48.979706-04:00" diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz index a1ba42e466d2055623620ab7fcafd48b1df0ac8d..b01274b1d6f3bab4873960e87bc7643f6114f098 100644 GIT binary patch delta 7702 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 Q2LJ&7|BAf7jsR8x0LiXovH$=8 delta 7703 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 From cd6c901f6c6401a87e8e6d272e82abe96284a91e Mon Sep 17 00:00:00 2001 From: ksaladi <69457674+ksaladi@users.noreply.github.com> Date: Wed, 21 Jun 2023 22:48:33 +0530 Subject: [PATCH 22/62] [charts/portal] Adding provision to configure liveness and readiness probe of historical container (#225) * Adding provision to configure the liveness and readies probe threshold to provide additional time for SaaS deployment * Addig provision to configure historal probe values and allowing a max of 32M upload file size to support custompages and gw bundles --------- Co-authored-by: Kiran Saladi --- charts/druid/Chart.yaml | 2 +- .../historical/historical-statefulset.yaml | 18 ++++++++++-------- charts/druid/values.yaml | 12 ++++++++++++ charts/portal/Chart.lock | 6 +++--- charts/portal/charts/druid-1.0.10.tgz | Bin 0 -> 8626 bytes charts/portal/charts/druid-1.0.9.tgz | Bin 8430 -> 0 bytes charts/portal/values-production.yaml | 3 +++ charts/portal/values.yaml | 3 +++ 8 files changed, 32 insertions(+), 12 deletions(-) create mode 100644 charts/portal/charts/druid-1.0.10.tgz delete mode 100644 charts/portal/charts/druid-1.0.9.tgz diff --git a/charts/druid/Chart.yaml b/charts/druid/Chart.yaml index 312aed5e..cdf93428 100644 --- a/charts/druid/Chart.yaml +++ b/charts/druid/Chart.yaml @@ -7,5 +7,5 @@ maintainers: - name: Gazza7205 sources: - https://github.com/CAAPIM/apim-charts -version: 1.0.9 +version: 1.0.10 appVersion: 0.17.0 diff --git a/charts/druid/templates/historical/historical-statefulset.yaml b/charts/druid/templates/historical/historical-statefulset.yaml index 42f1b60f..3204dbcc 100644 --- a/charts/druid/templates/historical/historical-statefulset.yaml +++ b/charts/druid/templates/historical/historical-statefulset.yaml @@ -64,17 +64,19 @@ spec: readinessProbe: exec: command: [sh, /opt/diagnostic/health_check.sh] - initialDelaySeconds: 90 - timeoutSeconds: 1 - periodSeconds: 15 - successThreshold: 1 + initialDelaySeconds: {{ .Values.historical.readinessProbe.initialDelaySeconds }} + timeoutSeconds: {{ .Values.historical.readinessProbe.timeoutSeconds }} + periodSeconds: {{ .Values.historical.readinessProbe.periodSeconds }} + successThreshold: {{ .Values.historical.readinessProbe.successThreshold }} + failureThreshold: {{ .Values.historical.readinessProbe.failureThreshold }} livenessProbe: exec: command: [sh, /opt/diagnostic/health_check.sh] - initialDelaySeconds: 120 - timeoutSeconds: 1 - periodSeconds: 15 - successThreshold: 1 + initialDelaySeconds: {{ .Values.historical.livenessProbe.initialDelaySeconds }} + timeoutSeconds: {{ .Values.historical.livenessProbe.timeoutSeconds }} + periodSeconds: {{ .Values.historical.livenessProbe.periodSeconds }} + successThreshold: {{ .Values.historical.livenessProbe.successThreshold }} + failureThreshold: {{ .Values.historical.livenessProbe.failureThreshold }} ports: - containerPort: 8083 {{- if .Values.historical.resources }} diff --git a/charts/druid/values.yaml b/charts/druid/values.yaml index e357a401..1ae1b61f 100644 --- a/charts/druid/values.yaml +++ b/charts/druid/values.yaml @@ -139,6 +139,18 @@ coordinator: # affinity: historical: + livenessProbe: + initialDelaySeconds: 120 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 15 + successThreshold: 1 + readinessProbe: + initialDelaySeconds: 90 + timeoutSeconds: 1 + failureThreshold: 3 + periodSeconds: 15 + successThreshold: 1 replicaCount: 1 loglevel: WARN image: diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index c3133cc4..8d3bba86 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.9 + version: 1.0.10 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 9.4.7 @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.5.2 -digest: sha256:9369611e2ec40c223228f7bccf23bb4c839448677772acff0778f53874607a4d -generated: "2023-04-11T00:03:56.7118775+05:30" +digest: sha256:3a33f27e52502313a5ddcab2d5527da96aa420b9b604e24170edc841b1db1ff3 +generated: "2023-06-20T20:27:30.0638974+05:30" diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz new file mode 100644 index 0000000000000000000000000000000000000000..891031a45326423d3a82bfd51e0c8ce3fb045bbc GIT binary patch literal 8626 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 E090HC_W%F@ literal 0 HcmV?d00001 diff --git a/charts/portal/charts/druid-1.0.9.tgz b/charts/portal/charts/druid-1.0.9.tgz deleted file mode 100644 index 7faf759d492b7c912242d2990e88fcd819cffe52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8430 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 Q0RRC1|55&*BLFr50Dp_f#sB~S diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 03a902bc..fb1257ff 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -788,6 +788,9 @@ ingress-nginx: rbac: create: true controller: + config: + # 30MB is the max file size we allow for the custom pages and 15MB for GW Bundle.so max is set to 32 + proxy-body-size: "32m" publishService: enabled: true extraArgs: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 5285d9e1..353fa713 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -636,6 +636,9 @@ ingress-nginx: rbac: create: true controller: + config: + # 30MB is the max file size we allow for the custom pages and 15MB for GW Bundle.so max is set to 32 + proxy-body-size: "32m" publishService: enabled: true extraArgs: From 67e6be4eadd6f9aa65abf70f62627f7636eb9c24 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 27 Jun 2023 20:16:52 +0530 Subject: [PATCH 23/62] Upgrading RMQ chart to simplify the volume permissions conf --- charts/portal/Chart.lock | 6 +++--- charts/portal/Chart.yaml | 2 +- charts/portal/README.md | 3 +++ charts/portal/charts/druid-1.0.10.tgz | Bin 8626 -> 8627 bytes charts/portal/charts/rabbitmq-12.0.3.tgz | Bin 0 -> 55801 bytes charts/portal/charts/rabbitmq-7.6.6.tgz | Bin 41431 -> 0 bytes 6 files changed, 7 insertions(+), 4 deletions(-) create mode 100644 charts/portal/charts/rabbitmq-12.0.3.tgz delete mode 100644 charts/portal/charts/rabbitmq-7.6.6.tgz diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 8d3bba86..9cfa6d64 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -7,9 +7,9 @@ dependencies: version: 9.4.7 - name: rabbitmq repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami - version: 7.6.6 + version: 12.0.3 - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.5.2 -digest: sha256:3a33f27e52502313a5ddcab2d5527da96aa420b9b604e24170edc841b1db1ff3 -generated: "2023-06-20T20:27:30.0638974+05:30" +digest: sha256:f4528610414ae3701c85e2bc990de4be552bf56db933148760263add624e866b +generated: "2023-06-27T18:25:13.9227811+05:30" diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index 38cc3786..6f2232cb 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -20,7 +20,7 @@ dependencies: repository: "https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami" condition: global.setupDemoDatabase - name: rabbitmq - version: 7.6.6 + version: 12.0.3 repository: "https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami" condition: rabbitmq.enabled - name: ingress-nginx diff --git a/charts/portal/README.md b/charts/portal/README.md index baac7e9c..2b579b30 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -461,6 +461,9 @@ this feature. | `rabbitmq.serviceAccount.create`| Enable creation of ServiceAccount for Bitnami RabbitMQ |`true`| | `rabbitmq.serviceAccount.name`| Name of the created serviceAccount | Generated using the `portal.fullname` template | | `rabbitmq.rbac.create`| Create & use RBAC resources |`true`| +| `rabbitmq.volumePermissions.enabled` | Enable init container that changes the owner and group of the persistent volume(s) mountpoint to `runAsUser:fsGroup`. After enabling set the appropriate runAsUser and fsGroup values |`false`| +| `rabbitmq.podSecurityContext.fsGroup` | Set RabbitMQ pod's Security Context fsGroup | `1001` | +| `rabbitmq.containerSecurityContext.runAsUser` | Set RabbitMQ containers' Security Context runAsUser | `1001` | | `ingress-nginx.podSecurityPolicy.enabled`| Enable Pod Security Policy for Nginx |`true`| | `ingress-nginx.serviceAccount.create`| Enable creation of ServiceAccount for Nginx |`true`| | `ingress-nginx.serviceAccount.name`| Name of the created serviceAccount | Generated using the `portal.fullname` template | diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz index 891031a45326423d3a82bfd51e0c8ce3fb045bbc..52df54c54c123569ad56a60b8ba2d69769c0b3af 100644 GIT binary patch delta 6953 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

  • 8Hwa zfcY{IxC}e$DxC*hh8O32{|=yS^MZBo@Nkms;rN<>7j*N?x`eVXlddv(C8 zq$BsBR|@n}=i_Z3MfPb6NuK|W338@*>=GY6!8hjV|1$SK)f?@`UjM(5bOf#-W5{Y^!7efm4~(vJx`$Ww<02DTBb zg@t_b`S8HFrxvkMZMU!qDgT3h@9ab0nA%VBjk)sQXlU|Z@3fkG`QJo3Is(7@1lksv zg5K5n2XG}$aiHfyXU4Ea!RZA0?C?MczMmZK!ZQ&CY=YuK;sSqBaK^`!LSe|Db!QwN zghakz#{qmN=Yv}WrpO;78(^0aVW&pBwb~f7NpNdeWLi7zajt66!_%rz_fbyg=m>nI zaEw3|FisLv009kdtAbfTMj=Px7v)n-g_{dy(6ylhiHlwVPw4+Z=!zbf5?{C=421;# zK+ZIz@&!^LO(Iona61F<;SBl5aT^-DCEfE=c>MydS-5&H_laxAd(hK7`8Qj-|7Ww^ vINrVgSl9_`j@W6UPOtznUA?X<^>)u4x`Rf}h(2UCb$2C<8L+J8N$0vGb4Z{fFZ@VH^N z59I%1kRDJH_!bh`7NgB(9_j+hj<2)c5kgiFBk$FJ;iW0~T>dcpUgbVn7x2JZMc2IO7B5@ZbnsPjD#c08?Ni zipMUp0VCiR0e>5L4w)evKnfrj2DdUJ838syytF!jfHQQD9O5BAoJkH3c$T*gxrGjp zWAgA|EdK2t9suBpTm$40iW%`|U0^{j@HO!=aGW8se8jroHvCGJzvVBF`1dL2Zv+E} zac-wG`j-PJVhp=u3g9idN3Vc2f$kUqJmT%(B8$J|xqqPx&{u|h7dpU(4BkSD49+b@ zEbz|Il$?c6yMXxt;vbFjU5j~0d{2G+2cazIF>i`4Xg1A``t&13!{PfZ?E(5Lz`lGp zf(}JmAz#j*(4JyfeHFG8e?)^@oA7z~%10yowF_)?U-iNc0l-0HXw5jYoD@|)Bi}^z zzDT`2N`LADDg8oxy9c4S7A<3vca>!fK5V;DMCr{Pnswy^Svq{c=NBZ)fZM>jLkzG9 zWPe~n9GfbQC5D%%-;4x)I5P-={C$>4IiIR91!7ac3%ufj9Z)XQy+4Pqz}wTSSD^PT z@X;%o`3rU&;37GnO(C-;07iVwNB}1A9)&dkj2L1xinp>kpognd#C&W~&Wh!bz#fL( zoyZMsjv+%|;4ExV3#pdQWrUGT;+dN>w@#q1z}e{qJPL` zl2Ej3lzDyhSAZy^UGV)O;(v;!Vl8R3J0C*fa_|(FW;y~cvC$AY$PyC{&v*pjXoOwN zWWBijBtj}CmT(SLrnIDHjr!|)LDg5S?A%%`*dlW)%O?tTjxDH%!^g=za=PHp-rz#c zo;La#7T^;j^qE}#Ue{$m^TA=uM}M7myV-uKzHhyq+w&sJ0!JaqeV^eJ#rDHS3bFo*yous zbk2|iXG3HW*QQ-iZ-j%G;VB{kOJ2ywBZ!^AN7oY{QNF-+K{IR&Q+;2VMxQ!QKFW@^kbE@e_r*+(D?z2?}^#TEVvr7pl0Rwq#?z43Y69Rw7`~CkW(klAD z?6}B31ZWNdyP^qH1Y6;-SmXEfTEY+K7w4BZ9|!NH*L=5Dla6Lhd`7oE)XATxOm#4bZ$g$C{<@*awOe8TBM;XaSY;?@+|U1ZBaif&1Q#D0ItaZ@g3mF)ph-k(h^hnb%@6Nz)w#a?Nr}~6_JzG zN%e)_g6GKzRclQ2Y z8%fLKzq;G^&Po3ANN_!c1Q+af#knowLc@sbMHsQx7Q2536fZ3QYaqdMHj1neT?$H8tGWQ5oWTZVm862YcY4|%4sYJ| z|E0sC;>drL!J;Dx38Rd175X7kufS7O*d9rUkvwh~3` zMU_Z&*uCNK&&$Et)7C;e_GVyKnL?MXze)jxiim_+DQg0eqw0kLB{Sbh%OF_C0wN#c zN=V3-TCBVp9Z{woFr(=Fz04>!YBjQ`6-BC0$s&KYnkhv-g{AB%c)BM}Fhw8uzJzLW zH02MkAe(fr7Lt)!z<(HUr{ZA6= zQ2BpzO+Uan`kzLl(bV<7W_@q}vyrrl{ZD3Kh^F+@-5X6t`-`?wPY6V4P+KHg5g9hxvik=oOoi&v-6 znjpg=@?H^o^6&2zzARR{mD)Y@!|hL)msVa?rts?!e?ygSy=lhj;XgTT66QQn@+qzI zzX9@Rz~Wz5%PL(h-WdT!g2jv}NG7L8ynxGMes-Bh7@t^hG(yIJM&GLWV z_+z)zV(b5Ue!z3>KiazgU%gS^`~PkvEsy`E7lWN!_LoP0o4Oxx81!1hc*WB^j5l53 z-Gg{b(}ME9mLG7r{MXG+X8+%)H}?L&8%b;6zdJq=fSp5smA%(Cz+ZiyQn26jt6b<; zVSYD}Uwyc}MBrB)K}+Jkc|})6SQUR-tD?R|Bp!jK)iB=z0t@p)krnuu%}$9p6Dvb$ zMBn-(@VcOG)?>wPDMFkb%3y7PSh+fD8GKl2mR*O3Uj{z>Gyw6+KxnS6FG@RrV-~GY zDq}`Y$xK7)h~Pqm(}glLH5hRrlBqHoidp1wA)-i)nPXkNbZXs6$o0 z9&vP}=|0BbNK<^Av5}_vXhS1ScFxFH6e4dP7DMEzVYv!Io=ae(0J(D7-WWa(ayJ^) zd*W0r2jc0Wh5;v4$ZEC=He-9teS4UD>4Lp9S(B;20H2ZOu1)tCFt&i|=Pk{#rW<@I3s#)zagCnC<=jUz%C}afpBWCox1XKlKOi zF9&B?BZ86uBXOaO6+y=9Ob^j;IXFAN=v`mtSS^%%P%XFYHy_(};i@;dKEFP{ytp~N z{CIJlo|)rrF~XTAeWzqJOAq>2@6S(rMN~x3>AK3w%L`VL4e_C0>QNZ2Wc4^F8wxD5 zE0I;UJxf1bT4eo~Dsz9n;eV3&51r<52LEq0_x67qNhSE-S={Xl?E-dq`3E}(1tv?} zqauL|;co!=>ZAD3GKF7sL^obonqX&nNfq$0hIubhbyg@TWp2#H>dfs#LlY9(#aQ!N8Ho|t{I<*>vl~;ag z1ZyEM?v2@M6fCyS5$%@NiX%YMX<90^>-`d~*zmc?b{Kt~DY)4Q3 zyBi5|+nv9#{I7p^3*bEY?=WE_Mcu}T=aiW1vXk74&dRToA;Ve43b|- zwRiTZKe#?0_N941K0`{T_vgdw{)I3;xO(3^zqs!I^SWEB#Wo1Cz`R_crNa5y&FSTb z550@CEkN3PZ6;cj?%E2HWqT5^N~ zWl1Xzt<b5#E>rTC@6M?EV_Gn^-*w2CrkgHwrsQi=Va^u-hD+ba)%^SlntSi!mvZro z=J9`RZ}&4vKmSd!Z98Zxc5ixsoa%+;V*zUy7Kh7>uZ3|{KapHs9A=F>ESDm3?ZxPY88vF@SjCy1Eecos zCUvj$5x5AZx5x)%1Q?`ul<%st!z3d1h4_DW$TuwLK?}3lNi$9B8qz!9z`(U8z=J-V zBBli`)|%imyoZ+_qbDI$466T}()yVH`pSQu1r+%rqR2PmqLYu;r=WT^!VWT!YY`i} z-n|f+Xt`L8ndBgDu_UUQUGW)+(@xXcbU%QjJ|FdcCqWye;NMaI~D-CNZA{u9f$$_ z?3|XLlf&|Yk$T^x3at|pH>GpkY*^gVC1W)Q?IIdWIcdKbh#5Tl@VfJ+!{>IXZT9@{ zVj_QT%Kyu3wsrge&T)IM|J#2^S`GhAMn}=P-^FAr=lw#wS1`2g*518TCjaZkeT-7M z{MQ?1yRO^+ciNr3{BI&1BUc%n$+`r+f=P&$?QEW;;1N`YE+$K=3VEC6sR+}N_;S0EHph^mFK}icm(MPG zgtA130xGpz?AGX{@=DE6sai;TQVXar^4i3@Lw*&x%%6D#yUd^y*E)G}~VaSDsHkBa5Be>va{O zTdpUeIrU6&B}e4P!TW-mW@7!V|FlrIx9VuoCb4Qj)8Ge4du~)}h*>quM|`@*(4iGQ zvyY&C={mD6NUZ3}>y)qL3@0K$e zj|}=}{fq1K-uq#0Q{)WV+SsBucW7pOro^o*GDa6(I;%^TlfF6c(5$e^y+4P_n7BEA z;+VoqcR2h)dr>9MGhu;OYRs7H(nbl#*zU?R{6eK>KW?AJTPORx4Ey5Kt{SJ4$tQni(!9x*Z;^RJ{BeDKm425Ck7@9hhJI;p=Rjw3u(7<$F;f{z!O@}? zE3R*TYx0lG#M?#NG`HQF<~j}6S-auNuKJ8L3acS->9WredDAhod0QqqIq1HM@r<$P zq@psiZAIliJxMCl|F0YOIZAWzzec^G>;F5)ojv}yk+gqw{O2U(VeY)~@E}&9tUh&u zoT))4wFx12UEuksie1W}BkVhO2^`1`7ybQvR*}OiF89tickw<^KR^|2Y?Xp>VCaX; zU4gmOeCXOe$D6>5U<&GHwtP5a7x64RE5mbgUMk;=FUGS*EyZ)IjOS$zXX+U$hiRqU z*y4NN|Dk`x)jwS=|8~LgYRMy2`hb$dYF^QtfZrXMs{ilHv<7vfn2>%T&Jp zZzld{r=G$8>&^Cl{oh1d#s6;y5&h--{W7y&PLPJ^^qikJ%9D;3Dz(7*&Vgae?3zK%8*kzy+@>EGrXw-ui0u_VaTSmCIF&tt+M>@|y z2Gt8QtFcLfswoal6VyjlO95b{fQ%XVr9`%W0PM0~K|Q51uYyI)8NzTssbE*t@1|iG z%?E$AEmX>Box%!Vi`yqnQ^T}!ji(;nbm|cdr*xBo#S99H;m0}P<2umeTtkAz%m}v4 zdmdjah0fL8C1lE)oD>_Jl$x6?0hK)xP?iS{7emAOFy~^ha1nr61d%QPZ0g>SrD1j# zkEELm1)FNq7b3y=4OEN*FM|Q+H{k9z)0}_UzEYGHitVdT{X2rqw`T#4B(38At&fa+A&YZuMWD9b zuFoYcBL7c)|MzhtgZ~^i_V~|6((?FkO0IWJ>=(g-Gcb%mbQK&X9lSqLp(qRU&vz-$ zfEX$kw2YL#M%79yXmJh^pDR4m?NxJ7!(K|D)b% z?C<~BNa91yB{q^u{#+r*!T{^y!8<*LfStpIldgDNY*>MMQ%#-=_ZEzY+{vgAXHI=) z8Ju`E7+4!fFA)mfWB>x~)5@@15{b?!xhe>pkXjXyE}*bJL#rXv`QVD`r`c||R|mXG zI&u$sr9dxrKHm0GWS_Q>z0q#&_5T}5N8k!FhJ2R- zMt~dw;L8NL;5NXHjomTupmhhwh#H3nN8oybDWHKTHDh#w90%~}OrC%FuseRm58;sE zdn621l;_a3IRzJu#i|2-@q9GGUy%*IU^W5&=T`$>}gvz&IP; z3>oneCvr-rQ{sY8r$b<4pB^3m_& zSjZ=z4-brcY7raNb_<)3@;~VJ&OY>wsr@A1m@EH{h9>{@PV0Ct|C>lhN8op#K-(fy z(7QVS0ItL-4)k2;%ow&PIGsSB9Uch5_mjh2cqXENO;B7&Tp)i6&iI&8C=402?u^5O zkjNM8IDqfud~l1v6!~Lh1MD&)?9^ztRvTkB32qIGOlzk-&Q%S1cv=ZbM_Yq*uK5^}M4||7J_~|7^CK u&At3@BFUSlC1RF1e8smHJh$PzPy4h_`?OCBrvD!R0RR72*GH%TJ^=t+g4OQ; diff --git a/charts/portal/charts/rabbitmq-12.0.3.tgz b/charts/portal/charts/rabbitmq-12.0.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..48e7f6eb9ceb1ff2d991280c92418cd5a2003caa GIT binary patch literal 55801 zcmV(~K+nG)iwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ(b{jXcC_2CO6u7kak(8|_DOq+Bp6z|MEXj#hEK6IGlRGz) zC4t=_iKyA=0BFe^$B%Z_d8G3SccJjnK!1>}4?CF|b0!wq4HOE6LZMJ7RB=2WQ#t=_ zus_3G_7`}b{^hYh!{KoFVs{t*4u`|)-|c75p8sWgcX#*s_Oq{dw}*cjZtr~k_1Awv z!$-%Y;Zq2S`Co<)ZmZh4e~=H(GA6O4EEA(Ogkmhol<~y~9c2@ah2%vn3r^M$N@+|o zLBt5{weA|W}+5|YJ~h|yYvGCU_E6tnr9 zWorm=k~2XiG|6H*8Vop@QX%;w+U_STz9zg+*P%Sna=D|k%Mlw^eCG|CH}GeOXt2!W>rjXAp} z9LX7$s#Zb-on|CiLukS{idiP8kR+2^Xhx^AbP?ejOjA5gEeM)Tk%&o#Ib{NEjG3Gv zvB=^XXBjIL9tpzUgU$Zhj42w;q|C)=VEf*W*?f)0sv8Y&23QCp#Xv|LUyFg8)^t8~ zKO%S;?d%NS?>yV>=h<}ank;S^Phezhv9-u`{Gnfv{0P4D~K|KTjb!FXwwUjNzJ zA3eGL0X`M^pR)M+(c4%d|A)_Zw`=nM#r7BZ|2aONMm&2mcvr0fbV`IAAu+={&tHtb ziMR3dB>r~i+3xmEvb~+`Cg1FC@9qqDzug`0e*0}a{(AWJv*GjjoAI}kZ@!-FJ|}n^ ze>0vu+x~hd9zR>tvRaa4gnB!}ooCVTd9<^AvHfB++!;L^_P^f#_Sv&h^29zofVqz7T&V?NiPMx|LAFrFB++`3oKb;pX__K-LpZ02dQNJUw-C+Zv`CbO zZuaQpr@iASz64=hS*e{(=e1K9dv4hdc8G-o;*Q^{b^r+t71OVkChHSU)YL2 zkcEEz7S9P3u%P{#=;vS7P(WyCaLs2%r>Y+{u-q%X-gx>v6f(<>D#6L5R78~~X%;J` zQ1Y7QI8ghEfk#__*LR~)X{TX$Z3Vkr)~nbzwMr6CtEJVW4LY9}64+W{hcH)A)XJ`-DNTu5|D8*Mdw5+u_1XuR2LSkK)0+&6O__xqTUEX z5P2^-Ml_o+K8O7;Vi`)=6y`iY8-e~~CxlaWDq2x(69Su4yZwz4GNw3-wznhxd<`M1 z3EAl-9)>EwIFd*fJQL{E-ud@Rgbf%+Z}*Om5Rd~lpl0}?Uv^r;+Yy@JROn}p{talJMkEnRpG;UR28AFznie!6186}Ep5&ZFieYFrjr23ynUeWN$ZtzGbprc;oTdvT zY#$8|AvUQAC?oMKTh0q1(U_n)&I*7LbE33QOI6^@9LJ>Jtz#04YcX(ZT$HmUikaD4 z4^&Td=c1g`8!U;N2m>RN-{X0n5+i`~`-tScB8>ylyARrbD02N}Q1$o3N`rIB6@y8p z%1a9LaiYRbivFZXQ&kN~GS3x8}LxCI^m$2 zsKTi<^CaFN?PuCvk;(&Y|`&Tqm zI<)AMOsNYA+6Vb$mrbSrS!~C;DB3uDpA$~!B$GG=RpQJSTBf)utpt~O66KuT(1h@T z*Js;(hW{H(>rnlic*Vz{E8;YPg zXJcZvB4brX=sHTzSB)#;s_(Xd8Rmp!n^sa*Iy8I=p4zh+Fxy_8}>1UhiFQO**0g|L37YAjjq zVwS}um%{Rph%zE?8Na64bbym2BAMirh)6P63W0TDv;UU93Zy}jiG9!j0M~t^ z3~2T4GoY&*9Ib)6z;bf{WRwSO1k4f!B1rLv-gJ*pZ?|VUWdIm)>J58D z=n%M&vv5wUCw-;p!NTmI;5<()2>Z4{w`w{haBRQipx_C~ZYXD&;^ycEbE>AeQzdPK zBluQFH^)NUGM+S}Yu|o0bZvv>rou;7khtLF)S~>;jK~?`dS@X)EVy2{e(5^tqK_`r zhEV-Ki`hKKk}63HD|pHVfgX?N@vyN_OB(oZdg!OesD)e;B z(xgX!8sdfI8No)ZPDJva3Wc*Rr!{AEXdc^z76{|$5Ob2KnSfJ)Hed^3@I_e9CXh^5 z?r_eM;R;=ogE^hT|sn*0QdZl~ASU$$_^*cd0I-1z^ zZwtmtO$c-qOxi0HW3?ew+ai`_B$jBx*&KnAs6=(Rkow@8)>MrNPjNQgXY861bO=9C ztbc(bDG8s`j3}N0ZcgZALckQ5v4m(-2~JaXtL=wsQ7tkxK@IZ~9M2F_RX-b}`CV!u zzZojs-%czRlBNrjX*42TV>ze!cy#8ouu`wLW_GMvM`)iJoez3sbw zn;Hor(*8`&(>mE?DypjB#hY^^iacjrBF~c8To)ITeP_>;ko~6KvpH7l7#IymI*Ihb zKR}NOmvjOgC7QubFinppZ`mm!e4lWsByZ-Md$u$nJ!KR{tPaYF()~%Ic64z{6;~@@ zpy3(q8(|-VW(0&twbeuXNI0D=(D@7uOF!p?aJ8M(wJFPf*;q;TC#q89SK3sl8oK|l zRTx<5Qyr)RoDA5cTzWuR(^e1k16gzjZ1~Sio3~1vfK8~GKIXZZ9CrDs1M1x1HCfnR z{6H3pdzJ33w~h7UN(DD4X!{e@)}!uS>Wr8pvx;9zA7ZaiE3UU4JarKVm4QhK+gy{ig6SYZO}r)zFoOwYPP_&jXpxb+Tg#aN_VF? zB2<;TBQ0wemr8_IN;tg}o;RX^D*Z9KgZf;Ph4-tn4L~7b+|$~esl55Y1KQGZ3q^gb z8(E+{;%x8LtD}qK|Gs>4^4<9r z@-#4HHL%)7y0*xr49-aOLYJ~>q?(G9{wnoh;+n#AgnE&`e=kxxr}8aRg++<_F@BF; z)0ChC<9EpPiRGtMF<16b%_E$q<}gZk^qTODq!B0D`7VO)z%D)L*$DMsJb(V|MK9Rp z&+&UYFXrCKyNG8bDN^v1FKqXee`OfHj21NC8AR6KKfJzVN(d@groh_ zccAYpg=nj^9Z#6j?v)HE4GeI2ruHJT$cO@Jk8Aq%^I$xu2`7KYk?5PTplqOZu8h^sgyQN>+-Sbep+&9PX_blztEp&0G0rH^fVQPZYHh_vxnsI6--IhixQ z07zoS(gYP*LO8me(b(JD080qTa-2`zuk?``0BPG=vKs)YEb{ob4U!+HaX! zm}JS8wg(8LAUKNWc}leFl1r$Re6sqcog z8vQM`7w?bI&hrmTNSxBY z+htq<8&kbDXfu%48GQsN9Kqy_%=`BI%}1?b#t&c|!kK3i^=UR$GFbXJ!ln$t!Ehvq z0;hD|lnOY(E%$Gp7JOx3U)h7hjNIDx+(GJTeMFRQemTbRHOZ38G{L!+#^$U-Yvo{- z72dHg&8DHqDxX&+Rk@{cMQZY>W?J>Y;UwWihzli*&TpxVXWm;l&npEH&9w-cF(JVK z=}xmsAR}bowzbH~7^gUk2|9D%<`~Yu75~G<2RJ!1b&UO*+#*iE*smmm@dN2%z;YHi z4Y~h~UNamTwiE6_lK}VdpD-SiSBy#HF)&tNm59qwk&*W~XiVt>iCH0Gnz)W^&@3#a z7tT#1kW0YiJ&6lR1X{Pq$1>ILFI98v-~>^&ZW}0@3^1|HUT5kRw0Rf8#WJ--D^aji zb4ahC8XV{=aqvCPk`xR>n%hq83sk<5YC=vI-V#_yHX}II{FmcGkZ4Xbuv+-f=p+Jd zo84ymu{McZb?L6d(5Q~i4jIi1V&%C{r7t675roP8#+=aL=A#*<-D~5xaYHIK3E1)A z!_MoX!P6jy72MWezS+M`BU|DZz|2kND zRO6~zGX`iMXKJ;wen(*1%?L@t#HMK%gSCPk{{opv^g3n7_tvD9wE)=eQieg|iSB~8HlPVm7oAq1Y% z35geRO1@|8S~qjcsZ@H}jegbNp`~3Oq3xYvRW~}!Zhpkv>PAf#8s7`5Jd9>~hkDr8 zP6|G(il4&klaq>wXS5Gp@7dfMu zj1;oTxSybeauVC?39rG7Zk&vtJn=hg=H7g9sUBYHmil5gLciNdh@SjEgE7qpV&FAc*?qt?m{EPaXB(IGMGPUXJy)(14K3T7p z(D$k`tVXv^)Yyg_RV~=z8kIfD4`=t%&aTxEZIVO#!Gy8fR`{;b)AzFU2~fE@iJZh+ zDCcyJIR%a0-AK^>z=5#duguCPPfE`+a(k(oyEM+T2!*p-EhNu&ofNA;s(J|fOZm@w zi~UQvkc6IfpfZ}1rV--gw}Nt#xHT^TrW!e5unszwDKc>WRWnZQW6-S{C-n<+f)b_} z8_b+~L7S^ZJb=07nNb4Fu3&qQlN+`7ODeC71;D!DyS~Xdzf9p;*QIgctK5@1Cj>3o zY?SVTu-T|ue!TI8wLi|^Kw~Glix=T3LzTDvF^;cOHbuwA6fNlAouXc3IF3oKSomW9 z)boN6Cggz8Y7Gp<58o_rEn^8u@uI=aA|W`IaH=cNTRct4xYWEU&U&0+H7~M;7TziSsj_OB!(K+-y{rGVWp${J-wKIcV zkec;D(a=+HGkocsE&z^gR6T8IG%TzdC0P<+V2d{x+@M%sx^u4M`pKo6v;B(A)!6?K zdTGqE4My2UIM?5ZKKOgTM4lJ2>1AULH8U>bl;Et$`!th;-{2IzMBBsF#aWgvE>kwW zyu}>W)t8o+ZAEAKxU@ErkjhI9K21coqrQah_En4V0|3=Krtk4w+80U$Ue0JHLwt=z zai0~LbSSm)#4-dbwv7t&HCa#U)OeyLur-FlF*s8K3?5(V$Cu_YdWq&Vi}XX7y4K{K z8b43#Lv4DYrqu?S=W@|J5jSl|bnQzmaFmt8Y?<9~+hO@*~rcZg=m(hkuqv1DxOSeNRd#B_W3-ns*k->$3uoO=al4eMSD>pGO* zgk~h^)ltZAJ9f7wX9Bjm6e86~`nw5N5sn$$id(6v-pRD8!8KQH!)$-=HBCvmzwst+ z+lt)On19*fSm~(Xv-$Dkps8@R%}yj#Ep$Tl5fSa$W~mz7waF@H+VVe;g>AT%O{*9# zVb}(+cObpErn#>+HWR_=pT?ItV;N~J+@deq<6NtTH==XX9hIix@T)Ih1ltH>4F0wK z_9+L;H7SHW6L9D7?oD6D{(9zilZ^)#T~KNF5VU9+@3@P=$!rZF$s|rMHH1s&_I7FQ zn3vj74$w5VUSH#6uNIPsp0`0Y5jrbAZ-B+k+_p2L)7ho-(ern0t)7R~4P3h)pzZO+ z{wdNnCKJ`g4Mg1<>THlf8?BZ~Xrcj%wJk1(VoS9_F~&BQ=_8Tlz^WF&6+o>8uM<#P zxD94$vs(_XELUaaHuL;pM^}o_rf(v^VSzm3bv6M*`>}uJQB}Pr3y+gkIXL~ez}G~e zoRgR&B#U*V2XqxQbhU*9Ly5Nds}^;rUOF#Qi8I0qk;3WNPYO+a6Av6+vWoM?7OHRk z!Ms#|Tp@^QTjFa12lZq!A+a<^oNcwLz8(#YyHk;6havi`xkmaiK{(H~9XzGFGD+q^}m*wZ@4>+0Aj0(xIWPA&Kh*>5i&g2%D!asi8 zaxhvyA4)H5fL(*}%SR35myf^nO|Oq8Fyvb;BL+7>o8DA-9fRwVgpdJQa}CwnZFto% zxay~8Nq_ChT05y%aah+G*vxF2Bdd4n)jV^jw0&LSYP0`2I8(u;OUUVoPdK%okBy_2 z?rCGaEjI}E*6x!Qinq*g@Tw5SSS*Ajb94(hO3soZ*4_hdy?ECDrav@+uGlT&45Ij< zBA;@c5O83#r|@$!9}_MBZ>6Y+S)oIQfKxFD%}i3YgqVP2;Il%oEI2`v)CSAMXinl8 z&ZwA|{uG?0LZ8}CbOl`&;`k@_NiONfBG)Yw9U=G9)!h0PEQ z0;ovE7lOqU{5EXq4aU)!%5ZBLZ%W*46_3DzcrlfMk z!`Zi$o5OdgYobbYaaFb!X4|F>^Pp8R=R;6%S_=mfm|X2m7~Q^kXm2-&GDOb}PN})y zLnmePRM?<9Wyl+VVS?~hT7}(f(3E;|k5+PU<8c8%4h~Px4)^yi4i8YHCDq;m)t8ZU zYy>nZ)DUi=T!)1$^nad_)%wNg9lCi4%LzCc;7qvNSSE5t;-Wh#ImKL*6wP8#)p`*F z71RW17}o%cPu6f#7^M2`WrYx26|fD62xm!@WI;eHhi)^s8N=(rTe|?`IELeB+bKaX zk7rgEc^u+6S%YW?pWnLp6VO%Dq-iJsli#+0(RS}wiW?5zq8!T^x}6bDD!|O;QH`=C zYv{Y9K{YqyY~K1`OM*F;@vKxEz@-ERbfch3(Bt`@ZeHyswosgHAtGZX)}^jX^pb|w z8%*!(!D1Q8D23qv{XhTv|Nfu<{a{x32k5C{Sc6vc@H8GP`cgV5;38ZLBGG!IZnJK> zilnc)@aFp2CL1iEM&Gpik2Vxo<-5Wxo*y8Z&wco21&7BJqq z2-@EZ0-sFGi@pufRGEJJdk8#=Ve?@G@DlWv^uwXBuW!*eVPWpc*dUGs;VD-9Qj_}) z*!u8{n*JDQ`zIR)^B>6KPlEA^5HfZG2G88Q@}J(ACq0knO(d5ljvlqRswjlDze=rc zC5}tUl4Z;ok4b`u-Vij}8+B3%Ku$D8Th~^u)abI__V~uDxK_qC7o{J$54v*m2j067 zrE`xoh2R4*!<-DlGMwP#BulN&t~F)_Z8Y2z((munGlBYRe#rK)SIavDyR-w!&DDst zpkf1-HeP)zmckU!N~eutZ(?IWypg`!)W`bHqJLXY+Z0GrMgR?*4a*C5CTgAu=u+Bq zs`1w~zgNJcRa+VxByQ~RNO$Ay%;b7`GBRE;CD?le% zOse5|xuh}8L2n6dLR+wZcK1oKQeShH38G`>;7rFl^}B5V2sKc)Pgo*O#*D!UR!nle zf~MF{Dr4=lUcJ6C9s5Qq@?Ie`zUE;E4vi*%&Hkh* zT|>mi6uH+z_s2W^4a!Ka63cq5VW}-Z8|2D>wm@yy~R380)Sz z4Yy=y{ScK{G!EPg6^$EJ0o@7MFl$t)cJ;`79U$Hn|F1 z*A?6pp0(aZTdQUiSQfsV-4K35$?d>gM$&QLO%8;CZfRif_7WikIQnTJ0z|z8w@b0@ z9Bh3#wqA1<<@W3oMV??uT%ZZ?hroq5D{-CuFrZl?$?J!cKH53`ij*wG=Urlwu}` z?4u)nUIxKX?aM2*T)^8s6MS5oGDhf1u!%Hbi!e{F?lf=9fP@jb(O1O>SO_}JAi+b% z5;AxK{`2tLVgsf>oJs1QSa}q5uc7;yq)jC7K|LZJI*;+A)1lVS5mNZA=}Y4YsgC;N zW2^oR&{7X7I0bf*`g^@MhCRkFOL3t@ACQ!UfH>soB zh7=|{B*K4(EmE(%C%Wi@moX}OsF^1gyA_10qG#x(f2a+-#%;U$U?+&+=OtS+jth3k zEV?#b4br@#6tu@#7(xkI7y6_x8iWAHsN4?b6|6Q4IyeQo_wbf8l-qJfkTw%_NLmi3ecpp;a*$ zNtUyeO&8}mCpg(>nbP@aCKdYn4brcW|E}I0By=epbEX3$lo5pRoMltHKZ+8_BKJsY zPN~Z(%>ovD+oMQh6vZXpgD3T8(S*S|AvB#@sNv>opvkPGa}pPz$?UUClJ}hy@#SeB zg@Fi<$a^_>B8ZISOfg~j1~A8wNfK4A+ZHE-QfrLH_8zpunuzZ>D{`=L`GD3%4G=PA z%_>`gG-?P5X)27+_Hekp))ew*dDoJLh+oTl*b0~z*`9!FzCllyfkm!P=LX)g?2Iwl z(nb?a{c3*zueqvK!z^m;sWZs>St>`Ru{Gf=AEBRnZx1gn&-Q-m{Zcj2tFFGLDbcQF zrNO?v!8&KTp)tIL0z#T%!Swb=+8zSK4ILs(esC8k{VuCX%;tFknOx1eGUQ|XN$r$$ zN?8|f#Kv8-mV0YL3{RvbLn*;Gp2s0LOvRKHfLc6bG$w)XgK^@4Ah$GA`z=8P7^-6Z zmrDWRrdZ}j95W~RDV5R&(>I80AyLFL)%Y>ZsOmp>uo*+&EzW{|c-4wb_f>|m+!gSY zW~u~Eel7F?-dw?V0qV47VImfTovz^N0*yHa!a(%Cb=T5Jo7bGNJG{gKful>Rnumd< zrDTRiIF2neB=|uR4`w^CwGv6ASq3?MH8M`SL~&jK2M_1&k-jN2LOb8lGP(@ZQksbm z)55Xn-W9B?XS0v)*J5`D)5c_e%}Wg^r8guaLg;*)50_u%a|=1rLE_ano%3_>#H$QX z*8EtKy4I&8CzvIn63;(;qjT0bz+g|N%Q=ludb8{{uMQ?(iUJ^&5Y6s>i;rDL!ir)hebWUE(a5>UGHVHD#@-Vk7Kx zkERGBfd6*1A)cpaUv+p_9$NDw3)8J`1nRbz^N_WRaKQ+h_G;tj`pa zad=FVC*!{He$#8oz+TwGZMdn@o`<-u-Q*LlV9#mhQg6ZTdtS^@1`b?j= ziMeZK9Gy6sLrh`g6y+jD_#l<2t2K$=zst&tS2n8aibm%c(hbcq#LjiqU84ce(zDch zv7Noz+i!4R3rv|1wv@)iTuFFLk!1qpMdn(GJ~9tl3x_>?7jl3bVMU-2<#H7Aps7oXtn)NL_ABd|G%3N9umoHk+K@u#nU(j&*>5u!Xb65HBg=8F0 z2{@Ff+UQ(AK>A5AxuH$%8SW;d3G1|ld_dYWX3-HS zS!8%lV|^J>P?p)a!3tWD84S>d=d-$rfb*fDtVq)>l(AZ4VBJMjSo0wq{>C%Lgy-U| zQ_|U%3GXAcG0k@n%h29W=UX~YALa=%s~yB`j>)Jya~&`D0RbBW{YO?QFSL!u^V zf`PFo#_s6YxgvN$TT1?t=tpm4Y;9*Qg__3W%h^j2&hrtPFO-H*-mvw~h})3EFvpMK zhPPrGJ?D{ru#{(%{3t8ynXe|>Es)!p@{({%>ZA_ zOpZdh;ofqLtK9?H7IeY{&CuS^uw2AALkYOBD+aI;SRkI`{tSC}t9?wD4zs)W0rIi;~#1+_~ixSbt~vBOdnW0!HmuGt1* z#iK^7x&Y@2N2=&{6CTaz9J>Ua{-|Tr8xMH9VmY);)5~WI{W}T7*O|8auNGjCf5iH7 z>r3KFkpO3CI-N;0gOe&|k9Dq`5|L1G{hAZuTIElQK z+FvF*xm7ltyZGy}o#KXtVacW9I?|nwv_sVS`9a&7-iEXBT=CIe<;L1{LKMoOPzt4` zTWYY99=^|+D0podeewkT;B*V8?x-Gm8gHYjtG&;>%IALNz<10_(>^(k6h5dJGqxA=rbCf9uDLs8n0hfXPhcx8bE3hj%69Pnuxd?bfOYEy14T z^P~~=!_(sfwE@;i2OPHraW%raeks-7!?^;idXY1H^ zsBef`AKI?+Yoj9Wtpu4h27oe+nrG#M^2CDf?(^G$XA=|*S zNT#CaF;7qZ>4n_WQ=%>s5=&FmF;UNa>v^2iQ-5qM8t@-=*{+CM6Pr7mv4oVV?#gY47;8mkV56{R15>R4Vp%AJQ)Q?XKwzXRm;~d#3JJquEl4ylqcbI0 z7y;Wt#2OqY0tz>d|A#e8z%`2 z+2)DP8FLywhYgVfTMgZ0F;5vzUg`AF{2bhi&XiUTX8@cCu|dS9G0$+KO*B@YvQt+n zQExmjCTa2No4K$f_3h*hH+18a6-i_wBJpTKIl0AYI)E#UoW?RTU?z-1rdyK>n@0hy z%aplo9d?A@9`^PBhl3qQ$<|tJbS3X~a*CrCRZPbM@rH#Mz^ zSO>Q-UWZ4g`XUFvDNhFAuIPgX1I%oZMMLKkwqzbWF%8me3htm9p-3YX(Y)HzpchWX zU&)(Cr;dzog2zoGbadJ}Q)9cOXxhFQWRQUhSI!MzxOyY>R!1`TGiWVo(Cpo;I?`p| z7H-Fyfcl$Q3;8iOu(q8sk+>i7489d12Shdx%Lono@V~)u=?2#e?AFkq?+H#IVd9eb zZpcJF2;#h1STh44AW{(at(};zarfm@P}j|*Bolp{=Cdk|Ekz?6v~PsG98ub~5VLs$ zl`Y;SwOvn~ro~xKxTNJK%~GtIWN;}(t0x|6X3i>Y_5J*R%ZweiydXkQmbsfv=lXYe z)u}#lx9pz1r{-o4F^+mV>d(<>&)J;HM_b_eOyUAEq#6P-7=@WjNwjA*XouG!h1cAV)<)Bq+ zSW9*T7{|b|A*5&1u6oWq8xC8LH?ZoS!8%3nRB0WhAH9Dvv|t681g#Sgsf4Ex5~rz& z;HDOfA_ti7&feV7_1<7H&>j=;Jv3#Rht+eU8up6DW!MDZI#wQKR~(ZXTL9ZM*nsVL z+2au<8~W(4tbh}98z4j2h%%C)^}$yVIgjx~CyFm@ykRhD?Y(*BF!rwZmo_bJvu?-h zVv!ScWFTlGx@W?(B}V8-2`ohb7#p3!n#PS_t-y0RRw0a@?Ru5IPJq?LWXfWkHZ~Cm zv2tGE26=W=X|Inin9Ww`hXKQdWai`>A|&T2j+Hdz#N2KpTt;?d<*y_f!PgLgWm2T6 z3ksDpA*jz%UM;uk2||_|@=7kZEFEQ2n!O*4Q#Kyx6pZy-jH*Obx%=tiJWt#igJvdY z87}#clo@KOboFVm)zSsOj5j~=w49nxOk7=(L|zM)Ap(uRX$h{bx0*F#eLe^jaI&s~ zi_!QZDny~Si{bCcH(@MW@obYa6;^uG0yLKEs+|?~)D=r~Rh=?dnSP zu6DCT=~Oz_kFi;m5eoHO`tTt_Ij5PNpx(a;u&}ty9<}*ubFKVUCzkhaIlnW(cpSne zq}Wx+I4<%R6&^k%m@|?t5X-{3RMw*sjTd%tGZ{g+j%j34ZiGw{!2F)1a}Smv=_C?# zswf>0&}+f#O*%P;vM<45!<}IG0sQLYUREoEfVuczp2#*R1!JVy0@7w!`4rm(#^y+} zwF{+#&UgX+E>~%b&@!~aqVPSlH<%h?*ts~oKNYs8j*nI z@tEC|N3tYi#dNlX#)Y&t6>_7NR>%)B1H>>VupE+P%QPq;s2JyXQI!p4e>{$DUrNCF z&@79-jYUJKZr}r=sWn__%^D9IV82{`_?SwL`2yg3u5fl?9}`u))J828iwrnrMi4mZ z*+e9@PD1<6$YDD1mF<>EH{mICMxoUHAwr}PCt4w{714I5LJ&_9hZZPkdMS0zz?rCp zrL?C}jRtjATD~!R=N;Uqj44IDn!aA2!Xua&%Iw(Gqf`fltk-JSNm0qNKKx4s*b#6V!LT$)Ot0J@V3zv2fw-R`(fZ7oO zGCIhqWueL7N#=MjvU)o)F5>amuEH zo#D=KFx(vscLsExb9Mt=6p>_L0k>N%oYRPAQ3)VY9dL?6m7+BZa=CT{Ns08dQoXjR zZGx?+aEXvm=oME0)BOMi4)e>d*yi=Ap6t2VD(bRjn$%7yMhl zV0mr6#iG*Q1Xz^pc?>#W*}Ak$W$l4FFRxbSx z*>JB5y z`@TJp*ZSxbD-}WSAmHst~V<4c3ze_b&VAD zAmw3D*JhN$fUrO7_?N%b&N%>2MVqq0&?xQjCRvg*nl(AwJyJMMON}sKES$D@DTXN< zh?rvt#;0ayuc3g+z2xO?ZFU*^__0o1dqj53GAbEgZjy`{Crk{=)+0MjN=*d78EDlr zDLY(YDaXM3TDd$A-l8+#9uKro18DnX?r=DaPD+H_;Z;MLhLt#FE<@HX}o4y%{Hvaz`qm-&;;N6xm=9WPD*0XV=r)8F+0ns7P@ERs5kj|q+ISUzan z17)=S4(;p5XC4-2iRq3E&8AA1(D{cPHZ{QAahkD=aTD^{{|=Xmh%b}Zg$)A9G8D5k zh3iFDFVlmm3;3vcFz+<~H9&*RJF_FYCL~8wdQ4 z>6DWxm^18S#$Ay?PPkctOEW`4B&H#!)*>2 zRGXX@Htk!w$4X-|Y-o=q``u91TmQSlyqFQCr*VSda-m^(VGId06FC?c!8Bs|8Q&7Y z=EM^`5l)HP8%;UM`;rZyHso7zqSKlioVgjQjLd#^{@Ve&&C1tEZM=DDjlL}M4@Qu@ zR9iFGpI*%7bC&4=b72*FsIT^CAJNN~Xy`+oD1rEV?msH;0(xc$L2d{K_cFq{<9$>W zK$S|xe2)2|?2}Hpy#el6SxnG}53sL%YCK=v^N$~U=;O!D5L!Y+%qfI98I{(Dj3orX zHjvWz>^4*K_ZqGnj<~$YGMY{AL*WY2|AD-HbC4kGklU;Od;dD{z0@d-LuPy>!Ux)kmY)KK7@WOX_J6O;ahiWyHOv)PMdFGs=#n z!~IhYXRV$EzLH1r9 zzBwONaBgR)3&xIdw%8AjV%jFVcfN7KBu?)+<+q2!KV*C_7(;WMErN5JPc+P-`?LZx zgXE1(7-))Y-c2|t*61?W+9uU})^U_kiCoyah9i$kfgn}^+AnhkvfB(ia1%6z+ypiu zRT<7jhicdmn>wNf81U6E$7V$9lov7sRfCrok2@H?F2KSQzB$%u%@_igS^EH zBxZQ$`HK<8{eIsivCo*SI%;nrI?;ibU}MQ_q)=_s?uKmcqBC|zSXHqpCA&6ZbKu&; zf`rA_gh!5jj5Cz>mctcC&ovuj(ipsTosj|3r_4OJBR@jcc4huXVy1)3AVrrE+TM;5 zGNw3-wzng`z4Hyc(gWddaxJ#F8p+ZYFxMOOH4Poya$OCIV;D&Bs+K7s*S8Q!g-esT zel&T@BxFa*ZFy`))e#eWH0SgNLrM+J2?N`LcV`cNdz=?+-{*@n zQ}qY3ICtKERl1#5ovAA8)6y&x zA+lOpI`;56qC*3Yo9@trtz+e7kYuEBZj^~etQKfa5x;>F zq@Q)QjYWyR^3ye<(`sjTNU2^phUA)QKEqitC!EGeW2E*R z=4wcI%vefr){Ui0Zqe2(zl+Owzh2yWbyfp4BORQ$ z*Eov>{rmkSN4=SI1*%h@OZFBiO{#)NKRc$Xo7+uq@cSMp#trY@WmNHQ?>id8oY5p9 zS*4>0^q-LqX8}*nj;+)Cb$d$cLyw0>nX_Yw(y6JUTyuX(0dulmXK{F=|b`uUwE(U*0a6h zX;z0(q2j*1dRq6flpM#`t*-R0#d;Gh6A>*DP-umaLcXA~uA2=)3I&3y`m0rht*QS$ ze%bZ9{hvKa6@#}Y7l-G4`CdL&8_V~9+b_0<_5I&)_sjn8bA0x{-#fcNZ}*N5;Y3$^ zfcD>-C@}i%kB4XHM<;Ln0zWFvfn}=9-sx#miM>4c3ax$k5TU1Dj0rS)i5N#4O*fQG z*zZlWp>{L2L^a_1Ci)%0Jw?7~x#t8?d)r@Kqyj|>x39jk$7^G7Lx&rjw=AL#yDzUA{nfMH>l?rIpQXU9&CsOrrQ6da4E_qgkS;x2t^tFrSJ?ZB_wX+UDAKCT3L` zd@F%iKjb}x2+XEHlIvnjVws{Tk-9__m2R?%iH%n@%mn@P<3|*w4HqJ;uf@x1H9%*t zyh@m}M8|kAXB`O{7t;VWA2ao^BUX~4|4=g+oxDaD-yfpWlY{?6QG~`=%+}V9yZ}UI z7b*>7JN4EkebkDAFc_ILBg;N(uyPJqF5RsFQ@%`rLNdu0;APMkvlV4|k@XdViap>= zRMBgn6E&C=r()!$moElVhLZ#5TJBFVg&m1!40L!f9O)H*$+_)s#u3rC>=*hbzu_aqcC^s8W*Qg&YUKJ?WNqHk+O){OMAhkjQh zN?z=uDB0|3vSpQ?AM!Uio1%Tjt||FcUC?pJyLNy;=_m%2YQ0!1Z-1M-b$0l{rCVSV zEw<*Y2a_g5`^O}x$XSMpe9CbGcN;kIV@jeTOWnL|2JH*#lt_}md8Li& zV$Xmkl!M!b2igWY0dc=o>lVa;(zrsfmHwIym0{vFt8Eg*HOiPXA{uI#m@jZ)d%{eZ zO=BIjMFCP7!w~S!Pz+Z*CPt~pXhPqU#MRNsdW`?SJ%gpvK2 zoXPq)VMPYv?d;ii!eY@k@&GQAXdKhQjNL|(4J2p9I3;4nn2cs5orAqo>TrBw@T6=b z0vB8n!73d&3{80xQCRfX*2*oRzLcS_cAM}^X4_~ZhL~swiuD6k<>N=y34cN?aW?F? z&8WV(iTj=;imk6Zg!)pl@50?YS6gBmH^;+pOYy2Aes~m)ge18qE~|0WG~klDwe<*j0lpnJ#veX7IPudQwO(aBgrgd!FuIywb*HR(dMn0gN+etU9o zczJaCGL%o+$-LX57m6Gz$z1$A{G~4>mWAkJ9q^vOGxOtPZ?lHN>B-r}rRqrqll$PH z=8aY_fBs(^{{_tP^5weHG}kwOarqEF_FQ(Zt}M0bFKuUU&`4)O7z~~oGLD{xof-7J zRW%rHKiv9b4!I8(9i5KW)^y0NBOUin;%lOW4!K2hniZ0i_v9)yt%cuuD)-H{{U=D< z2M(Ap!dkmU>%sDN(^X@-?MnLffNReW&wf1GZ(!WcEq81dMN#S5Y#ePlIKFNuW%oU@ zeC`LzxAPqhH_^wB3I+W~D+xXIUppt2T^rTKUpqg!q+UJrP;PQ|DfK9tFn)`<3y|oS zMX1!0gR-4QK-|QGuA@+=L<4cq|7auX_RiN3Lw|c2Nwo&Iw$ryX@(wPQY%f#qGMH{8 zLGRAq^joRwMW}|L4ig*`O<=n-YAUMmR-zgU!D6aou!=Hnr(|JlEgSS+PxW$w?7w+; zesOrFC&=9Rc_Er_q9^Di^E|)a2{J-gb`)LM-E6|H)H2MJh9e+Fta%6SjGD#`_-pq% zHLUg3Pl9v0a1&uP7l-(l>zt0qjl8%&C-1q^DoQvr(UM3XrEu~U7UY1yvsCL55~TWoW6%5ayL0u zZNT`WG&KN(eXy$YMTz;xQ(_*%sVfzo$KltonU*+QCP?e&P_XW&qWsBJtw$Q1pwk_O z=Ce{^6+T^X4pd8D%d8j(su2T2BSb*q`nmlU2#vNvis0jgy)gc{wf0qU@0JkJl?n9v zdKgC4!#i=513YjED%UP%B-=tvsfJZuPp8N->SBMbK8zJonA@qM&l%hTy1-K}!vowz zvMS?UYPMYGsxsLheT@0#bI(u1`TymNq&eiq&eKO}WBK|2&a>U!7nSq>=exu0FX#WC zlXu}9gaX8dg9=JC z=%`iR=@As_!I^u5EZ4UdZ6R|S48P78lT}&Po2G1x)AF(Yz3H!b(Gtu{gwaOx9h%mw zubWG{*di_;-03zk{7^C+z~xzV1iXzl0KR9w)ONv*Kn%_5^t1LuchG2K(=Q`b{m8pSFd!Bj%-itxwuWIu zTg6r@6Iu1phRoAWK%Q;}O$Wqk1l(az0)Q(Cr%%E=lg&S7??NYCpE7N2x zqn1oXd3$>~sla_K%)oFrLNx%m8=0b*aQUdjvO*n_jZI8)G5<8)czu|Vr}ZFz?UdCe zE-ZZmA&0Z1)itlpaW5d;Ci1!m*jM}4WdSR%TWL>lwTvw3k%={5_T;IJUO#&25VnsR zM7mCaReA4Vyz~YdDF$+Hme%+CyJUBMkLIc&`kPwx8QuZ-9bCoK=DVlHtThmxyK(ZE!Lr@6UAS_tF&gHhvyP-~RINoBgkPsE>M2KWu;O zISu1!p>)R4OH`|-Yi;zu+AOPihc@IlQ@8g6?fEldUZfVK?cvUDu(k*Fj+fV4UirHY zm6t=f=n7#unA1CfSq|&)?y!~v{GlD*aJXb-mR4I{_q)|~mjk%y2w*vs)4M=f4(jmE zpaOWI5wjFL`)r=mlt9iHYr#@8m?4Y=&88_qb0U-=(Lq3BRd9l7x=fV-hdeBa7A>BP zFrZ+WfSpR?8+|X;d$v)RUttsdG{L!B>>mT5j-&BCoz8y3lJGg^*N+O{J63;GxK>MO z2YO58j1|&**sG6_D)=j-8S4El>v=^Z&;0Gm+RDf+f`7{({M|YFaqrF1!QREu$=lK2 zGFTdIrQd;zIw&hYnhx3!a%|#)8lnijIoLb3$h=4sYj81)N3lOX#cYJ?3-^J-v;!0*^9H6 zPd`{U|BqWq{L%)(PvV!1PkXI%_pbBUgjSu==?vXkiQ9cbH;U`ZHcL+y@|&mD*DC45 z;2s_emKKuqHaG85jgu5hdIQyhxzbi8m_LmqK&n_D0r4#56w{U{s=n#V&93==nGICx zodZqaLKNE2W8H?&%ijC<@89<}10BTQqBd1*+^tqae3_b?cc$b@LPFpF$_g8C(}@M0 z&#H;0)_dQ!q62XC(f90@+z_sB&}PimHbKg62@kT(pPn3`l-!WCZ}XLab00j`H87-$ zy3KTmD|34L8N|ktQEHMR?cCsop+gN|&X>Jmf45q?g%@7-cD|!MO_aSOzNL;XQ)iQ3I6qDU0Z=lGw7`Cc6 zD4KjrwV16Pd6*J0;Zl32@G~9Au7@^|KKt;ZNB3%={hTtJn-%S*%%W}c{MS^bYO?Z* zJo0)_lS9_@S|_rfaMwC&ITzS*q2q}{NJpx}HrJy1k%GIjnx!TVAwm&)Cvf3AJs?I<#^RMncF`WT6LVJar0SOEvb)Spn=I>z^W?V@2oxS(gdVjoPhHfqu zT1h-QyU&Lv+KihRnAlss7A3;|8Gc*Lb#Im(0M<{JYa#s(!-LAzC#ell0eyk2_mhE^v8vJV z5YsVX(@+|R5J&i4lPhS?+&b^rJnCr%=%MW)>is|#y~faoo2Vph=tB`9{|LBV74{Xp5J;#o z22udf3x0$eA}*E60{m=5ZO=0;=rBz|M%ss?>Nl_gUk_Wk$jJzuL$q2Hss3_?rCd=9Tfpc=o}C0V?za|qQ3qjmBiWM7$PAEgJ)&E2^to&x$u z%dRh0c>zLdgt1!fBCpi!~D0l;m4W$tLOiVo##8X`(N8%?tguj&xe&E!+ce~K@h|^ z$77mON&UksS4ZE;H5&kXM%TCl=yJFBi?Y8=*{@}zZ5do#)&C!+ST=!O9u~HOch_yo zqfqt^dy@c7k(1clkTjhVo4@-h76Q)dH^^_OC%HnR^?=xTm5C#-vfbXA{cRQQs3{Ur zt?_{G1A6PkyvsPm3v0BdPes&|#u?X{{59Ai^_?*suGBljc#h>vjJ$~MZ2}7}R;a?h zLEe~f*VX+|t+}^ygxsr&ShudPg4W z$U<#m#ja-b zi}W6BUJqXMNAHyWIX{j2e=5x(%pB*BUzBd-3ec`QK;x)P#ZaDr!B( z(+3F0IB(d;SB~=T?u7JZkN?kepr={mLCyR8xU}If3&s6D4e~!D@|N-IoTW5gdY3e+yN~a3mMy*qwgbI153SKnXz$oQkZ>UUaMbJZ=8Nk(>a5fLg zSQ%gY@y9uMQPnErl#)z#)h9>Bi1uIa<_G*m=lfUG`5L%zPP09C-3;pa zPlENMx%e`oKn?u+1gh z>*4kn`Ttoy4aacRxRbSDl8!%=7TM-1HfI@?jMHq|j~OQn1jWD^kxv64kGK}Bh^g!^ z3Y)9CRwkw}%f~QO_kg*4?>;$C<+qTRKr`<$8oLoJ6>&Wc>vh4Gfk*(w@wf72M1 zQ>aY9RGS3~9k;2|E@Af@y%pQYFQ>VG=1;@=&)K7_`sHWU{;!_@WB2Rfm-`=|%l ze2imn1E|;PGnSG&?F9i!Hygia)+1SxGn&bW6RhRTm-FI(sokLSOO6oE>34b&L_ha> zzd*lSG&c3jGK(-TZwMd5iz$)ts0)l6(f~knfA5!njn%3}{*NidoqC*QV5R+USiAqf zv-9;A`TsdSUFH8P%@ALffiKIzC*K7Xkg3G11U7VppRfq}*RaP~nxF}oPsz43GEt!I z@-RZ0PYXF?+yvw5Uwp>S>mCdSsMRGca6f=M8^~&&aUVa0{8=_D)rTA)!R@t0AZL`%Icv(=NFNb;m zO6&Hr_&r_u%wDLg&75-C^(M0yucqy;>&o_nly}wEb;iCZX6%|abLTyT$C8VZ6|oUC z@5zp5JIiHbgy#?!_6&+6*~=cp`Oas?1F>%826e3T~@|O+{9xFIWj_?ZitxqWkvk+ zu84+rtVxYBmzTk8MoS%OEf3f|%8vpg{;g|T2pXYNA|6ju&$A&-d=l^>i0Qs}{|5mzI^Z)%s zdPYn0>EkIL%UgKhI{ar+lm1Cmo0jpqzlw7wwrJ6HI>*TTm5pKW0-dI%En7C6V$Qv5 zwB}zLH89p1FVwa)5C+(*1#awAtML+Sm!>(M3%_yoTN}Z{n3T%_G+xcUCr&hzgx~lV zwC$5FWU1G_CmQ;W@CBU{R(KcFgU4MEYJqc4tY$1@JQQRIc@Mi_)Cl9A_;3Oenr2fE zmiO?1w#^Q$uD&9E&#vjmXH6Zfz4|oWtYdJ;&N}s=AzlTT=F8NH_poMk6frEhz6Z%y$4>zYHOs0FfSVC z$roe$pZU|Y|Cd;jNs)@j$^N!#|Ns2?*Uzf?A6`8Bvj6`)pS$>T`;5^N=i%HGIsfN! z3G;gXc-LL)Kp!J(!k=RsUO%m15@K1YEv80O+#I*(V-G{5PhxbCXS6$vaI|aL7 z^D}~zln7BfT~TFEZV2ZzA)8Kl)v>+jB$GODRTzk){@!@)kvyd_4mWA$;XW%e*{FOL zd4eT5mmEtnHITw*T8>mU?3HSNgm!3GYy;Jkw(4_l8CZ+{<;P87Np)xYFd0|^yjLu; zns~U2i1>_RVtFqRif1Ig7R7vE^F4Zt-iGm$>0g-f?!UruJ`CFce#fb_1YOBe!mHBRd-yP9edv#YYtB+O zU7Y8f;AEd=LUK$q8DQR0H>m!NN#0 z--9hA;d7e7WciNcn4A($fxs+F!u{gXlKz<~m1C=FsyoBV6AOxyZi^FXl11KFRDh`HH#~OH{1x7!2#p`O7`lwOH zSrSImj?iFCv%wgPnfDy?si>BVNL+dHd+-~f`E^1$igMKRr>{p*aGX5V$N9ZVWiwpl zH?)ByJBJ%aXk$sIV>{;6Db9;*PrMU^qs>jYg~xg!A%GY&cAKFqnxLq-8o}T1(C;WN zB#IK$Lp>BtcCJu|jx_WmRO-SeecE*B!pD!J(BM)nIuQ^$K~ePHbZ^Kdh|q*)NjHcn znyZPQ%Ng26(Hy^b-_@2i(wQ3jBEz|uG1&_qr%cFypRghWS^Bp>mMIW=uQ(q?+zeK9 zwvt6U4}TNzPsj{ihWRs+cl9#cy*1Qx%{4B-+dK7c*2km~qkACJ6@eDwx3}m5WQFy- zxLFOx&}Crmh@b{_tY&&`G0@9kf+eo50ah@K?kPKc_06j#ig9xt^P;u6)`~5bpXGL| zP}z7aLr(?jz3f(Tg9>EF$z5_RdtWLk4VIL<>m=PYkeWHTMVd5dUR@+eyS!MYuHR>} zCKOLICM1oIS<q_syD`B0DL~T1gv)DurExOegH?C|pSo4xPOSK_k_bc@xY z-r~vG{^8}Tlaq_pQ+Gi`5A`zEYof@6@tC|~Ot#HULzfNm8|vAN?~RZ=+P03J!~gBc z!7>grD))aq-SB3{X8-9%l|j|B>g3skuz+<2aKZd~t$g+U$+?n>hnMH?UcWy2e_N3I zG&2S;ZuZFSho4xVn*QQvGH16T0P!QScR;oH4eZ`$Yg z5(ZBboI9;}Ib%0gSw$B>@8V7STwjHoOvNhvnj2M2cX+m1$UrMftg4Ok@90-XGt}Ga z-K(+7)04AyITN&K;@RAxjd$mVXO{qaJSNx;l8Bm(4uF=-3G;mR=ZC_j(N|t2J6ZScZ(_00KvkhoC=}{) zdUi5@$SkH4D$m)F#-w%Zvd0eo=!%eCS(lUfWYC3&psSowh+gv z2!FdmCI`}%v!%8}vt84YB{5A3ZF;K``s(Dv+1vB)TO??)7;9}W3jO1^Z+|>pLRZsn zVn32;gTB_DE?Rx7J>M!WJpOY-riTsLA?NXix0!P?z%fojg0@ByZPmJ}&Ja!HHrk)R z+aI6(baj1l`Qh^9)zR6}dA)vHOZP=5_3Z7@>kqF_zB@e!{#;EkGaS7p+F^zzON(c3 z^bcwcFCaAvnt-VqPx8-S^jc6h&K_&T9<6xYD zKbHP-{)&D3=FLy%r`P{I7rMqFmfH_Y0E3I}NpkxRS2w41jBka07c{*!TUM&9)`G_I zn<~|{Z}c0S)^cTIMA9nQ9>1wcvb)Z-n0&+)ob+nBe}v5VOCwb(_KiID$CF>nb~bl+ za#1b`UU*Y2k?;2#Q6X3Dw_Fw9?^j4H#i|`ws^=H`Cg~(vwQKe598M~GjyFJ2%%-tC zj(MT>xqMOegjQRVe^6_HQO$f$#w!DxoSRzprF0a+_7& z&@v&}nctd1){n;G!&c1e*IxS$aU@#dVw zU4JXNhwFvioSLIeJU5Bvl(Sz*C`n0Ux4UwQ@YZ6w?5%{1&D6JENKi>8l_3k5R<3&# zw#;~89pmF%1f$=7ul7>gbx&V}6dVYZIOnp9x*^v8sFK*^?a*j_m&Nh%*p%O_8^mVH z4e|(UQQBuHUdSaEiy^v)Iap*W1JM0 z>UMpjZPQOd!bGY?EEmhP8CWa-1g!Uu%~7Jwedz?c7j-z97UdL=sE#Zq?_=4p zxnzpTVlJ#!+g@Br2)Qux)~8jh>3pG#U5l(Xzwer2DyS)^sk`Kc9f;KqnFE|Ws>dJ<$u2o zdp3$}BMIQ=)PH-nckr~D|NY=g{`ZG?+UmO2XK;V8=)}(~2mI%qUfqz<-(7w%v@Q); zn}XeZ?UsFIZ=9EieSQyXQmb`<%@mTYCEjwdw}M{R{U%cWe{SjTf2(GbH_uh3xis4n_U3fLi;kn&WE=I^g_@S-L&U`Qf%zQ;XK6~mcMZ| zy2z)0DJUyG-*W)9?dyTf-OqokEhSL5C(b+7ndO>hgP4l(Ig^(JN7Ex6TTX z$(QE=pL+d&Gj*Tr)2{#TAMAhqbxHq!_WbGdFZ%yOJj?6$Mc=lJYd) zC)&17S2xq>>FzZ>ySEkH-;G6nt%s+3#&GmXhr;vjqTt2eM-Il~kF|gnn>0h)_T3ej zIxlfDvUby^x3%uUbGw{hHnnb*E=J$&mWJmnB1-M-8gi14;93-4b37cuX=FXWwlfb@kG@XkHY@Rx)ltYwcaqM+vFE+s`r*&0&i*3=RYvYFMC8C8%Bfeb= zZ4Ir8pXDFb=qi6WE5o06daq-#;tXH66r^8FKPBlTTGcwTY5U!ubA}aqD@<>ZUMtOQ zM1@>+ZZ~b8o3AO2m4RI*#95msd!tDI1z=7q@jh#OFUOy4Qm=TTr_}>cI`bw zkhrpoOWq}XwZ>h-S1or5Uww|33H7j5jOxBE{(-$iJaDyr`X(C?o)D=Rg(-21}~nGB-A~c*goCthD-~ud%a%A8?yAzQv8r*R2hpJ=8cC}bd-=%l$Bc} z)sP!C!dH1r0Xlr?yURiLigGVD?YsLt#OkvVNsf>5sE=NVyXfhQ=Xoo_rD>;OJXSw6 zcAn4}ZN=&=(bQxcx>uvGvRHkjzg+(50 zHV&ijG$z390dROVBc(44HUonGR~-mHl4%VDI?i@O0N4QT%J{gR0Ii~KtD4?6xK1K>+T;F`Y^Te-R;HM94xSas(*0 zuZQ5bLbO|p=0X#F!|1Cp<^wA?)MpF26~T9$!~_d+ZWq7$KDg9B2KlcZWQF1|ssyfw7F7uK*m5wP8(t2O8Iwm7`CBzY6vL;x-KaD!Ro{sz?=~-p>13tCyVU9(ih& z$-Je~9&@}rJ@JbI@aYwRg0TH<1My!VL_o}M$PILk{bz6Q`LnY9XYa)q`_F?s1+~B_ ziG~G;mXb!keKFSl2_LuqgE5IGbd)eoHa*6?_5XbTd1?JWJ=puQ{vYIdgf4WMFM%XO zdj8Sfm?UVB(Kw>X2&Fi@!6PDq&Lea^rUHp9g{wd$#w3o>C}sl$*E}>C?I2EKEa@$Q z3{&3kIEgxsP(ntqwJ2?d4CzM_>HG};Ydb)1lX!|)0$)Pqv6OHW(}V<_;PusqE6F(N zJVM8?v!Zv$S16)fbb=9;yYRmn{7x|VH{XT-wLgqUyXt@JpW-&z%{v<4@Fq(U6#MEt z3B+C6c@hlpP3K7j+Iqq68m_5KWLA6U2r?s0W8szw9p2J;`DRA)BN)p+tZH zMVV0FsYVkNF(SZhLMLfFML3xvJRH)PY5~i*Itef?AgO%N={$ObuFwAS^<}5i@Anm{ zSxh==*GDuF62~!`Onc`1h*(GucXv4%Q6c%Xw;$-Vr2%C&5pp=j+^YqyI)yP#6UkYW zg^(?;1Jr}2Xuy~hlH*h$jNVu0VMOIP8>ks@xt3inc(E%vA-n1bTS>&cjUtl9Y^u;i zEK!~R=&Vh7_XP{owvB2)nNU-psQ&&35>N8>iZX#1Z`*lB#ziOSbj)mPyaWnyf(As* zjoHj#e4M7G(bX?OL~eJtf!jT()zsz%0MraCSkSTVpC%Ss5p+6djNJgp47ed*f(c3; z;r}#2oPKXy2;;aDQwu+_DUiY zWn7aQ@Ych0I{!dVo?O%P$&*8LMukL*B!(WsETcZqOAV!E!A}Wonw!kN+Kos|B!Sod zM0o3?W=_mUdHX7XIhn9qB9P?(pRjC_vV%ZV-G8e2$<6vix5UZ@=5^qiVkwSsd$oAknY%>w467F?|PwFlZN;b39f3zW-OL zUy}{$IL1QsQ32j7?-fYhJi!{$8P>MMb`f5fPq!*h0n_>Oy8Mi;{8(0~{9ex*%QMBw zPt#C(wqW`LUgWEM|C-BE>r$=ngmk||H3wSC1eFYcs{zfvy$8_BN=?56n#7~N*S-Xr z#3QstCzDKqsx0wHfL6(g5{4v+NVL5&XitOvgJ7>0kpaa?Z-2kXpZ9&xB03^M_8UOc zZ|xR#ho?x4@xk*KhZqMz5TFaQ4>Q;TK&>`QZ3odI5=8ExI~vExrpAVT6vB4JRzS`{ zOS3rEA&GSps@|ehM=WmknW6sa@SMpDP6SD0zX3E)3|^%qq{AsP)dA+q!8Jew`C0kh zn@}>y9JkHT6_HBWlsp6f>nY379n0bf#q@@#H-ZoZF2qVXV|-%H9|?le?Ms0+#If4? z%bQQm{6azrcTD z_f^PIlg72Nn>ib;&G3m#pV~(ENuJeZhv(ZlU+*wJpr12i7)aOSj#o5^Xfkr)MYUbc z&@s3u+oR8ramNV*-2vJ<`Ir(;CnS+Levn${mD9kh+|kI;lg z1Z^oMNjV!3p%2Id)kf&JEu2K!l4)$Awt-n>5lJ>rwM~)3z}!TRV}p`pxyVqY$nT1B zd%3${`2>&JS-K)7B<(J|!PJoh^HH-1Q5)?@eD<`k<`44v{0f|Nx#n(d#@Gedm^)lvk>$&q3q?ig>_P`p8E$zi`<6NODa zD=!uxhah3b$;CXP%+SwcBFBVl3$KJ-#PbF+RMEY~(?I*lsQ*vEXGKz_w7@AZW*D?K zn`+LJ$D{Uo{`7e|IpY7q`f*W%w=u`4iq`mXDf1tjpDTg(Kh)?XES6=;90#C zP;;1soJ1s1M;U>(CYg|S4@MY4Fcrw(zKe>!)R#~oT1J!32#;PB?Brd2mX zr$c1)R_!UG7HCEOgg8MgiKmJf2?-?{ayCI=cYvMw0iKn$QcVsX<79Nq*bQwr4xT_m z6hcdF=8%L>Xae4}u#O@+91^ZHlLYE6VGha~yCa~?Dz!IDbjTI(7Qx{dG5B=E9cq7lAIo&&9mNOsYGlx z9pP*PCDYjiOB#X&NRW8gGwz^@RDQ+YjiI>AvpzY7n8v5Wb9O;=Kxyq_`B`muBEMzb z(b#K|sdNx~dgnwJ97c4A!k8*iq6UETA9&BHut2W0Qdz;BXbFrVoS=O|K#$XrMT_&;`s66Y=r`I*y{+IVlVirIoT9Dc zqirf|wVkLCsuzQH&U;;En-7 z6P6{QrYAxY9GQqMjh#X+WE0gB7(bV|1Yxy-@n%#SD-h!H=+&#!>o@=P;q2}ASA9g1Tgq7iw>Gz!Q&4F(^UP4c zwp zHlnTmg8m>7YRQH!_|tr?lu*6G(3a2!Gq`9O5QJk%xV}@+A&~Z4@t?2*<48yH;@EYT z31S>PFAQ)?o7ZQ#wf=(_%Itni3E>|iDng}gO+VaxBl@|kT$WHdy_ipzoE*pYD~H3@ zPnTz6TVXvQC}MX>%y5(kvpSa;1UHU2rvJwG7zVPkC@svw+(AyjyS9!eXfjf}t@M!x ziwFYm^qwFo)@c=ED(>AA+vg6YcYhe*@P;JOhd9D%1Dd`QHcdwJZ(7{WlAq4p*Y}6o zD$mN6bdMZZmu=1{?hq&727;(SI&1C&*^pP(J3Mj>84t-T#_Ek7C=cKm zFa`n@Cn!tE#}qD@;wcj2OoAA7blIXwu@z!GB7A%934P6H6XXClb0zM7z)2L-q~b2- z7R!ZgiELAJC6%BYO+9rilWa_Itd~!UGeLS2nt*xL|BViNIF5UYjQVG7Cthov&HUk) zA&1%zUpt4J1-*`~?+&ha+EJ%t?Yv-;M?AQ~zA|@|$e}Q4afY(jP9_gWkpQ33GeiAd zoTj@9yAL^_!7rjYsH>Jc+AO9G)-XjI)y-!_ptS-x8lBK9gV>N4KShhtHmwK#Rwl?W zi}miJL*v3sNH)>I=;EPb;a2lHZgoPh4AMdl)zRlci*?8m(;*3`VN8Bt>}C#OG&$}# zl?27~R)6PAp}DGRNwlR8F~&896tn%H0U0t5c49nKo3fCY%Pd`w4i3^4y^gh~8vyt{ z$04~OoU-VOge-~5)S02zhAAS86HSyDQEk!9Hv-*ZDuvAlXV^xaY(7$H(HBI=0o~9z zMuLtK9B*C=nW6sv!QKi7d^p0LB)9KyyI~M{N4Po@xE~Rgd)~57WG-BJvH0XTelu^e zRQx-%zy2GX`lndZLbQi@);r)Eann4zDcWI-A(%D0-lLiWs2ntCBBP{WTW$YRo zty$xFq2d-b?2q!yQ2+UhuMbu@;8)3U-4sIlM7)DiRw?%)>+9HroEjX7kk zP~RebfiD7da*N{(?0;Aw?2_Hwx8bV+(iN3-j~w%~Fo?3YT9-T8f0i^^S?}=3F;5Ev zSGls*)!#L#+Mt|L%4i~cs?TT;M14ypa~nlIk}v~O$@1-!q!VJ&u$lmvqMEiOq1V$& zj|&2%MU z6&qh4UwFYSLf^n_3dLm}IN*P?!U4ZRj)X-d#Te`!J!1FTY=8;C?<~u!tsc4 zD#w$+8Azyr_5u0BD?LZb$``nunJuU1mQH* zLbKqwf1kVW2FcOPA}!p}KnqO>^{i<6KUS)vnc866%nIc#?ItRBD-;dGI71jtvz&R!o~xSRx^NpXQ{u}BG z=}Z(+o=J=*O8GE8{93rer`8Dq$UC4(wBhx(9yt_1(IT0!U!Pkm2M$A)CDIW_5X{4| zjfeEO=u?@F*Ca=Jw*WaV`~(%6h?X#)l{{UO99WQrxZ@QTM6n2zL%kalPD(`4>0Jz~ z*d?(!v(BQ=nzDmN-%%3JPqGKC+ya5}u(@UmNyI>8Y-KdsK>|;XG?C8ngzTU&*+E2x z+W|V2`ddhTE63<@lzh-N)<0k=IUQt@JXQ;D)dSxba%_+sSm&M)`oPktq87E%!bh%9 zklIln*B*o(8^Yny4w5XT;SShDA0XlwbAl zvwGGi2lz2Idb*fFei8&-T_0UuD|&dr^@?4tJ|mKBfE+h8ZA_762f4bTDU^M^x;iT) z%0gR;)3GiZ#R>^e9?ZA40O`8qxNRqe9z@g2JH$cS0UBw&Qy=mldl|bPE7I5>5|)t1 z>!Z35YOCfAbL8;n^NrdLF0dSz6IT2Ts)jz-LVKM@Pf@|-r}#Wp%nbE+St=`KeRmbQ zy9)HGP-rGcqb2>yGlF?U(O-QYlz?ZwjaHH4_~<(tlh$Cm89F{HBrh47F9Mr=ucV0_ zA0hB_0DGW0&a}{fbM#!F916NQ1eu{@olUWhB*qzkOcJSI;1O1PPxVMwC7s`&DW|+1 z4L3uMAIY?hB90tClIiD3hPBB77bLp=D+thby+hwz>Kvt}PNTkIiH(`e3#q^LI$aL1 z^`G@z^ffsaFb*zH4uL*}gk6sut~lqsK^n=S?_I2ilno&^HU6Q-^g|!;SMwb7$#KC+ zN|NYO7wtN)NDxylbW8;r#(3lx4)wc1CTE357myTxH`Ty;O62?lrFyh`QB_vcN}&?z zmBf+^vsj%)S1U*Q2`iCSON%a1IP??N46P2Wxzj}HA1jI5D#g#U$$)SrpPUiIeCyYx zyBCW0OQ8?CD3;9vRb55Juhp>^Cpxc70+q4smph0AqX2bYJkfHb1$Wqn*e{y;V$=*;Aq;<0bisfo9ED}Fo@xkMn~LD174ER7Vt$X z4VD1M`6u@deFNZG8evIX0)^%zSU*8SBuq<4e+9<3F2rnMvq&Cw_vp75&>bho7@4aCc(&7-CmP)k|>U48zGDp)P>f4un zL*XQJd&>ucQ5ra6~(VeOhU=pY{Wjr#lynh0Jvl^;d4tOqZzu+8$LMT zb*v&;%3?N}UZtGi=$Iu+8KD*1kOEvcM7kyNn${qKgl>gH&V)cymT~7kh$k!=K@FFT zlU@Y%!do`p2EbFuwUNQ*$r4FE%G%q-YI;1iFFr>0TVy_7pTKn#FU3+c0X`JpbC#u* zAPHH3`mv}&ZNA(%;QM=f`(?mggj+k^^9$T+nwNVfd;`TB0q0qABwV?-62)7Ac3*A` z@TDjY!=JO{5^~)&0ba*2{+F8pypH0|1tEZh;!QGfhOVI&zV%nojf*EBud44Rp9VRe z1J22>84(SjTfm_Si98hU9rgymV|q&xBE$t}gO=jjd5Sx~{pO%+2fU6|ih!Fy;nyU_ z(?Tkx89LRk5Ck2%+)0Yw_l!$5B~lIGX;b#68PbWN9undl@TYt8SjB|gRUx0DYZHz4 z;E>Ny|6nfQMuE5o=eR;7wwsO{&~8F0kd-Z9oOUo5V`3RCyTcH%OHd;7wws zUaC9@q_;vZk0s6R=+~&z4Lh8(MSrEsy;;;g^6XEv^c`M*o z-i$XKmLbJ9RB6@;k8S?md!~0I;7WA6v`=j}%STb9Gk|#~dC7`7j8k?G6%rbZo`Oas zoS$G<18y2WEbL9z+Gr5y`^Gu`?0U=Jji`XFAHy}=YbtoAy@p<8(TGTWcezn7qJ}MB z0Y0ILD+AYP$$CQ*$p4gp!_96=ct{dy%U82V=vaK?0>;S%(w-TgmUU*KK^y|$_~TCr zZUsG0Tr~&q35GgL6C6QaE0-H!Ex;?cZs2Kl`ReF+MHe&M^F2D6IajhJJjj}yxiV6b+lpfF&-+EIV@1GP z5-Yw<;;E@kJ4AiUFI2dSv~DlehtB~H7m?@&E?ZX@mNw5~Qs)f2+T+m+q{ju}0#a{< zWCp!E|Y^K;b8=j!S`XoMw3-WR4O#l^ehGGUwWD~u;3<9I~C zk*Nr23?_G`hPAErjD7JtL;Y$z+aw`^;(pEiWdlEePmd?EK}0!B zST|KzKqV z5mw97uE!7d%uxSWdjp+blz=QCkuompGbhZ@(d5_Eq$N6r^#mnQ^|>+9RhGQs|F#pQ z(CBksfOLjV!cmBm;>T2uQ9m}XMIgfzy+jF13YGa=_QwJe5f$>H7Ll2)8Lyf^z6!{~ zrIVvROmebCkuX&kYVau3frmy91p4wwkaQ9?&4feZq$(qHc#>=LBS_KX%JiqfeD2_>sOXC$i9sfa|KtorPbs7j|I5*1l>|IhMB zR2Oz>CW_1aA)Xaxq9S4&W};5uep)0TS4eFYs!H)G@-bzC*c&D*aPRYJ$tzPpB4#*x zg=3tAgkM2W#3fEfMD(>+0w+Rj5wWc=l`$s>o2b(}T?9pALIvudc|Fa)W7;SZgr5{rx)FIkx*UEJrtFY(CMYkK5>*MwG%{2 zNFi-!r1afdu(l!5IukS*DV1W8Fap!m1#1E#c}^#&g~QhJXlp^DDeGDRiL{c@Ht*pA z%REuObpReSAp`W^ECctvgxCTMCK;V%=<)6oNP*6HM7S-P1~1`~>*(y2ql+mM6gTAH zpP~M4+vT^9#C7fE;|!gep|oGYgI+mW5c;Q+G=>QW0dob(3u)LdB4Mk()FJWOBfguF z3Ul2r60YK1%t9QOd{!+IZJV99uyKvFJuRUVplfDoLlqL6;!Ls;NlZ$M9hAm6RI-{A zlk_Q5 z0?JDr>9R(8t5v(kA#5zpkj+^mM}^08A>*sN5HE@Z98Z5>H8Jtpd8Z~3swZUeUo8dPt13!`5=Yq7^WoP0=Khy4jHC{wz4+(Xd(%}_0Op#_-q4p zKGWbi7YG+61jL*lB?O5C>XgbB_;lAMg+RXsK9hL>;h{PtdIW?Im2#nLtuOGbLcd?w z0P-;x=yz@A)y7HaU6g74Mq)l9(%mTJrSjFwU)TVd5~bc^3RZ`Y6BwK(c}eOSy3{{v zbD}Vn*kefRDzH)*g~>eZmdQe!VAI~$2A}@<(uZ!%_zY6_o^}k%_)Ag6jkT`8`xj^iNEz1z%b4T#YR9+7~P5fzd*@`7DY_r(WWuV5!>JI zMPxv6(%awf@%@8u%rUqPv52YzQ4?;9Bc}VY&a8KMio_TnJb!VBaS#Nq2zsIos8r-? z=nkSoB#7M6`zo^u()1B{)M9sUMJ&zYxUIz3qKK(}?xz6Q4E0Zk=S)IblB7~ArVX*? z5|6pfL$BYSlM&|TS>Lu{0fpJ%rgY;^vuV2lu|-nNFEV3J9WqJi?*Xv}e}}nhCpPvRsb|!UJ~eXTm@eoLUb6lH8(O%&F2c zgmXWk33^{nk@Bytv6QJe+}#~fInD+_$R;k2N}juKS8_sjCzvLcBrDqi`i^ll(MGBv z;}d;Dm}j@&!4Vk`#vPtiE z+&}--N0^T?eW%P&e@x;DqKS|=j{6#2@)68)JDpCy-#5N{9lsr#OnauXD*9&!Aw3$T zgvbQpN|?RG(S#;D@LP(7xMMtesfC^WQ@Q2!BA&2(geJ?(SN7+1n4C z24u+vrEi5JngZJAqL57{O3f5dJJ-+A2p}R0G3cTeHXseW@5Ar?BItd!_EQo{dQ0MI z;GJ0Gsj>fu87D|1hYUixG!=C1Biau-oqwS7x7R0!=xq|3ofxoEpXfrOB-%j~{!W-g zDHDP!EnA)3L8*pOaSHWE6(o;^y}t=LiAW+Tj>QfVSvXePj73@?#vRgdR#YscPlwlj z-=fgF->EU(YcLgC?VyOnL@I(#tNOe^TNm%dwzG1%;>AE`PI{(rDwR75HtkedMs1MM zSoUb5r;tLKM|!Ks!D68_7nemb=yZ-up;MTv9fZ+;AH6w)LgXfKq;^y^=Mqz9%nC0aPX6OBy!Ogu}}mC zWDtO!;2X2Mo@Be=$|WRDq8`^B_EaA|ujO{9qdiT8OC+|DuQyz03^zL&`!dX$Z@k>Vv9)BKCNspweYY zjeitI5giT*S3POnu+w>^37~apJLMQ9A%pa>Wq6y(h1c=N3$UoL1i7&aCMg#wU;k-U;^ zroSEimp{Y~EUctZO)}5>ie*usP>k+lU8hZGVNlg1^tTpUO2oF6P}dAa3<$nb zeMP9SoFcip=V~PSeAlu~<)USmCPR*e)PVxkdzV5-2U0}3czK!f|n+4$c(u*uj z8JDmCNag1p!wkmlpOpP6!9Wm!L42T(JRm3Xw2BqtTwR?N95VBOf*kd`ySu;zJt)+L zh=Z}5#E%Sjkf`VN(aZZ#2pWa83@3MEDSlG2bBq;7+%aFO3Rtqo))U{@LX4MjxyuBq zV6u=}%Gl;(Cmsr`qtipDNf>8Q4Sa@lPdxSKiPi`kd+XSk*e5Ra-4N6Gba>7#2;s+s z%O~DhOfvKYjL=WO@j-2(Ce|SL#I&k}an@Ab!JS-c^O5>M2Xzn#5x>=<@EzfFIEBHU z+`_*W12IRR4sl)q+$51dWYm9Uv`F^dZIeldyz5*{QbnZ`^ctKQ%`_ zyOEDZgSrFf)B&+WlQovN8pNp9LhZ!Pdrc8nz0|768Ig|#I!Qu4O=V&BH@fQeD(=Zx z^o+l>TlZ%SM^;Y)GX)$Gg;iz!Gu-=FwZ&eB)V#epsW7K!2!0VP>2Di$^N7I)zmQN`cQ6nyL8o(0KFXbfhEVQM^wp|Q z30ImRD4%_Z;wT))`Uvj8KrZQ3Q-WKw3i!O-<@Cu-dj^?ZoTj@i7^(FS0KU#&Yd-IT z@xr7nKT4)m!r8-g@eQcnq2kGqz|{np8j2w; z5d#++&a%-Mz5hWSyS23c*Vdz4M^($Fk-u728IK8XCsOii z$})4hyu(x7VFbdjq9mE`skB~j`L2WQ8Bujb1aVOyQFiL!H+=cB zt0ZZ+wuzjk=c|`~8QrlXoX)aI*rWIYfkW z#x?dOOSwNVHX`H=PLV zSjWTZhnsIi9|>xX#@dWxBJ-kRsx-;a9n+%p$8Qvh`2y73WB~T8bUM!3h9TuAPB#-a zM%m)(v#IVoK&Od|_qE~5JG%RjO(q!_^r}Pn9+;lV3%enIx;ztTOAz&m)b~5!C@Hpe z5TfR93z$!dwah(PF$~P~zsYSi6QpOlb$jZOUB)pRjc78e7Yx-?n{99P?2+i}wFqZ* z91G&KaINEyOebpNsh$eZki{{(vm54nHXPCrN~G2s%`1Db0mq&bN1$-^Vir0hPcG39 zb0MPuKQ!<@vQukGQ3dl5%{oZE5A4FzTgFRthk2sD(Qn}h^HTR~ezNIfUV^uB@yCW< z>|4zyig#Zkb;8M|{3U_K>RU6lc{5}RQK>{nCL?y2s6)x=n~S%X*GK2qhv>u)a}Jbb!N~EHx_sSlcF zH8cev95f^z_PC~AV6KYBI88|+tU*gD1i7%Zep=?%L`W>vR;c*fTxa($FvoFBVl7v7 z%$3lJh1OZD3Hc5Sb(qQx=c-Ay;{crw^|9YTwqx$-TELSG8LSXSV}fHjp6Wgi3pco5 zA$zr8uDN}LuC9-+Prm!zIJrDKI{*H|@!PjQo}TFS_8n*pLkvvCiI^rKX9@kc3%7S1nkyaZc*{8E zG@e=mBQz^lW>s5^&Y#s(RR5)|O7eJS&;A4MY{_P2DUGqnWZ>Qr+IWHdAf~`fSmG`nOSd?3 zOp_Z8=N&O-IaoW^*sJ#I6h)Z>!HP9d0_2zp0-KgcdTlROZ3m3W!u-^oo()cF3xO|R zF(zN?Q~WLYWqzA|<@%j}N@`soyS6Sh$+#MKsvBCR<2J}$+w(*kw_ZHa@E2qzOV84y#? z?#91(#dm78TaG7p4x|A6WL-4;k;+$A4g)ou*5K+efn`vFrHJsu+!NO>~*VxvD~V2 z(E1uW={!{%hxT9dZbuh!antg$sS@MMi+9H>3S{4Q^GhaR5a*>`4lD}Y+~i?J;PC^# z&^pj1OW>|OVM&jxEpXsXuJOWjZWUnsfl*yplNi(HfF>kZu6*Q|AZlXoIF&>%5}HVc zs0=!tGGjT%PvmkIhztIZN8qxs$!0yN`;X4IuVD29WrVDlQ zh+}_jzo38!>YS-OGmAOg*bE*xDHW0Lmwa3sV6_?>%&B&yvv%4cP1I?aC|0u`)Yd!F zH+GiC^)<_uV7UB7tZZucH;POUzI!`nLV})Hun_1KS8Z7^1K8I&YX>#gRmJ;4@3gKI zfx`}Rj=zVt!=C!3{=DAnAlvGL2I!^xN~4m$Pm5s)h5|29@T8%UQl#77>$Lz4%<4wh zoMnTUh%sXl>@96hg=2Q7FC}oSw`c7Nr_G&08_4y_FBDKjio*Hiu#bne8e7A0`gLLk{wu1zl=wPx!G)o! zaY)82juba|11d5!b)IXp#uuIqKqR_*)PhGiOt%qz*9`6N2YbPuF$+!bFN{0aWk34Y zO0$x+9t?0#gZ;hWqeA9su)iOC4A6IA;VhXq6%<_icDLOyn(2e{$hJS}ZY(!aj>O&u zkoeZ&uy@}$eCq~sD12MNz%nl?$zT|v*F{HadIIrnp~;$EQ(TNbC^+C!--R-p$Oi;HDYxQ<0_2TLPT*U`B} zr@fj%U<Ruo#omR1^%;PJEl*AG07gE=$ zjZP{2Y-l_6bH=p+TFnqtI}z>qqg4O;0_aL|EXio9>nK#G!g?tfB#Iw7Ja)|O8f3zj zgr}TT(t0bTuFVl&o&FW-DT_*>*+z|TirnsN(;mPGQ7TkVtLk__#`u;pu6lk~KA+~O z+0WE|?FF?J&e4wpk>FH}nS2cJJdT-=e;cwai5`O=y@WVA68UOj-<_2;=RfK1AanKa z?iyUFoX9hE=<|NT1ehx>-vkHyPIIY=d^1jb*(5F57HvCq9#`7eem^jAI!c|V5oCnI zXhM@*8M1*`Xut`+0e?oL-(e1yK_rwUD#rKj_hM$}1M9W`*wl93uvz5m9& z2M2!5T<_g^uY8)Eqx#v?O&;@MW;153W_f57vytgWo!y2Rmt(>!vE^%1?F*bR?rd4xI zCV!e3RG(_nn{4=rwdgse7g`w%5S4<&L&V7lb9dmiBs+O~7IZrA&j{v;wq0m@g;l;G z;1nXEwSmH_`j(0D2Aph5F$`u1uueR6?k(30eXW_Ghpx<7!8a`sPMid09PVh-lwhvO zHpI7DGN~oZ5+Zc|)bhk??=%~6r#1@VI)zkEekfj`8;eqMizj^(CeKL-B=d(~LFDRT zjxsqWiL|jURm>S5;e`HMO_4KMXmgD3o_eS+g*S;@4c+t5y>yHPrNG3=rDj{;K^-x{uP-`aneD@>)pX>G8;B;~IJkw1Y~=s5#_^ZMrQ;x;$` zmKe6~me+z<3aQYScn&tdmvZn$u>ynXZbGEa_^q^4=wRYHsMD+6^6_e-7Ps&U9Cd9< z-Kf3o+8$*~pVu8Q&F3kLUQ@v{h+cb@MI$2HmvJ-*w4oe=lA}Q|p~;aAEwKy_zvGWT zB`)a1vBv<1Cw9(y|7aXXwX*~1PtV~N*mC)y!|Esul~l^1GI>G@FJXB$^wZ+?tZ;1d zc(x-odOL$Ut+zdsK2x6 zeRyIvq9F(hPGV}Mec^7lr^900j&5~Ik>`HXCVGV+dLPpP)CB?v^6gITQGpoiyIRRo z8j4-h^n)?FK2mMAwK5)&lq3;J!fAlO&7tT~>TSJhpUNbSshs9+IG_Qe_hZ7zTJiTb zsh$3_X8_hW0o&H3y`!BGguXh$GLL4k`6WEZSc@0UvuJC#8hwd2wR(d+EW~)KP;I)D z)aM1Qene=C4$XC(cYxgv&{1gp_?_xShqkgUTyA5Doy&t7$Z9XJvLV(^@AwKNXsm|y zV$1uJgb0dv`+fjh^$OJ}c-(VOsx)%rnEhhcX7UNgWTHlhD2Kepl!*4x^d5+mS`S&4 zNTfA{q?|gdMISuIYgS~A*$^_V4s{F*7$ zb)3*E9Nyev9trRT#*z-SSTNqIqYQJLNTN^T$Au<xL@tmP5#7G(N z&6wb+Vo@E@>6Kss^?Znh1dYsO5V58=DiDs1Yv)+|Luz^C-JPmGp9lX}b@@E_?|j~# zH{P`PcSX5gh$cjinU!}m)gA<{WMbfw@2Ha?@Pfr;NI#ZcS%O@WMwIKNqIO}uKiFN^ z6>D@>DZ2uP`Ho6ZfQHV1a}8m#!Q&&Rt0lT z#HX5w3$HwsB~Y>$u8tvli}8E~eaA+)x&897@bWu}pkuSd+%bNGImp_|r7+-P5XhyK zzG>SF_B7@5*b6Jbu@JDII=N`MLDvNl$S$PfRdb6^xp#?N^d+}`5mwfCE;z4!H7CzM z^d`2K+?W{T?z1UA}-fI*E4o(t8u<3 z5?x8mU6wA75@3Q`(4qpJS!((kazn69TVFU$O@|&Z-yQwef}jlXua&P~lUowAl<@gT z$xLmMIELhEj~<~j8j?g1wH>BY4vYUkLY7Yd6CLawJVo!`++j|3&}k9|osMbjn?8*5SE?J-xUFjO%wx&0pp|HST_;7XQ#&}=T|4agJAC;oz72MsyOX- zFtv#X)w+oB9mGD4xN)|i+GUR>qa7sJP%092ocCLSJQgPExyNZCg%i|0xhx--^YiKT4{v|EMn4~2ULKuapPpQyx0mSn?fL7|>(jUASLp3`=;-{v(T}I+uXhlk zV80g7!8r_S`2E67#?8tvyy5xj)F`6+KZ0y%0+>VtjgtP7BhxgOFW;hemR! z71+TkHFDz+-5zvsnz}y^f@i^AC(6q~9HJw1W{d=$rC;$lR1|>Q9PRU`trG(x?+8iI zpx}n04j9>k{a|Vg`ax&RCgc!Vk?Kj)4haQ^P}ED9Z^p&ON5eXbol3!)mK zjK?`-jYr6i{?-8C_UPUMU&?7p4w12GbZ(0i_Nf{2%k!X5gZ%gMtgS!B9QnVu|KdeS z{=eAUKlmd5AL4oR2o+7AO10Ft@V-)Ye7bx5+GJ~nwA(tEl88XH|3Bh}ruIMu#dkW7 z9(DY`t)S8t)GtEjvw0fUzum>e?uR@TZ6MQ?q`{o^|MkKC)8hI+*n4sC;>-Gfi08N8 zcAubIIyr=>1$Cl>Bs~*FmT*iC(UaZZfA4fuv(6=v8Hcn5Y^dXvZ7yLioml6$-w-uv zJiD5k0*{5XXN~Hhi?$*fO4Pj}(=O_M_x5cUb@jf}MO%=dr2FdVvaA00|KHu-M!nyE z?*KHv{noSTjpmG?K1reI11HgI2&ujb$0W*Pnv70I33ET6=(`x};GjPuNl3Im074Ti z!|{nevsrCfKRt9qribXa-%xNvrs((IJ9&8wTYpdK)85Y-&BKmgNkd`9!G;(Zf2~4K zY8*8LnxS7aCQ13N`kW+@{rQg2(O4d${f>RntIp#X^JuMkR2|&!Jn9kDCw4npd>T~` zSEd%`HQ^IseLMa@bJ;R`YfPM*Gqu>esH<1Yz09DVJdG0_BJwMOOL04{av2GQH|A3cVV7x6od)l*Mc`{gEs|dherr0{q{A$_taX@TrCu`9GqW3wY@k zJj|Gy6CHgY3PAvN%55f3?07ADcD6p{=&7b0OoxHcy6OA@T>1i`AjHzW@QdsqF6zf z3!+Ir<OaNgEd7O`L5km(NkO5ckgzO0#)GDKf#*$#5vd{--pD+7C6 z2OqDq*!>pU%WvD8Ta|@P{PS6r`Og1vt8#fAqgTKBHn;Y^@mX@=g}45)t66j_F1dvl zTxrOAU2HAOYhx?xVYDng(gu_)Z!g@Oj^!=oc`DYYJ_`SjeCFGKLY%rPRI6El+U-C4 z2hX4FmFz$J`%j;LvHv{8vx5CcLPcRdBGPxtFxNi&H{IN0y)b*p+$Gam%ou0zmW zP*)GRd%Hg%67P45WNm6&J=CsBtAxlq#%~Pbi&4pZbFn0`zFwPF!PVDA7c4?YnPgBImoG@waf+8v+@CH>PG=JLcUVQag9@z-naL1PpvG1~fhaVc_9f3^^E7z+x1e)`?(kG6 zHYVXsL+d-NebH&2eJM*Mja`GM!P8(*2gekxK&l%1%r2V|>i+io?_GqP zW4?<%RAA}sR(5QNr{`ouKElO}A3ONlZ!mLBFreRmM*~x97J9b1XcgW!M7!_5b9n*K z-=79gO{yQE3)^%d%hnKwx*Rz~M|X89-=Op4$+fN#V~UhR(pw$IDRIn3j|H00gif-g zZZ@7gS@48o@>F}U7S@ADneJ~}x9|6Q-~Ma+$@~B3_kTV4{r9iBXsbXTG((bINr(qE zH*KmPV4pT_`_%T`dCz?Nzs|qBs_*At=KFs>-G8=U_W#`5|6>1tkY_RbKZwk0lO_Tf zqMWH(XP?k_(l)D+u!-k%d~zmSX)0(JbUHr?JR*ns(*735Gy*N>L=CXFhYnv>ZWi-K z!g$sNYT%dz(51U^g?HKuA;oeWNak`a?d^3@SEurE|2PL{s4nCXgimzS-rim}-|H$6 z?%x-L`%6H$?;xyzVpgtAEaIl63W<-FyN#}yktzwciw+)Yf4#JE11`rmWYIB&Ez6^! z9x`IJhwPUDIy3bN^VVw1qsd6v`eLwu?92RM`mF-=5B$v6 z|8zo}d({7)?>#NW|LlML_4BTw9b8$SUwb`m4N`q4SVc;ML>?^;qEpbrW+`h~| zF!_@ihpqO|8&?uOG4+c|{YX6WkCVPFrQY$y__F98EX>w%vWn!(hA(N6coCE8mel>L*!`rrDKYpp8~tP88S86A8Q>&(5o(FgqIR6er*HbNZr_IC%qULKnoRA+5^mm_zs$P}#%2D_{8hG3UwGDNuTN))4nXlhY>2Q| z-Pu;gF@5`At8v`dyQhf^5c~uQM7J16Nj4b}zHQST+ARC%RJyX8lH)|U3a5E}lPR9W zCOIq=$+hNgZ0zBX-w=|slM$(yx?d~8`F3ts-{@mr5Y(=9r)jaI*#KUd9CzOJ{1^^j z&haX!bFQp)E?^vOkzWg)*SX|dB(x>~Q9$FkMWJVx89 zasB#cY1glc?-%6#ZFhXp#97T_#h`W^V0 zgfL0i^;H;GVt%2|<}@!x!^>Foa5y2|ZC||o;T?MxeCF%_CQ-rt-T&5IU zUDW;1T^%Xx2sg~)c#3|_aI7mu<1__igU-)H_YUo)8bd)YoIAf@6XILt@>8Qewm|g= zTalLvv}H*3`us|@1xr{;!tJ1QIxJSoaRCb+?P+e{0=h#;f&$(^+fH-UuyT;Jd}3cZ zUg?!$Yby;FqPu^D{3(8E)8Ir3k$vJahGAX_7n14Cd^AW z{vmm>`6#Wq(W^|EGp5a&r-m`6=)9fr%hWA(n|CJPm*t*v!Qygm1rBn8ME-sfzeR-b!Cs&)(Q=I&K;95Rk3SuANUZ{*cT zGZmNy;C*Z>rOe-yp`V(a*~eRtpa+AiWHw(^@C@={;%Ut?(hD0|HVPs|My^T|M?gD&x1Tm=>P8eS965f zHe2>h%Q=OuvRE3u-t1g#qqbC#N=g>#_0&b($<+O`?Si+|RS%sMe%N)fM{iRdVXN;* z6*RW0sdoiz{VelByt+mX8qr&l*keT|2sar_owiXb+-c=3OGtoV8_+ijR9eBWZwGB` z)YdPVkmmB(5q}##8Pu2H)HQnlMw201pqf;3C2Whm9v5g@nGQdOE2pEbB4bK>##6Pk z-w|COTaa7Aaa^XTP?FzI`gGs7*+mYmC@}N4g~FY+)4FO1ROtF;dH*qrPW8Jbx7MBs zE-!O^u3LeNS>@h2zgg4YC%%SdVGimwnyTv8*whC!r+`JjUR5Ydof|S;Na);nseo6J zIXX-44FT8h?ia!G5Q61~OzXoz&pmsSYGmaFd^&%5-{ch%dO8>N;Y(fMqp)miR!uSG zc4gfZzbJZpR(n(D2dn*ei8|7);?Q4Y64kE$mP^nfbT@iBQ4hUh zEG9T9cJ=d^K*X+O>R^e)bTVMED_cLO>)d)#qvn+6LmP2GFhlILz%MX?X4#v<)}Y5|a_AS23$jB4ln<yFv70PK-CMPNTTOidqnqp3 z%=dN>sV=>cQg0w%r8B-^{%gPJTai7ia#m?wsAKY5O=fwkd)1`jxX#t?e|G;W{@Fzl zBRYqe5qoZv*YE$CbS;{8^tKcX#xuBKp1s(!9Lt8bUf}Kw4PHDWN$6wl3D}w?_ zF;>b5RK==Sott+x>11@8o_avM)61sP0yV=@yUvTjZGq9yN|S#jxx-{DW_N_6Ewy(X z#pxKM{q1f2=Xo|EoQ7zB8*OE2T5UBmxph8to7OM17a^q;+1&I28Ig~d`ttrLj?btB zn^pIp|NPmb1q8v*lrkqIN6#1S+z&SII!fd%3JXq*v*9o%wM(yF=u{9_ggVbA74TZR ztatD)93@kqVe6c#GeLx>c?>z5l%i_XV%$MYspof8fZw!0RGQpjTE($Dr#Ut(aMIM9 z$+G85GtN5`(P_liWU6K0AM`BfBh}E$r#=HNd-j>9@Y&h#d70a^V$=10ED+}KW$xzR z{b%yHw#UbZ=!lQ9iGt>_|M_Dyp+cB&EF(sPBH+vkTkVMQIZL2}w+4grEO{hj? zr(*OieO9DtozhTe7cPjD+XA`jLtyUAaUP?TlUvF%Q9YGl|9C4Fkr}$>Jel#ygus%E zWZoLF*p?V`vrJjl!v936Q~wmt0{8!taXcdT7yrG#|KeHo{{KtvEY$81R~jle@t79?BV7D=od<=Ny=o?|@{Nwk zms0u6uVGpo@n!o*t(T-AH>+QnS6k#)xCkyZ*)Clz+0E5&ql2FR+5KnNPeJ3KA?AIn z4=weOHDdEcu>XJTeQkH!HnRVFehU1h?Aq>{lw>E)|GGEb<2vrvr)ivPJIUG8-qS!N zBq62%E&$0^Ti?%q51vTyNt9&CaqfyQa$*q}3vSk$W~$ntDCh`k6`1-&E3mQv#0c5OHHv7;S6Asy)ir6&IksrJhoU3)~dxwT=YN7 z7tabii)k@4nrTa=6h4QJU$IA<=ubCI%31nY_H( z&Da7;x@+OpjG4TKI4@q+A)-0pbSlR$OGnUE6h$xxM%4hlm7$Xel7r|0Wu~M7FVz%M z8Gtb$l=!CfA}Uv(w@^ssyFs&FUJq3Q-?EyRYp<99YPzp-a?*DUO%dbhC;6k=6HtGe zQh6<8V=`N|8PmEm}lNA zskxXbBoWw6k%^W)c+djQ6%KpmbIZls82;3GA3tCcftJsH{WbdAvp@L=9=td@Zs{*E ze>}N-d;azx$KW#SJ&2G%p+FJXl|Hz0RmA=MvHV4rxxe4r2gb)B>D@>AgPuA)CY}L? zWH%8pDYS4(aa5MJxo0s^mp!WFP(-GfQKAn{spA>-HxL=wAja(_L@J3_eW%Gct@yGP z-zn)i*u{3u_&@SA+J7f|t@B$5Ifo=-aH++h!T!JK_Kphn|KR1(cK`2Do+a$R$@)X! z)M`PNGLu~y2bsR|wRFYfB6*RSex(HKz#;qL=QMHC9^}b~2#cj>#V(f zf+3TaVRN8Tu2Z~&`-WTHuFWW|I-L@vhf}ha?6FzMv$~W?u?FC^4)cz6e{0vsMTP4G zorU9X6(LMU!H_H+tjy6f>AnjQ(q#)2qW*i1*gJ*>_--LGH)s~eGB&GXOE!~QAX*d74GW~eY7g#2DIL468oI^qy(^g+) z!NZZT7#n4UGrx0Z(z{xh0-ZWYhjT7bKdi7=1k z!i3f}@Mh*_U0H7It#zv&^u-6m(pg{>Tx_s@L~O_A$UX-$O3PPstfLCzeyH4STC*PS zrDX0d1=fQ|eFgJb@Fzd}+)gx%d2yCi4QKw%Hsx~rEE)feA;U20F9`)U#D6c34qg=F zzvqYB`0r7kRpP&&r53#Ye(lkp)vhNK``M1xMtAoKK8&FQ3fuuvboSUpEM0C0!QsT49J{zP;OheSw&3eOk_3 zXw4Bq&7`W=zKZe-C}CD>17fP;X}-k%U4WcLR=~AkIcszV7U6pZFvpUuptlN;vmlu@ z!#K7RON{%95KbMH2Ld>j>=TD?Tywh29LqU%8w77QINfqxc*s0+SEOYoR!zM%19Niz zE-|v1oBdUeYQ}!Uh`Ls?YQ)^%zbp*5B>qFmkggg3>2;r%zW;sj{P~M5{__~mO8Ae| zg4f^wm7(Fc>j#01iai|=$n9-C5~SIFAQt2{wIM*LEZ*e+Aya=XfKZ-R4Infh#>tbY zfpHo^r9!9bL8Ye#2)%{^_8~9UkIc`H1t?u1d$6MnCFysKlujmMbe8FgLnqaX8W>9b zd{(b!%itw07Y(uK2GB2!LAWeDNm$I7x_<*$OjmFx*+W`Q=`@3J>f=rME*E&&JSJCI z(Vi40$B|e7lFQ6e6BuVoE}- z0Ymod#@{|us#3xIL|8h&pWLJn*f0v1$#0`P{va|9F&!L7$)SjwHaWj zTEI)8Lk@`teg>w3QYA!`Mwe-MH~ea*Dy_Z!m1jUlLmN)4G$*^Ly0uDRCCD!}Ul2_x z7ps(PeVAV^ULV(1%#AgDVy4VR9$qmLat3lKEp$gQ8@)V^P|-wjJmv^{SwLZ~axOFi zn}rwV_v|SF4Xe4&5ejjH();I-WK6Dz=CUBe=e#wqtZWmG0(-+z?jzhcXy(&_Z{N*Z z*J>_^41oHSxa7Q#Qf~Dv+?W`y?Gjcn;*V^#yL<`8-ya^()z(}u4s*imu`mmGo`w{nAE$a=$rg?qFS>yZ_G zpKgdYTM*?dm#5|&y#?+ZOG++d{!XW=O68KIR<%p3P<4wNuq3Xtx|%7;ySrbp7FYIX zeb&tt^pcjYNVS2~n(dw2TC%#ytBh^GVs)wQQ-jLXs6EB9saP7OviePbd7Fan+Fv8pgAD0qU3L!QN z$t}9Dcye66=jdc2M$3<ADCmg+7ip?j1<~vsvW)gZxCSgw6^$2R(cgeqP+W38W z$j-?>D`?xC+&Q;oJ+_@U!LP2BW@Tr={10yp{^hrWa zdd1V1N7_J4_kLkXD@4XDoEwa>*5-xOFZ=bwtn0XAHed9oBNX27bQea+Tk)?b?rjts6AsHVD$wtva;&d?cU4|Z>{Chx-L5n)yG55Tz2#T^)T)d1(_{wYBKh5}ag%FW z>#eu7UfS9sE?=Fer|&tglucC^%6A?Yh5;nbVsCp{4RTzM%stkET2DlAO@@XPCXR;^ z%-}fAop#KEy&60vb1Q1`ln2Df()lJmrJuKkY zXG@j7B05OXv0T8^tUVl)VJTe5bT~){x;8E{m*Q94C%u?^n`)W8V}9;zZ|+lVUs}a0 z3L2;6c;>rhGjG`W?{?BW?xZP%8YSw$&v(xjRTtno{d0h1*~3IdAcJ6;NtvHJMa**5 zo7uA&S9iElyVSO04o1~#xwuo%%7ULgdkE9{rM%lcE$wqZo5J+OsGJUFDa#cZB5^ul z43P{}Y_*EO4J1)&IgG_9;3u}FI;p8j*Yu1`KS1UtN!GBD#W3JH3ztJ(M634kujE%^ zvl0Koej&59YE=SHtAlR!(^vWXun*7dR_)giZr57~AC;~gaFWn*;ZoPUYiyJE- zxqu`JWE7UEMmGA+Z&rXMNj#0XrpEsdMkpTRA)yRCyp0C`zx(2#aQ|=b#ml4K*8hKu zrw!ggAuSb`x~)fCE;|JDCpeCz6;EJz1BZwQUK?DGFb8~+B$Npb_z11^wSyNBwJm7!5n}ANwbtl1@gb55t>DqGBKJ zeG~B8#QP@b!yE6LK#UXboB#3J-~(isPB=J!ea5{YVe~T!g%{um!HzD+=w~mO@{mTT z^A({IHS_=S?Bw;&XTdmHM;i_2zh1oT9Tew(ueY85kMgv^_gD}(#&$Nm!F?vZmQ$$@ zo_7L%`4PqA{LlZrI}#${$DNK`CIUX{L^R|bK@%MEPOOXmW;CiT%j_xqd&uY{ktRiJ z8Hni+hoFzdEkYz^MAr*E?+v9lvb3OJ!V#bo24IpV&~WLVCX7ZCg}(nCT(cSY<-^an zkRfoAl>?_xz?cp*ru({~Af)3CA_B35VUG6p)zY5*08oS#0Xj%|tDqZrUb_vh-+cS} z((^uj`XoaDFG2|-5h5W*Cd`mdz_IDLa!3s3dklKPU2td9gDA&>ve_}9AwKSO7#d1%u454 zlUIMz0Z=pPRMW=`4kH2}oCU6)W1l_;s zIx>z$l7{;8DnTKJF~B652*AS;8bkG_4bI1Kh%PA=nG#stlH(<22|5N`g>4=H5#k}k zDt0>tua)8fTigjsu_P+vw3vo6cJly0cW|7<=oqBx>UoY@H#BvbmQ>Qy^rd>al#Tj# z$Pkk|&l7OiL{`%gaOjfh1-+x7=SQfIA@O@%pB)`~UNVW}cQnRfBdgBgID{JXSb zx>u%Ls-2Vg7S8yN47XA~q|9~{zAkq5^{$tUGi34e!CNZcF~kuOJDMMzFTgW~AY*Xm z0e}V4D8_tFZ4e&M0JlsNO+;#C%D!m_>}Ds0AWtVC-wQl1Lj8#&?!MkqEQv<f?Gpkp;R2En8Df2O?6p(1 zbTzJ>v!r=_X-oOnjD8z9!w=k%@Y+Ck-Ed?KSsT2QW|Rv=LX^!cvyt2=C%gNq%S(6H z(h6K5NI7~Q7nH#vI*lRcO}hDy5#<`N$ru#i1C1wR1gZe z=p(}dU8n)z`1i)fuJG?@i5C9 z4IIH11keUb0*dLj3c#FZQ=L7_Ek+P6Y z&G`wJU;?0Fd>?Q+MnK>(;*!8E zBx+I)Wo_*NGo8?oP|k55$5_mCv&u&vA6rpP+yA9FZ_R@_B#nJy5^y^Va6H)uAu#Ty6NUbI1TUMowCyuVlS^V;sVhZ1XHM&&1e(`*7C+zn7O!QNh6 zpIrswPUM1|2W&8RyN|oY-0iKf$-L+{bDI(iAH3bH#^!t=Ez*FpP_CSmrzrsDV7c1E zkTwg)vGVPdDT6VR@o6bGRi-$Of%JaCcxLvD6wqE6s8_AlenFP6S}mpVJB6YPBKgGz zp4o~1n;1=MosA^el3w3&5w~Gp9td z_p0@Wy1yxKwD7(q%^T$C=sEDCJ+Ddxy_H1Jb4Acwj|h4j5J9gf0t+R)PlgOe(o<0; z; zy7`f7d0_5#c)}6*l=nzJfn8%YlpOjq(5GUgD;=o*9a`Z#gyhg_^h@*~ek$=aJq&Ve4dA~zZByD;%=t#m8@Q1TUgxz*^1(r(!(Z!cf1?Demiuqi zh6xx!4*Jr0rz}EJp<$eiU>^w_su`s`+z}nqAtFeQ{4JbmKUl5+Ba|Ym4mM_V>{Kdi zgqT5l)uzgCyUq>NU_57C78Of^0i$C8W!JPWQiAN7WU)RobM_TIK9V5= z*%4qMO&26HfH|KazIc<`M>q4xC@K#Tfece=Af(MUBV|Arw{}Dkm(5#~W#=O#GdYkM z8(A+@oKTo-ZrAjrk!))IyWh*?AR3mpuw0v%Pch=vmx*{Cs_KY6AHzfBK+ z8{?rK;7&XJuRr0)4Q3j4qwTRI53 zU{@AsnOCj7Z#}6tV>nY9C=IU~el@evU5FAj^FumLVyvTQyJ{E`f%i{Cfc6DclU;IY zmpM}kK;d~x8poZ^?d@#<6^j97!%nP=@Xnj_)3di%XZ}IZ{m%2=lNfQHt&{zk-TRTo zI)=AE+K?eb+O}f?ZW$J8qnXozxP=UP5$1y7{zT-&V|l_HxCNw1CZKh41Jn|-u@H(bpH1BK0sKb zd3Vxka>*bbt5rSlt`N#KZc#3c$KnvgkPIhqh`^9e5hH5f9kDUydYObI@?t#3!WhF+ ecY?2I&w2Z7pY8KBp8pL10RR6-$r*|O=mY?Nwhrz9 literal 0 HcmV?d00001 diff --git a/charts/portal/charts/rabbitmq-7.6.6.tgz b/charts/portal/charts/rabbitmq-7.6.6.tgz deleted file mode 100644 index 6af2a26aa6071227e8ef7fb25dd3d68e7e2c420c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41431 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
  • Dh z(%&XTuVmg{VDW{~ei5j597ZMA;-<1ZWS7h2C~ zKKr`;t(i$7&r&Ucci%##nyIzkezB2P^W-P`+173T%Caj&`r9~-97x++JFf~Gf1%#d z?0T~+zh9v8>=rH-ZDDpZr}t`Rc3b=RZ)G zJi<05s|O+e7iaFy-qnZ(#V#-ddL|{TqQROR-P7B@WopDz<-KfHk=6zO9>t?0qZeWus&3Ejcjdf z*zbC-R@3j#O0BxR|uvbqgER7O!*J!{KKpIG7D$Q#lHTZ{M=Jo!OB8&B~gs zmZS>&@p_Aao@%~ZG(K(p@wOR_CoTQ5WnMPx%4-zgVhZfi*Ak|0oAYu_H>b|+`_6NF zk$uF5Bghi^FFxUGIfOU=^>CWGNI%a^{g19FO_vtGnN8t^stFnq#cr@#Vfs$1Qkc@U zB*38UZ9w8V%IW!+gQ#&c^Ed0hod=;)Mp$Jb<`95&GtkrEdE5N*<;$1mMq%6YS8rWK z$4=J$L*DFqV%ywHv^6*GP06{0MBM-Cr8sw7K{J7IElrJsDFN4uIVEVjbi0Nf#N5?3 z7{DzRg^;SJCwmal8ydA?&rDBr6UNu32Ehnsw=wi-#BW!|6lM%U9gmnk*cp`Nyk|{=b1zaf#;&3XhHesgecMi98?VY809dNm58Xc>5%Yz(FcDvG z?;O3G&O0A+{#SGUizc1+gp5~n`aAFZcWe9Q)(_?L->ui*?|(kY5GAXL{KJ2;mWX!h)mSs_tCcD-1-G*)7gRr_x> zcGzP1JLtc8MdJYO;B(5A#SzQh4-6yP-4B#Xo$1in;Ij9F=2tpd7z$msu6s{6{zosP zf7z#w{};5R73>4^`2W_{>k|Ke^JZ)NJO6)*r;yiA!~NOr38d(IW~J+8w}-k`XKxM#IAuaHXSEl)dJ5RZ zj6Gm8p>*e52DfGqyik;RP9#K)Wd2jPWs=0yw530Q=XIf}4RK2uF}NRl4|)rB3XCDKJCGevXe z%u`W`mL8Q_i_Jej8BaYK>OGCxHA`j&q(!_;v6Ay?rRePSS@>~Jv94zSx2cXWYw_d> z^uL{#ugmtoH*a2l-~XTFDNWKsc4}V=FdKLwV{$<<$n#^huYbhd?`Hd-dY^ZjTEfF~ zFMEA4b^WZiy>i9o-x%<`G?D;o(2F8|3oP#QG!FfE%$8>*E@NxP*O8yTdimxjU48%b zXs_~d#^vw@irW0i3zl}7gcmGcx{Ynhf305bEKayW*6zICK=5&qG^H_fPbtl||14&= zz@+B|d2RU~Ns>(4NT!MxSsI+06RLt!>C`n_%0OPJx1|ZHPCVnO+5eNUzsl3U1?;~S{r}bL@AluPc}l!QkG;LTQ&RnnIM}(_ z?o&maq4<=CdrXQHqpiP7!{M?AeNVjU*I+$naWBh?fnE7;3T&pnc%7}ZRo4H0*m}A3o&P_@Q{(?p zzH?K#NK?qxH_cQ$HrW-mLTFM0Vxp7mh_RT@aOq8B%5|XUtIv2u3%ngmkyMSi zV1GAmLUW9M^Gz=99a#wE>xPfZ7*v>$J% z=;MbWRrqR=Hg0H51BT$uKmGw6W6JvPvpCdS_e$8nT>XE$od4y`&d$#F_5T!4jr><1 z%VREwcxR@}zbT`TY5z|eD9bCHXR}Wza|vVy9(AEqP>j_J?u-s}(~g16AYB8%W6KXB z-M@l>^8I<#r-uLARESUK|F!*cryBq7)p!2?6i?}D?%cRJ8#BrkBN08$jgTk33v!Z> z&ne9ujBAcBXGLPFbqn?b@tP8qFuT=+X<3E(OBh9)M16aL#9=Q=M&vjh!}iv!mTH_z z=Hp(7tuz&LKk9A?+Cog-DhUcT??r}c!v$Kr+_@($N`D#;uV>eEvgw6UDa5*QNoK!& zYqVOe`>zSzc-_>0wvxI3Z06jTO0amir$GWQQp}xmS<36~{HvHezCYemyZ@t{YGVXG zzWsme)tk!wpC8_QxBoxM^L3Fpj?*{tf&#SQhCWpfdLm6O&z#-5huqpW9&W|HIKbAZHJ1;b{>hr%6i1#}Gn_c&x_x!H}_hX*_ z&FgB3^S{iv-fj5KeYVF&t>fbqa4_l7jqg9|-YhcS)!Ma=i}S%S&WjgpOnK`0z!qLF z0??FpmV|1=V=js_0>FE@2t>7QED4XGIO!t{U6<80h0n}4{i$1bO=6KID{k2pShF=; z;|7ik*}0syX07p=o>)uzkUxboRk!~uqUa!vBwdB@KX?Cs`SOSA{g0PB-{t=&dHgM# zB#HEPXgdwg|H(~tZU?#d&A!%%k}#rDnp+@w+C1arUi8MSez#^OnnWxhMZRfY?qZC6 zES4rAQS@91qUg|uOEGp9uUfItg-vqk@zQnr8JZ{Y9*wB-w&iNQ4Oh|TMEigxx)7&P zRJ}d+7`zKI`rB5$8Kj@3$Gmc_Y>V`w*Cb0+eV_Do?H^GPo*D@X3 zo+nT&%`!EZ8gE9rXYeLp%%v` z4`#L;F5YF;QbLXy**|Kh-qZ{wGiSF4m1A_%Tdt;dsacmb>qZ768m18y#hXTj*TsuA zg$f0;c`Z4sCZBsBlGg%G1_Kr|HSw05eY2!JzKg$ar zYIT;H`itSNs2H;tY4=``fSyvpuq_^kvJ2Z=jmq|tUngg3*Coi38^!p_)ih0IyHBF! zL#b#S(CW7eIvc*)?e|;R0Ur|zDBMytB5O4>n0NUSS?3h7c4~UC(gn_p{niMOQ`*4n zT2`K{uu9e@gCvxPyCt@henY<1TD@A4)5^ zIwF~;W^o8S2hN%WJ*$~~WpD2k+pG~dz)sL3z428B(oA73L6^r*7eB=qAkzr9fS6Oy zDpn;%ms(xLZDGh${uS;78#*}x)GqM4z#jKr&x@_z5_L0>XK<^a2Gh+6y2uoH zRn4hA_4fA8_Rr5RFaCNur6-Sh1yL#$#j`mQhJs4z8=K0_pY`6oJGeOd?egc7v)%p6 zcPA$o^XKn`$|f{p-mL3%z(qjcajvFKV&C570yWjPv~I*?JY;je5do1rPUnra_{)^w0Ci_e|EfBH>DIebwj(zoIX5xzW^mU9#}4h(uc!?ql1gfUb?UF(*JikwS=jXqlob5d& zxr!N_7b2K*vY&&@;fMDJ$J6J2%^`tH(%N2dSJ8@28Z$L{B#b4(_ zH?@lykkzcLuQh38_v4$7q{>eoqQVv0T~L*qt#Ep0Kz`%9N42m0I}q-n@lAEk&Y;Kc zQFZtN7nHwtdgqhd%M)IPc69?*holD5tfS>1v~AuG%G#HuNO9mze=`1@l(hr&gxPIGkPg)yp?O z%_7{4gHpevqRZcuzJ7YOUF~bZDZJ}9Rm*xx#DHJKr zX8I*R3eG81b5a0PPYc|)@(F=?o9%BQBg2?W#R3Vf&*m`xQlxRr;$fj4iY9Puce(NMW)xv2qR zQ7Y&nO_ht*a6X%IG25Y2srdNNZ)Mh;dYDDGrmq!RcLgOOo3lcSW&Y)tND1W!t&vh& z%Px{qGY?oLrIsGFOiFDnyH3su&CHxyD_AL|-d4I)mN>Uu`jj$a0~$<%sIcB@EC-&I zR?t3)NE}d1{k&f5CV2-eRvWNgG2V_N$mV_u(AnokfoJ+QE#kt?RQT4Ff zM|HhS(;K(ymTfDafK%>~*4_WS2{MPHm0SRw7yt9+>vH_J@Ap5S>X{YSWyzfV-nGi7 zy#Hyn=7ZBN92>RQI|iyb#YoDB7K(@=RpxvlD_3)Fv|#QnzqzdTg2Hy;3`s?DUeA?O zUggfSMoJPy&9TxwGJyHLWG&R4Hr+2xnBS~x#pkH^-u7PAvcB)nRQ~^@`Jdjr*{bG$ zdig#6&yzf>=l@TZr@3lqu}mdeS-_i8i}#3YGZnZ>W@rDB_)36XJj?UfY8;+QP=aiW z$vng@V)S!;ndTuU;X7kZ7R`$0xQ@zSmBL=7gHtPe7hl$bRV-3LYx*4V>Ybymaz^5z z)0wAztvyMZ+vF^|F9t2ODKQUDEr8yOnK1bkXM<5AEUif9DY*03PnlgOyEQ$nE9Rk1 zDxHO`DB2209Kt#mGul12O*A)V6e`Tu4I6G@$~1K_ZPdb9Lm&4sFaC9Amgt2f!rZIq z0TN-}$iL6HTu7bWNW24K<35&e*LPP|Lx7r)|>D8 z|5H4b_zy!tWr5>;&5|6H3&}jM!M$@D;N|J3vlbY&_B!oT5mQAm1(k|qmfFL*0vHIq zBmX=%1Oj2t`AxBFIw^eq`mdGw(LCAuZ;xm+X2X~Zy6QgWuK(?F{Qs9bTi@+}Px7q6 zskzxIL2)qS54R&4LqBCv$l@U+B)BF+D%*`UxEL`BGELB00CGg52!;{wo2Zd29&Uo5 z5mD@hqJM_>p2T5e4PrV((-f>Hf)3ah8k%$X|F+SFlQ^0HkFh3RwoRyjh{d$sXz!h0 zo+~bBV-0q3(Zk2xa|oG`jrNeK4*u7G-)Q&$E;{&M_hK~c=>NE%@+R)&4fRQIohE=c zV;e8p@-}I_X!pr=<3(GIlg5kxudxOniC{dHaIm*88|_5!KWU&EZ5C3}G35mR^PhdK z*FD+#Kilu^9qqTr;p+RCx&F6bzuc~@|DBhww!g3cr+C)j3}?X6Z;i$$_vat$TDO$l zPUrUaw(a?MjXN8_B#;<*LSrya9x$d-k|Bk@;MY`ugo!;gr9-lq(IPw0|`U0 zj;-LJ4Ms#L*|x6{Ui-JJ%3`TV6v24X5=PE|vUjZR4Ld)GmEd6-pbuUHIUjZaea@9s zf+P|M)DUgR)F|!y-MfEVArG#pXt};NAf!peCz?LMW8K`ZnT%o@>~=Z@v1KE34^O40 znOa1-yBP4>~FfH}!X>WE#jkAU!)jDT1(L==Ifgn>%{2%LUN%ms{B*hg45tEiD9Q#B3VnQ}?M8 zVtj4_En18I(hLbeFYu!8!EvKuTNJ#PI!z=l1Rw|MwDBT`9v^d6k!E#KG+GJ z(a>}{;8DbH5lgMfdDPAZOTYF=Z`V#X`gx~nM48A2+Zt6Gjk~;4nD^Yl9+iP$2@d^} zJ-S;1^>Wo4cdf;r`;=Yb^T2NJ8h3DIJRVJWxidOsQi;h`Jwe}NQP{(c%!Eh;VXHiF zv}OzhT*WM^g=nGbWgNX2+0{nNIA+)xdxx=C06{T`2tiha_8nY(`r``LLrx{0lxqpc z&^Jk=2%NP=am$Ek2ni46Miocv2#ev3>xq`(Xo~{+%$m)8qW6g)-`g}3S<&<0acr!u zWqMoUvAplRXr)YH*=H5JNH4FG8!7|~>CBmO2R7!D;(9J9Mxtl}+*XB(d(x8QR_*rT zyvTtx7f&BYUFiw%gB9Ue2s}8eseED7NSdLETlff14q`jv0l6=>mKSB>(syq3Xl!BG zXBFJYMBEj#WFkk+C$C0UJ!f+1#E)j9-Nm??w5ZO`|(Fr%E@aM2c=66Q05?Pooebc1`sc zNhzRb1F(3&#n>Fa@E9=I=+Zc1T=FI51H`cq6mqt7kj+(+V7w5-Ad4sYNY5Qy=`NNP zfpQ#OfXF3qbXAvxVLp&>DM%dhF>G(4xrYQ=Vu^S>1QI195~pJ-SO5}b(95Yf)~6%8 zDs{GROSuJz=B?b^Bxp!uEyOQ7EvMjUB-wR(L!uPTYI@0MH|00xRL^n5$f&y*7#7|u%9y5W=#_{FOO2*MoKUcZ{z(J9a@YWZh|ySK zcrM(;&`K0iAmDq=%*0Xm^>Dtbag;JTLA^)6#?hLt)bcBBXlmHW^Z(4m5o=8@bqn`KwTNRtc5}kkv~>sGcj%>RgsIJ7eYdv( z{WK0EH2Et%YAbwJx*kn{l<9ch;f*vZ3UllckSYVYdK`bH)1>kY$3(Cjjo&q${Hx(u z3}I4dS+CtY>PA)Z)rkhHz)_3K3$<_un0d5(nr4Roxpezu#E0l{v@B57Zm(KPV`yzl?z(PR6 zl@ow3JzuWuot9!RLnZ@$L&fCs`o|(F=Cr4j8)62}aX6Z=xEZSJAI=WthQ_#0A>_Al z#7UU@{$v5*T^MEdcXE#-lU2w7=7!J$gQ?{lCCJl`;!02LO1af)_s8>Frh*aVHDJs` zkKeGwa2l7u?E##|@Ag6Mm2u4C-cIp$Im_bWjtQPe4!8gtGdFi`G!FAIy#*W67?{*j zE1H{@!tud-M_snPe>WWKLpRpWRVxGN8hWCVe520;I!YsuE1r8EK1?2X3>>FwSW|Q> zt%T?{s(7yESqaZE4w8%PkIrGjcRjV+f^)N6PbD3sk(sZ?3)Jp3c&;MnSbS@{U4f1) z7S%z6wpmp3N;?y^Q1T z(M*4UV=|^%&T(rNc3t#dH=_C_b(GK)csP=)9>-~>9NSq1M;pC%I)dwZOCb_#Ng7Lr zcf~@Y$ink>WjGdd`b_hbw6YxDcr((ey?+|w_LwbBnb2Sp62ZnquxR2RxRU7JK(1h} z7Tod|Jbx_IS-SfLfrQ-=4X)wJx|C1IIJ#PVb1IDETtwYC77;Y#Ns@%dAuaNp)lgy; zIMznZu0yjPM_h3ck&*>qX5>;k#N*=VC&it&cNkgjaIbfo9nL-avl3a(%al6@N2enj zByDnCr}#XIQEo*%C(F${-_NRm+tZ99;`s8%pB{J?P?H#Vif&~uSDPDlc+N^0K0eHPDDxissK-#+{5TK%>e25;#XGEO3@|Kwt( zUr~W=DPCV44`7p! zD0;30QFJ(&Vt6&3eZZn1ZCO0($#x0pv9(n`cW`ya@$RhY{@zz6^m_CgI3+@{Dbg(R zVDlBy61I={tZ1&9U|;ueHcxnHV;n8p^*w-utFPad_KD1J?B#)m7rPjt7p5Pb_%WYV z;7A5&Go8Pf@1SRk;u_Rrsr9X)F>O8CvyyQX3?0VsvgoY+qquiu1|L`7-XQg4*8T*p z$>5qi%zAeRSIy=Fl@h&+pW85f^JD-XQnwDDY$#VTj*3TA%w3Gw*+pLTNpZxB5f9`! z=QK!hx|#@$Q}@S$>G(OgYGCU<28P)LFj-6lJzLIkMV}JMRp3~Y%6*z{RXLoDiUa#7&q@xNYm#tJG1^sd6s3WE zjAtc!N7!#0my9{>IHO%BWD<>c1ZDF*CPixOSntwsNR@H$SeadG6-IQ8_u=K zlZlqg$0VeX=FKjTYDy`sCd!UUW>C2e^w!ryG+fC z=#NDlZOunUa}_vNvSm-#AI)7YjM5_Q-E89=5ZTi%j{tracW6Hx$EB;6aGZB=cYhoo zhMw(qML5p6Q*S$)ilcYAU5h`~Ij}#;gV-&P>Vt8_1E2jb374s$-%ooU@7QJ8XBDSC zep-t;v)BtZWb@q_Bl@F0cW{;E?^t3o7jT?=%6gqtJj#~eMs+pFzWjbkYxR^3(YY2%ou z9eae)T!*wb*jNOU|3M7j7Ee*|m z7l$a5OG-6QhhwdTe^&te;57Hyd883^-L7=5+ML3(=Bh37MEJpqag64<@7!fd<5M~9 z*lt%~m8|9opSC|b9G}W*$9DU097}oZX6cXCec9H?j$d)&<{pO-@L2LyUYmUINr=NS zA!;xnq`xWEPMs9LKr$ z+H)fy4xJm%%FJEyg<=NY2gnu306C6IkYBh|^3&EI?V6Q|JjWg8 z4(-tmOe$E3FM>UShJJ-yWn^cA%-K1>Q%9``h`dy7xTx$(X6+UEAPJnj`nnM z%3{oLv^UU?pCmLrJRXigZ8*#Vj=QU7pVNVS92~D}!(kS1{FOfX)t#){hvOJib<4%I zxt}yk`^aQ~W53435Lg7r703WZ9ML-C^!=++XL~$;uF$uY3F=}8qrz;&bMKbu>Yi1E z7%t(MG0C&E6dJRzKNiPQ=&~!qsRHCm5^0@MA(>P(4!%1?Jfdg9vd=0UB9eTFXB$H@ zhLlIfB8q@l-^Lm`{kZ$Ep(}O!@Wood(P|yL5nH>E6yo0MB-?J6Y)mhi> z?!ev3(<;Z9s9;oBnfbzmk1Ise7?_u}FK3zG-t~6B@0yRdeJ%T}(2cMc1U!w^j5`&1 zbZK`{f)CuOiLG5+vnz{a_uyT#gyVF}bMfM@^Xe^De-JiPfQ0unrUE<5Q{7)x(q3NG z@5ScwR-Xh5-H5q^-zhN>Ft|k#{yU_Snq{8f$>RdEdaVq{RYb9|yz!KZF_RLtsqcL0 z(HO+C&nozm+3dZ6o+i_K$D00S8Jk~!gnk#ep7<@s6^%m}3Z5ozl_&YmYx-Q58!*-@ zJ>krx=eQDS+>;+972Sb+uPa}z#Jo_&aY_!(J2)sJXKJ<*Zyh{BD$Z48+?`D5k2vjo2)Z&tmNQa9LJTW;=F^aUUW+) zi-jJ(KaPd_LjS@UH>)^K2~n`fIOgZ@HeA69&8tcKV{n|CHs%ga zD+xwC6dayx#fdBZbTLWR-NG0bahw-L><)S*pDskyM4rk}RUC}L5QSHVIE_OituBS* z*S!5U;~g0YlF%+Rwc_2}gyPqP3)O|@Pp`IrYJR&a;%GJHBOYtXu4d}q!LHFb&kH5t z%y&h^{xQjl#m-veGcZmPtt|7!{oGbLS4%kJPM;9ZL~4u(_zrGIEExGSl}Qk3jM3uR zYMHJE(ZIywxvAgpha-y>6*vBwr`|ZtJ0Qwp=|;;2ndnn9kgIf>xr3{hTT4oKb8s}U zUa&Fcsj|X>6Y}&*Q|1ehfyoe~F-B)^tcS-Y7*~B2I6nAzVG53d;(@egDHTE1NE2}8 z74gzjc$hwb)jS1`BOY^62uXPd-a80JoJ;C+&*#!Pw(}SQ9!1OuekQ355kqPZ^5wm* z^gklc$q(rrqIdAYhTTqxlwfhq?v+@#ge*Y8K`a%CA{zRv>E2v*HNyJzxk`yF`UBPB zXv^97HX0eGRj-^0*@Q8AV_6E>RnFCXCp}A}x>M>qIHwBKh)I{K+OyIYYs)f9{Ql$T z;kY_ku83pZT=o1&B5$S!B+epgN?t+N<>+?l`R*ymu5zxHaIBL7VowI3qB?k)TItQy zrBjS~IIc_vDB&o|?m%z{29rVvlua-p@J)y|<98W@jmZDt=q~^(@Lz9Sj3|&kzwteR zU`!IX(b)t(Hb;|lOJ^~Ba+X4;6qwZN-A-r7)F|y^PIXtt{@ZdEB3osn4L@@MV=kzl zHU|>J#snRhlNk-jO8T<~qL2san8rrEXg3;e-=`!PdCv9T@l&fMse)@dd5eSjX*2ut zk1HTzh|QsSd_Z(uVsPPQ^VlbYx9P9pD1Hg2K>9t)hhqojg zvv?EVX^wx(Mfld3xZF?kkz%NUUCyr=wFLtFfh_}+si;BnXMsznCee202cAL*@{|?2 zkn0)|$M0A8{;CMsm0sWp4HUbf(WLFMyl7%C2?nX4U|yy{YAM4(ajYeZ_4T@`Jd7qFsGeC_x+RSzD}bPR3eiImrsx{#XNhaW#R!!OnF=al!c$?5y148z z6Re*W9Dc}>Pf4}P(x+n%7;d(B@nW~fC}A`F>yBZ!E z4yFZET$S{rwXuOMc0+}5xZx&^Vk$_VMNH|5 zjLtD_>%W;3DX0wphzs_2-BAQGAbNE4@@CQkZgZGPATD%hE2p_1Mbzxn6FVyhO!EXj zE-W7|7>$(`L#M%nc#jhzm^6vE6o$PWrV$av=%ww_8eleKrJm4~gpQPMVepu?;lO5< z({SDr!-8cZba7KQnWfnmrnVB|P-H$Sn9>?9Eu> zyYTfJc4dDy{sI6d&vqAf-ZT6iBxx76x3;#%jh5}p*0Vq6)v}OVD{FmjZkHY0v{@j{ zjQs6gK(V{=m)V819#Dd!;D24{uGTLn1T_J(5E!cPucX^8j%|c z>XrjXJT*Kmt+K+^b=s$aGR%oyIeDY4KPN+B^7LlgZl26`z%^~r{+lgKgQUHo-SF4g z+n0@^sMLIR)_eEv;Ns}F%hTTZ`R^xZd(B2wVDgIXpB?s&-(T*YocwyQ-*nscG1o(2 z<p@?$TfBnN*J7PXZu}>=F+*%(=XRs|S#|;{_V0*pMl% z3yw4EaKQsiPo4o6L#i%qOP4YF3%jX=q8idH4k!kI(KFJfkH-X^j+_}*IL%&W+#Cl> zY3krUp=WBS=enU0hn=kCriRgAWqQ|(A>y~NPNYo726&?Ere~)OW_*)5Mn-6!@btNG z-u7O$b0Ym*>uQqFjpD?A25wE!FEq&V_qVp7mCIz=YiPA#4k_*T|CP10)6V`JQ4&T} z%C_Bx+wvx8yAj1};vPI9ji{oK+yv;f+{zm?>j^`1x^tb2!*iF{5!nyTFH5_0k9su5 zsZ=nuE`o;g`E@vVJdzFUr-G`Ni@CSAw;4_-=1Lj0M`|3c*=bF~me+2}cF1_V(S{Sv z`Z6wu(x_K7yI}YzaJeO?44cg?)KQuuy=d#t~WgR-@X5RI{HgOPTr80!BKDP{qFha z_vZ)wmwUhMzuUe2&^y}O|8lU`qwj{tAF+{kyPbEof4o=Mm5CC#EQp`~+}-UZzd8`# z^)7nH?}pc(N7wBAPq$m|dcVn^dwabvN9VoUUxt6(`}o^$dwcJ~4;Mcl|8h?df2ET; z(9X_#aC&y|v3Ic#zwZCF0N#GmJ9yXY{kq%xZNIm}{?E&!SK-UUU&L9DfBev=KmWhS zFZap&zyCU#ypwDvi8mlDIv5=D zQ)+0u2!BW@6|Ea8%y=*!w+i~s1{y4^0U6~%t!mjz*!I?=-jeL4NDYCs`jfe#_0p z_0JW{42u;?=Gg@eL3R5ruhES*yrTip>Z{+?m`t4R?{Q8+LmF$5L~g<-skl`@|M&UH zvALPzMJhJTJ|E-j>{FX@wApk5Es!S)|H#L*V`_HRa9?a$r??i8$mpfv`J|QbaH9>s zGd0Qr%jts8CGOjs_Mi|5T+@k>U(6u|7lO)!Yq2Mj)I%!qcnyhPra0DJXKmVsD_!6+ zFVOx|^7v{4=YlhWAu)LWPZ}sqlgye|Fvs~^K4Bk?;iU^V+l^}$hh2N4yfLPVXl(Q@ zpuyh?CQ-M3^>v3!l#C_wSR5ocK4?4 zzuARmrpsEKv4tj&#%r_{Jb8+$@&aLj5*h#KKI zI!z%H9_@&ANRo7B44Yp62w=W2?QVaCd;u@7w4oPIsHB|s*uNe+6kTxNAT$v8jYbvA_t}UgK<}^2d@RjwQpuGdFfx9WR`vL9Df5w@p*BMf5|Uy9MO! z)oHkm!d)6~r}B!sm9GCv$y7G7-XcW9`;~ z_R@{BKWvMoA81olVM#E7$*ben4_Cyf56Ek-RkWhY4xshJX6*L>+#ixUoMt< zt;Z{4r&o=%1EddE1wvmiuwG*a(`O`muJDj#&w%);|I2P?HuvRAA76GnGswH0C(pl8 zziVT;+ga5`rRF*qw*`W)?&D;eHUSwij?6V_HP5>{Pj*nH0oUJpO(+>wXzFYY3?FE7 z?iRgrn}}CQZ|$mRZb@9=2{4XRMt(vKv*h(mOnDNCCE_!tMS;&`*sw2$+w|3s?ZqFE zQ%)jI1YfBfIAI0&NsK@Zr&Q<=n|$xkre>bvZMCDAbLnV_8hsbdSzD7x;b*s_8_=Ex z7T0cPd$4u*ZO0tVq3t#8|81KNLuB|_EXbJAqRf>x1x_Do^3Yff=1*Og(1IMjc}Ws> z$r4g<{uzfscV_7@^n<4zukJY#V20h!*7tFz+FJG^kWnyjj&;RZ8CiH<+ocwbqGg%L zdMVhrOcb~mt}JB*1^ZqSUl{W*a1KOo2eIKwFhI{x&whIO4q{ko@iM515-Ne*t$ig> zzk2ii*{l6``>$YUhtU}lmghXj0jS;E+Z9uFlYK}tBDGR+U{=Dj#P zCyMbq{n7}As&_FH`f?R*>(M4c-vhq{JCcfG(Tqe)<4k}a56D~@?n`k%D@Pl*`r5n# zmBa-nd<4fr`R!`T69xgJ0$cBgHY}iL_WgWDd@26btOU;+Jt8X8977g5zLp+*d(B|k0W2tOdWQ#~SX9(U6TvIukrPy=aWQYH z)V|xPB740(ekFHCnM{Sf0#i4kZqVhf!>>{}??9Ef26cPw@u}Zj=tk95s!o~IEs;cJ zZdA$UprkH8;@>Mf0X6XYepYkKdjEGjN*N;fjQLqPO5)Hj^Q1SM`&hA$75o1u_;2vP z0sFn<*^>sMij&Y{hCihIDkZTHrDS_Pc`>Ewq*5en<05q;)5EkT$lC*$x|uxJsq1l2 zrI83_KHE;fjZ`WEaxhkBEMOZsn=!b}hlAFIefLJMBq=Mi1GrgJO$x|cZU14{Bx)?n z^Z;&=fTY`c0!LK$HZ5n?Q8D9D)oN<4h(Osb#}BJj8zr49>B6~EtCt3*Llz7ea=V{2 zyK^;R;-hTrK%-SNAp_(Z5DaaZ4>oXEeC_<}lIFc69#t>SQB$FjDKwP_*bAJy8HNy~ z`%%#V!g^2-d7R(dK=i%SdfHk#iz?pnFi*Oj8Π&erG*{e{0 zhjWXFc^apafb6xR-&n9z6{i{*aNt14wp*4_c-|n;S5C5h^;9c9Lm@KFfpz@@LwqYE zIIv_~2-LNE^zOyk>%GJM1?F)mF#W1j&&CV24ptDFQLms1JZ}$)PeB2cDYzh~JoR(V z3u}|!BrzN-s>^N=x1d%7l_0nJg&+w;@amSgV!Cq5uJX8GNcV6qjpg26CmCg#C2Gff z$^M;ab+riZvY8IoP&)J0Mq^6@@*jT1E?K_m2-%ed9c<6BB(=n@+m2i%0y(rmjz*eu zL0WKuGNO~#{iqukv~18T z(@cTZbyOxLn`ph4^1}5V$Px;k@t{UAfx;)nQ9j} z<>Xn=5Bhk~dC78`IJCwVmP^bDmFV8vic0V?)EZK5b16D#3jVZc1y*&Nr=>W|?ogC!^Y0M+>McRgYbg z%Pck*atp_9zR|WK5w4!e)QEjNH@C%))i51ZNwb`d<7;gMT@`xn(h8Vk8Ic_F1Y|#$ z1Xh;Ny=(IS?GT0gRZ)e>tN&2pQD5_jA%wX@B=uZ^6>mY!@|wdvW_$86&qMYt=Y^xh zblPSNs{)f)H?ek)Wy7o2N~zy?xj_xmxGa9_`v|L=wM z*g$WX^)(#RjD_eTOutR-r_uz&TTsptHKOd}A{C;pX`%WMt`%OuuC4t4WO^Mf!@Zz{ zl}RI-DWiM5HG-uHx0SF<3Nm6+V9se+#36%Am;?9xpYTZ>0;9-T5^HYn9Ho4`k<@Ms zaaw?ZKNA&1l-#j-DmzGiO5#y2B_e1+b!?QIbRed9wkmiQhf=bEq-WUJURS2sK#PZn zWh{+Y8qNc92=|+|^&X)kUaIq#+^5PSPNX~>>RYlgFXi4kWjR}Va#b}KIb*#Ul?EQ$5_86tHu(lf44!;*u8Z#3QOS{!(hQJvl(<|Eu^I4MX?Iv%$8X51#w* z2T%NGem?kS!#dn(ZDcIe(&CpahqIV)34Kjy!P6YY5F?M*4s&=Ho30gvj>jxSq5lQi zU!NLb70!|~I+xUl1_BmF3y2(JDhk+Tlx6&;qMiPPdR_S)-p^oOjxEd!P=!@!rsJc|B#?~zdw9N-to-?u7@LVsXMP}s6 zY+DqxVB<28=OgPh6;ct>i0xM1E&q6U{%ViWrG{~@;EBE_^eyA*Pp+fi@Asc=Z^OU+ ze!u>2zyIvnKL$^pZS4&D{p}~u{?Q-o44ysv2kC#79Mz)QNXDGQAycDg3`uAIw~{6u`#yI>^M@7xSAWdW2njCBZ^|wcif{^rsonXt0;t3PQkccVW z+TI!NY=u$u{CS^+BlP z+6n1sXZtyQ{yg%uzgILQovr>>-|v6p_rE#qKN}8qhEKPH=g+^{dG@@&^Yni^54`C% zPy71+EZe?$R;~Z7{!U~4?+hN+|9w2}`mZdw3vp}aDre|*332lb$!xCweoberN@10O`6MH&692&FC+2DhzT0uyWU(jK zZ!jpRn^~#;D26Lj6YCllH^8fh zc=d4zPkw(-AKx?O?h9ZZYC6hhl^+E{LQ-5{`xxFAKDr-FRD zck&;Yrq_Fi2P9&naxzgkz$)?tW`KbpOLW94wGS1GURM_H^VAITI``)~x>A z%KQu!^}TMEGe0X4W((ix&Q#GRhQzK4YeMf}#OBal)bSVixIx;18VwaS0W3a7tnPYd z><|p1V^HhY0`Js69mxZPgvKS4EU}vBiSaBc*j51nindLiN*jTpve&y$& zCRSH5gulEcjnM`ZU$8MV=A4D7lO+5KcSdD~4W{OBhX)=rTxR{Ey|>Lz+!4S&-Ln76s6P$!d8V!It&OJM z{)LbQx?x444iPm7EBUGp;$VD638{l542gwq04dtxKNh2IG{G*q4d2uSW8)XxOarXY zci^F@P4$dL*sC|+pR{_rGz5djuq7OJI}J`S0VjW7+bYZTF1O+#S@YLi9&t#o$#-$W zOcWH365!{hvX$*u)@@4qz;0Yf9+>#ry~;=LD%qFPwg4KEwVmzlCp)!{&FFPJD`%D@ zDZ(j>$^=Znaz+*G9#0dwIvXEt`)(<{z|IhA03S?5GM1AUM{i-3hk*OL6t>KGo)l%u z@WL23*`O)<(ODej?04#mKn;J)d$>q@sE(Vth>V!b zbP)p*n8Jd8bF!L9X+rZEj@RnMt=8Nw#5~ zfMsDhGA=0;u{AKospZ&$zSMk7`oU8I$gk+Q^tAs^`4$&fGLlT}5Obq-tmUd%^9qdx z?(8h8AVG0~yY7>)7t*ja{@!)s!0P^6_vNx(Xrc9+gawmeNVc|j4!_l7qi(eN!BcdI zsfX2(6QvxrYfs%mbT?N!E`&^lr z%mQ3}bw@6gDfewZJEx=Mtp;7SOft?*Fe2rG3SLmkL$cd-JiY7@l49lAh=vy|jn0yY zW@<1h6BO+YZppH7I+06&Mp4d$I0d@Zb|XqEWFwl;G?eEOkcTA^{#LRQ;lETlXjm^> zs_c<1XPnyz9|jf%OAemn^38SSntIF&_dsb3Nr%e9iwUw;L);75*@*LE4UPEnkP-RQ zbU;i?1vXfw>^g%@1%L|)O|gvjungs1S`I|sbl$cEZNr0ZkDIq z|Kb1n1lgJmJ85CysAIj62F73!Bv`Q#z~aHP^_b_gY6a3X8hTwQ8Y{HIJ+wP=qfZH} z)nGF8pxd^$br;XQcw+kQ%^Q4Sc-gmm$7W&bJmjZeEUfTDnpuowfe$)#!1be6XI#t2 z@lFNUqpr9RI0+#zfP$rthz*ksii=H>F)RS1SE5N{h+NBOc(2DPWmjjix-;M< zFk+#ddPoLaPoA2AtCi%ApEkw?x|gM}v=~+n&w33zmb)_dOAhp6lmeFhm|V-`N}G^U zFnpDAyoaV~lJP=}1gFeR3v#H2_9QuXE4;?JX70dtYj8O}uCljn2>+lv1G+zxr*yJQ zm=E?ydiDz05r>?g6egxwi>2VORjo~#Ut8SAWk)BLL?QFXiU$dxvF8hV;T$^QNxJ$ zh#k$c2+cTr^K|gd%32nB!vbCTXA+kHGe-w9W5)tDH(qQ%2P z1*w9kS?N@Ok%S5nhw44S9hj^uHN2d#nj;maz>A!&hSresJ%G1?aC`ddq<3=i${_wJ zh;|ErL$GA*i+GYU2fS8nk}}0$H(-7*7)j!k36SPmr81Z)5K4b~uf_SrN9j$Sq)M!G z-FgeywBNg_lwnUio^KKhrPoe!vq>6R+P2NjW+Evx*d_g@_{3edE!X-|P3B59TWk2z;@K=K<}c$MBJDI=Ch5^BOP@DeuJCdDP%zGJv_Y-IR;Zt#!i|L$ zNOD{zs2U4Vqo`cJ8?3yEE7E|iRflH_0LjihLVRHs1=hS&(^47JbV&;gts1mNNVJB( zI7})Cg6iju*${PAa^U6n*Cue2QDvE!AE4UF5j9heW@N#hShq!}q#_+r@cg3F zyvA8*5CJjswc3gw|E ziYgx;H}VBaCa@Yr*tKlTB&Q(*+YSxW3@RNB0AgX&t zCHt8Lx}X&6qL8$ZPT;JTh^p_a!v~2LvZ_%e00ZuULf!G+&-TE@O7p zyW;spoKAen8hu2b7d@=0r<#Ycdks&KO`&PZ(Mf%IdscCUTeiolPB&_=dSzOMp4ulx zP75}fyHJc4o!zNnvOSVD!>c0a39u!rv|bmh^##@&qcYfS3tsN1aFl?hhq3@D@wF>( z9&^CE0_onCqDEFcs*Fcsvz`{i>D6{eU}IC7Mt33%H=07mBVX6$>#KI2;v}f|VCM;p znRM{lYfr}%lrxY?auM>_fRQaf2lcv*#L~gUF69yHb#+WbkQ!-P#J+w5!npdo+9Y{o z{Fv|9;#Fj1**D6j`GO^g90emNU!A}ko}1R3R-TIYG=5UDDPXKBFG*;h?KG)nG=~t^ z8X#@A7X=pCMr!;dc*U-ZURSWfFQ#(v+%Nu^=NQXF@q`*wl9cwx;`^MJ8ANj&c!cC- zx+mTWma8{Tm#Vm?e~ONotaYiGSqX(9%}gxSVI?U>InRdVr_SsB)3f8fA3ML) zrTt^hi|^uuiMc4)%*g)U!U{Fnwhp3+bFPDQS|LBZJ6Q*Ze3q49CaY9nJ(OBaTu?%~ zIKmzjqzfs?zye|`6csJq zC3JqmLY_uqNCsPdkHCq7mxXx?FEf_Mz^3rs6ZuYwpGIpePhUh5f}9}h?Z7kLzhis8 zP;=061)!K;IpB@JFW|!~X8<*;P??UIJ(*ReW4D_+*IpDMkh>Lqx(XItXORvNW?fq` z=Vh+U@2mT9<^5uRbv_(f-UsLxp+9Hl`dz#IVKwr-T|QZS3twxl-DeR;ETm3n8)^of z=1<>G)6mAY0YO|(9C)%%-*T(>>Y~)ASTyV&E*RR-c8`e>&K!*mYt6F5)L2GV9wAP| zVq;X8S~7mEByZ1Cek)mSq7wb^T#&t^gVyQsEJ&xJE)`<#qgm3?yBB5%6||6T3(Zpig#y;2ig%f@ zQgmw=A;61jAafJtDo4;)PLqMcyWVs>>+pp2KlZDCn;gnitK)atGIcte%9>aOAQT3j z+lJ*frIo2_0a>?{U>k(zx}vm9l1-BGMr9zKkXZGF$n+|jUL8E%)GQ?_vOdYSq@c9- zHNkPMljf%8g7sQU=(Jp*=xU!VOD!^DF<*X$j z@$YO%o+~l1HDG-6ru23jLtdu7KGE#cN7U zZ&Nb(99VFoS}c35yaANP^3H>2WM;KR3Sapb#Ob7`{`50hc&tuh>ZKAK9Iq%00moC> z&)0Uc>IBoyLJj4s$hss_~SB@{-%AdC8-9I{f zDQN(0l`Ut4Y!C9CF2l3RYeug$ICQEv z1c%hSP|Ai@q*7vG=H3+;GDdVhbHDH{D^v%g9$|G`T;Hb9P0O zqz6}nc^nqLDrU@caPUx$H@QB?R^uwa>ZYDROOF8p7n!6_2K@m4*Y9oV89PxiJoHX- zaAbQ#S1*UP^slVC6yt2P;ozvsh5UEbwWTU1v2Gci{I|MmRFtGtBJj(~H>{2$XfHit z1r6Leq*nrcY0Ow_qun9t1N>~i*Ebt+%kAR};}3*^D{$X6DscPEstkLyxG`n5tNkkG zMF4|eW>Dta<5zdnnyW@2R0{q*w5C*nn^cI+Rii_mM_SQf37mCvCT%P>HJWjKywkRo zu<@a#kwZ}qB-5Oyijb@Z5~Q!)|8l2ezZv_ zG_)2jJg#gIY8oDGV^_se*9a7NN>Vl0?S&xQRDh6!N4Si}xnd{ZfwjlDOp+?FpN{q# zHw)V&86MgMTY*qf(S;@gKb^$sb#IjLkp_WpTv5ste(iGAT75G!4tOH8hP)9ix5`Ic z8Z8px(-71W5R9}f9NY*nWfm?r`*d;o>ZEDw>Oyd9Wd<$ump?elP1C58Nli-r_ZV+UFeQH&3Ut?GP{)B{~$6x&Z73c=XNAM5pA(JhpikDWbD zs;*A0j;o_yYqzV=G4+A*b>WU$X)R|~KrR#K(X}yGoUhat^7dw7uUIOyxhPg~!4MzK zN~E>WV1|W*>dWWb{qGN6lNbBPrw891yx2S4hqr{QWoD&0KG`Ej#|Q8BPWQgsM@zzVnvf>s;LxXDcFi>%V<>+6~s#$ z>xh4NyS7}n7@jQDdPI$-2N-F``+F}B_k$Ul zgTs2W99xYRP@Ar5YxVY}WhjUc*i!Z1R^x_>!aUat=un+%0E`0uY`a2jfj_96hO~8j zRcPiK!?kS6pULXY=nx#sH@HZ*oSI_Z6Jbs>v%9t=P{#f(UWC@^klfs8)vwiCEs`Jd zG%olGWTuekjEi1Xxv!Nv)s#bVsx;d;AHpQ6)I@m+Q2;K9QxzajTh0nsk~LU0wYHM| zw1D#{Szwy4D%bFM4(OY#6)#Y5dD+dbB>bk#XzJ=#Wr0$?r847QOAA$(KEPLZW;nM_ z$vT@nQ;W88)y==sB3r$HvQQX~>aE3(rQs0I7o!xRX-@ zB$Tc{PDO@M>*b+F_n%%d41Qkq0S6)Y-kK&XFGMiOSr!z$2e~z19T2*{7SJ%2kYT8F z8nfSC@~hN*C4^mPd9|^hmDzj6Q+MUIWIEGnST%IO|GslWc6UkNDsas6A=#c;ZxVAW zQC$`YcFA(E{AGF0bL$(e@2MtBIh)aZUiAcFYSwkodh-4~Y^9Hsmdm`qx#^Ibn+>P1 zNP*3P^Pf@oq&&jdvCZLop+Op2M(;zto$F>i6`spo2i0xt|JeS(wtEnsTkmh=H5TaS z8hCf$pEXvRA|gHi~_>_v-CFIv_(!wF7m>9>MxtA8AmG#mmLu zW{5j4n}6T)s?l?2n*3!Zuu;t?&c&Oucr!+K{uS%aObTG1%-HNqvgEtYi&JE;rBJZA z{iISKlR>{v{!PC56ar9CE_Wh{ItXgYUn z8@|ZIx>q8ykSRE>w$+bAv2mxBFKJ=*^rCR19bgX9xFE(>7tbeDM-X^Xi}DXDlu6D@ z6YD>#Yyi=hdtGdxKQ;AE1(&Y? z{72UAyByvg?GrvDz`Z*Jp9XPnj!jw909(~`M~Hi}F7AqMztMV9{M`8V^~+lLT|>K9 zYQ4pP_q7o_sjClb>vX9r(jDiq#Tkich)l~N>5IA~eOafZFYT7}g&dQNYmz=gcP+Q0 zYE#snM}w{Bhp}Qb%2DYq8UN^*HV@D3pIZE>m?lX!rD-{1c^ndKk%dIusXFG_|Eg|w znkaE?6IJVI)k!o>G+lKIGRa%|+R0fOv0RoR#qhnH(JFmy4ECD{c}f#bGYBOHvcQ5y zIK8!1R&D)^(}GPbDrs%G>3oG9q#=VAcA=THLKkwIXn9@TX33bw998+;p<3RVMN3Yd zau!kki1UQe^mZg&Q43lm*SOx-#?CXw0NV*qHfjaio8V< zM|H-7?+#A-&8QODIy_ghARG22Af z(=%_Syjj6S8t3FsVfJ5=^4uejSW0~g+{^W-R*oSRxc8VR5z8fw>b}c^1K4@ef+`J$ zf|@}s2JmNNVl|Fan%E94s~EPr^S;dpFJ)d$^jD$+zkHb~s!v5r{WcuY(y2MX>t4sq z1gui@s5X%j?zZu}1`Lb(SsU+VL$+ktRt}vzd@s;^!|M7QeZ%hF(>KegjpB=%A&55D zKs3wn!pw_ey3HD!RV-MDWC?>JE0`3q8I@{M8_(O9ua3s%UAog$pZ^8xUulCr4+B`W{s&LCYwLffKiGO$ z|M&3##)u*qq%LFqY=qs>oV+;by?99q&J$F^XE_g<5KIJ~GM##dVTZ5~9}S-W=*~Sn zE1w1H-ypp7&TPcIpvXRgAFNpagTclG9UpePy~zI!IlCLsC|T zs;Ca}Rn~Y+1e;y5`~{z7G-ssqKZ9WK)bDpl@WL+VhjPSJ?%?~l&~4J?fcF_FK3NI} z_TJ@S#0om7s)8%+T6&sgGNqL$jT(R7Wqh;`+U*8Mr~VU;Oywd40k&e^lC5Q|{%C@K zc${Z7{|Dp7kL3LLtl<(ISO`gHF?5n<_~o1bkME? z@fO>ma;u7=jcQDXyQK4TdbD?P^5dK1mnUTZ`1sB7unOm(pjMRgRGGslRO{DT0>r|M=0J^+ZW)zt_2;17RR@Be6s`6c)NC)-bI`k!adwja)a_wsz)`46wV zlxZ*kOtox3ig4hc4p}F-+rZCb&Wj2FMDKsalwoSpnIwEf6TPJ@;>K73(GjUMjb{1Sx6v* z&BfogHY)PbiSYMrXvt}nwVPY-a6DRj=&^qJp zFDH<$>XegBeaY^rA@P{3OQC-qZgHA7wiu)j0taw)M z|H@tI%kBSz!Car3bBF!khLF`j6+HjnYEB;eSGNHfSyw5TpqzPV(19!E@`s`4@o$<7n_ zGoGE4<8gdVI)3w#2^*=b8_{G4;SSS?C?gm`g##soseqBL>VVo%n#U?%o~fLU;NSX| z?E{$p(~yzQzdEFI*7^8OQ8RE5dY1fF(j*?oERsSxbT;sQWLP?+FJv9E<-!D<6@12Q zFnAau&?+O$Blrob*yht%kaaawFJGU?v=Ht-W8p^N9gGcH6o%12OD18Dy~g0vAx6Mk z6Hr~Twadr6^6Iyb)QV2@M?)(*&B6q?8h87m^HHia0=K4DtDR;zuoQReG;MX>-noHw zDs)Q2dhbGP4=UNe-?MuESHAL}AOWn{|DO!DpVjYw2Rlz6_W%2M?y&!VufnTo7*%B9 z)g5l*c%dl=dAPc5bRm)3mB2Mr=Z@mPlC2^8>X6QCZvL!aKpt7wjkThD6IRN+(BKgP zVCuPtDl_ND6Sl$p;Oi@|{RD9pl`r;Eh^mw+1E@_PGu)&c`kwQp!y3MGh^0dk7oB_S>J zzP&iHC8PNW6HzDJda=;J_WadW-ciZhMZx+aykPTNt-%X6|D+`d`Q?AX5aD5+VRWW; z;{`i-y-cK+4`f|U?J(4abYua;T@pZTHWjzfT6G!Wew3LHX_o2RDWmF_h3=9#jo9_F zJdaH6i!Ym+RIKwnh?0Ne=N9rGhLHSn^4~xTdv*D5`$7J@m*?*H|Mms28>Y2w`%%Ob z$^_LluMGvzy8YPB|F<*-s8wZn(jz+tDzH+k@WA=la&zyuU)?vdX*bhmjl0V;E#;^2 zxK^0M<=5G7aE^D9Y}BrEHA`+rzx}!MbH~2p2GznX^8$lk(6WWSdDsO0e9vnBUu20A z#6EThSi%4MJN?G_fBVUU|L?s#cjEtP#BxEXLXgL>yjsnvDJEEQ7^z4};iQ-i0f7Ko zw*q+8IOH$d1)5dVIJoTIfiMs-B+$604ht``M1RqTNXOK~VU<;ub(QA>DfoZsEZJz! z{U@?bS-t+tBK|bY z10XS}lkkKUYTYZvM9t^HPhF=6^%nB@`sFS8!h(t|-;P|XmD<}3^_}wl^zt3eJIVx( zT|<0Vgip>@@Vebc>lfvSg+&5`qlU)!tEf5e-#3lY1n&Wm#In7f`olNnFSY5%Lf42$9mR>b8}m%rch0pn`qZ$O?9v z4ZFyC9ga?9QE8Pa} ztwH}m{=1*&4*dTe5`xyt-qxWHks)62bc`;2i~ZjePyQt5Jgc_B=dEptqg{*7pX*|$ zp)~5QbZx_EM#@np}mFa!0 z?QY4|fa_qeQ>G$7H|rHTqB4tmqTo4;oQlo9B2>IoY=GJaR@INm934D>^tD&fS-5Yt zO!BNuia4uWJ1eHItn3YhigO70WRKCnOthh1EiP!nRlB4`J?>@L5>-uYwd>>F(&fIo zQ;XeSXEcv#G^)sJ)tYo9jfeH|=UpEz8N0r*FcEtYqQMpM0-L_;dBCC7DGCEpyczu} zKN%udiiF0Btkqo84M^&?3T#)Ts(8COyNuZt-e0CgoGaSlW3u*7v4(e=aFdB+As3+O zmE#E8kP@B#?vizNKW8gI+R03n<`5(onRP}oNhYj#fo{U@8uQ`! zFKdS6i0h4-?sVF+^4FWOYo>>s;+a%MMgWIq=*aNr^ygG7Z2l>JPCHElf(56AJCenEwX1G=Z9F6p=OGm*Unx#qJ}SSTP*g2%1I#*zy@-ss1vf*6999<-5z!700a* zzKo~-Co*{v)S0?{PQkCK(ogUXMS*jtMMk2 z(Y<%ySey>QPu=yXr|`)5?AK1c)z#I4VimQkf~sN-2!@2ycwe2p$ z)Gq%l9iXECqQFCSG;gZ6mBI`RxeHD*n#2RptF6!`RlB)kAp; z?pix=G>(@ojjC8|{RFVgeRt{pk#SK>awa+J7uZ6o(r>+sh;pPHGyqAuv8^0^>NaBa z_|AI?RH_{R%I>f zaH|Nd>!{lkIt8kgf4hqOK!^|EHSs#fbgsK$yH zZVk(O;Mx+`#JdHCajmJWdTR2IvN>Lv3oMU6kl#vPu#Xa3T1h}F2=aI`Rq6roP^g(e z-;D<9+n}O@TV7DFF3;LiaGZ<=<`d|%Udf`BX3;|>%UIK)4ero`K+a`r&>HcQ;2dnMBu4tad>EshkfLHo|^&9?QPo6x)|GAgv z4)$L^A|Vhu;$@)#-*cWM^523^mYMw;8dB*`>0}A~>oMoWG6A@?G}~ti^k2p^p`%@S zJH!HX-B7rcb@bK`Bxe(L{au_!q~qs5{~Z16(FZZ5TiZLs4nkJ`xOe>e;Pv-Ia$NPE zM66(;JeRM(e{a`AZf=J1jZAZMvth1*Q@O{03kBkriz4UgB$3;L?52rtOfPvHHAfpv z3nR4~eul$1dO7QI{Xd3yd7GKulTPZ!u zcj0ftAHViz0sjxCESbfVl;`Zz>saOgwY{}dkN@~=XZwNw-^bG>N3 zkN-cfOWx5u=A|G9FZYEPWI6wpg@qTy5u-g!m-An};8KJI6oWXFDt2 z>2+|ek9$fOt3Y5>CALtc1GS!?pF@o!DyH5eBAZW4#dA_-5iOWW1?{Ru$GwQtXh>f0 zbR16(Y39vXK_gnwp^59d5RBIXFOqVW&NZ8(4I}CNhb0LoKk__@I@pMAmmH*p5d=NY z3Yx3py9h${m>U2l3|lM6)ie&LB&4Z<(t$g&OP27Ar0hz~hY~@78XEJzp*IPFP|11V zdEYwI=~Mt5|EC|y5u;fqs?sjh8<>ubS~x+F>alqE$;Vc3VGxJIq!b0qMS$BBe8pjy zQb9(N#tJ410K6gv&twrl>1JA(m`9aReO#tRJY#MXrO+M3ythHtzy0Cpcq1S$p_N4b zGCq-I!Dnz$clzptge))OaU9Ac^`@lz37n*4k1+hY{3-hjfp}%G1Y(8rT5nRe> zKagewJShl4JcB9};{B21;)b4oRIJ7GO(Ga0KON|7zpQs5P0o3-VQd%>|EJ9VV6gzZ z+MGx$UfhD|Y@5i{p$zZ4YmJHgQehGAS1e!fz=nxotR6PZujYB!Fu#(==Cie+ev8?M z;j@b)2i_|+E`0u02b0D`S`h@lf(`TUGm+lo#|nS@VaNPxo`)UtD|u{2>p;^l6SvzK zt%I?DkCeFdF(;FcMDo{1&7Et0v;96Iv! z`J;2fa}cyYdsii^eL*uiij%mAAGqyT^gM9eujH}0ZD_64z={l6*+VKO;Rv=glcH@N zgYkh$Su^+hqolpRlLleIM8+w&n>T0i4il-%_~Ux_cbZ7=@#A+D($2%K`PDoRyXIH& z*vxhXQnt-(Z-K)8htj8d+%w9p;w%K|?LghnH4r11S^yFj%^BfU9P5;XQ~-4P96muz zn@!7%om|C9Vj$EBB~yN-&GfBsMgcitjQsS@j>7QEdRIqffPQR{6%*;Ao1L5SvC)@R zlErZ}$U#AJ*k z1Wdv+aje~9&b5!Z%69HxW6XJ}&)y|aY7E|%dK6kfR3#ltlK5zPFcWE(oyNWu4WzF} ze+mnbkA7B6WE|)WUJ;^-^&kxU1g;ta zWsVpidlA_W0MU&L<@P2BPZbWXq+}Q@Nyio<3>L550&rCC+;@;;70See5c~B!4?^r$ z^4OfV1%#!28~H$10ms}sLAF01$hon6J^#yD!rtitPP;GntOq{(^*j%J_A7a8J`0ki z2+C}d(}-0fY+YACK1jiIsURz=<1s?KTrqfqWdnysK`tN%V{%@}(#R>!rQm4fU@0C# zZN)U_SA?cY29`1)ycY$}fJ>^T6RJ+xwz9yfpnlfWAFPw6c{SJ|e}NMW@Y%OT{9x4n z6+I7Z_A7a8Hro<*Zjm@^!f0!_J#tC&7(gC*P247kE%>LHtz}&WV7HTug)vP?3>%3Er))-r z{L&>xg;}8$=E_@d=n+!PGd7g1j?;-pNL1~eL+#?HlUpIm5jh|hB;g?~SmY7HuIVgG z*pNh!D~P%0S-^`csyeRlvS}JwXbN`8`i?c7#Obx?6?C$ySS+WY6T6r}FxUwOe#AyG zP5nXN&v%}9UREZ_5l`Z9Wm{pe$8$ol_#>0i1U~>da&0fUqI0oE;&IguIc94Zt$S?~ zgAxc?+b2|43i3^6&8l+VLXV&2w;=px-cH&r6AlPCh-N6U*wu$*F{cAoQ`=uL&#r5{1o%`UMVl&S@! zLWQgxCmlKi(-X_RDX<3t0xEgRNetY)R*~TMQ!X${f7QT(yyHnZW3I#4COH^u66^S# zO=4H`8n8$^9fjr?#X`1IkZ3LkG(_}J5%V-oCr*nye#i4@7&0LadBj#VcMnpM8IP(+ zC=1)|RCLT}^kW_u>w^Z895~x0NG{a ztVstaz3WT|j%$}#16vz_E`bq%Mt1>V+p5;kth-qmss-fP6`iyL;OZ?-OKEmrXLD8f z1)CqzEQ?d%8ctd2y}|dzGS!jig3VD9Y=aV%ALDdUBe4B^1Q6WI#u}k^O;fwXZfutj zqZpTobiA1#*c?al@#B5$t!z~(z{&bYr8S4ZzeKQ9!~k^;D-o4oyr{jTU{hcXIOMo8y;Ouy0VBe3$dt(6gm09LgWq{Fsg1FH45Y zJ{XyZOp7GZy7XC#)8tlp!RAYA1kv@56{^^8S}_Q<%JK8M+JwmrYi&KbOMmHFl3dBL z0R&v&H>dk2L2+Hkl_ituaLElj!{M&()gt@Se!pp9`r1{G=?41!erLnPcxp3YyiI+B zJJdH&_1!Z5`N{yfpJI^-^9yrwFqVvH%=1ugms}WoR266zF8L&@g3CO{kb}{L<%NLx z3VAAc!ZbuWu;3&Ch;1^Ps~}yzls#%wwcF`z)<$!;(*asvt0i4)TF06QIy8#NT6+bL z^b$XlMMzO~$^ZbJrcppns~Bxzndhj%Pf9lQ%z9(j8P5x16|?(j{h}PPut*@Yjv^0A zSdr0?85Gru8i>!yuY#wtdAptWf#h|8MTa*X$=Il1J5P!4M=azK+wj^3V(?J|F|Y?> z@OcJe@C629&^{0v-TpO4c=B*c(+Lxv_qw Date: Tue, 27 Jun 2023 12:22:20 -0400 Subject: [PATCH 24/62] bring minavailable/maxunavailable in line with gw/otk values ("") --- charts/portal/values-production.yaml | 36 ++++++++++++++-------------- charts/portal/values.yaml | 36 ++++++++++++++-------------- 2 files changed, 36 insertions(+), 36 deletions(-) diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index cd6b9073..7070e243 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -172,7 +172,7 @@ analytics: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -208,7 +208,7 @@ apim: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -244,7 +244,7 @@ authenticator: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -278,7 +278,7 @@ dispatcher: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -342,7 +342,7 @@ portalData: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -378,7 +378,7 @@ portalEnterprise: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -412,7 +412,7 @@ pssg: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -448,7 +448,7 @@ tenantProvisioner: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -516,7 +516,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 4 + minAvailable: "" auth: secretName: minio-secret # Leave access_key and secret_key empty to auto-generate values. @@ -573,7 +573,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 3 + minAvailable: "" resources: limits: memory: 256Mi @@ -600,7 +600,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" resources: limits: memory: 512Mi @@ -626,7 +626,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 3 + minAvailable: "" resources: requests: cpu: 100m @@ -654,7 +654,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" resources: requests: memory: 1Gi @@ -680,7 +680,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" resources: requests: memory: 2Gi @@ -706,7 +706,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" portName: ingestion-svc resources: requests: @@ -735,7 +735,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 2 + minAvailable: "" resources: requests: memory: 4Gi @@ -778,7 +778,7 @@ rabbitmq: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" serviceAccount: create: true # name: @@ -934,7 +934,7 @@ mysql: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" persistence: annotations: helm.sh/hook: pre-install diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 393e641d..6f33aeb4 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -174,7 +174,7 @@ analytics: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -201,7 +201,7 @@ apim: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -228,7 +228,7 @@ authenticator: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -254,7 +254,7 @@ dispatcher: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -309,7 +309,7 @@ portalData: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -336,7 +336,7 @@ portalEnterprise: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -361,7 +361,7 @@ pssg: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -388,7 +388,7 @@ tenantProvisioner: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" strategy: type: RollingUpdate rollingUpdate: @@ -442,7 +442,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" # consider changing to mode... standalone/distributed. # Once Portal is installed, minio can not be scaled up or down. replicaCount: 1 @@ -491,7 +491,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -508,7 +508,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -525,7 +525,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -544,7 +544,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -561,7 +561,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -578,7 +578,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -598,7 +598,7 @@ druid: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" replicaCount: 1 image: pullPolicy: IfNotPresent @@ -635,7 +635,7 @@ rabbitmq: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" serviceAccount: create: true # name: @@ -781,7 +781,7 @@ mysql: pdb: create: false maxUnavailable: "" - minAvailable: 1 + minAvailable: "" persistence: annotations: helm.sh/hook: pre-install From 596da0011fc70054e55818dd0f6d9875912dad83 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Mon, 3 Jul 2023 15:27:25 +0530 Subject: [PATCH 25/62] Adding the doc for mountpath --- charts/portal/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/charts/portal/README.md b/charts/portal/README.md index 2b579b30..9d95039b 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -674,6 +674,7 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | `rabbitmq.rbac.create` | Create and use RBAC resources | `true` | | `rabbitmq.persistence.enabled` | Enable persistence for RabbitMQ | `true` | | `rabbitmq.persistence.size` | PVC Size | `8Gi` | +| `rabbitmq.persistence.mountPath` | The path the RMQ volume will be mounted at | `/bitnami/rabbitmq/mnesia` | | `rabbitmq.replicaCount` | Number of replicas. It should maintain a quorum. Preferred for HA is 3 or odd counts. | `1` | | `rabbitmq.clustering.forceBoot` | If RabbitMQ is shut down unintentionally and is stuck in a waiting state set force boot to true | `false` | | `rabbitmq.affinity` | RabbitMQ Affinity Settings | `see values.yaml` | From 7d4265fdd8166767341cfc6f8112d1b6400bdf47 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Mon, 3 Jul 2023 16:43:36 +0530 Subject: [PATCH 26/62] Adding the doc for mountpath-corrections adjusted --- charts/portal/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 9d95039b..01937509 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -674,7 +674,7 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | `rabbitmq.rbac.create` | Create and use RBAC resources | `true` | | `rabbitmq.persistence.enabled` | Enable persistence for RabbitMQ | `true` | | `rabbitmq.persistence.size` | PVC Size | `8Gi` | -| `rabbitmq.persistence.mountPath` | The path the RMQ volume will be mounted at | `/bitnami/rabbitmq/mnesia` | +| `rabbitmq.persistence.mountPath` | The path at which RMQ volume will be mounted | `/bitnami/rabbitmq/mnesia` | | `rabbitmq.replicaCount` | Number of replicas. It should maintain a quorum. Preferred for HA is 3 or odd counts. | `1` | | `rabbitmq.clustering.forceBoot` | If RabbitMQ is shut down unintentionally and is stuck in a waiting state set force boot to true | `false` | | `rabbitmq.affinity` | RabbitMQ Affinity Settings | `see values.yaml` | From 8068e0bf6cd959cd74c24c66d79369c2b961b795 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Thu, 6 Jul 2023 20:44:36 +0530 Subject: [PATCH 27/62] Changes to use existing DB secret that contains the DB password --- charts/portal/README.md | 1 + charts/portal/templates/common/database-secret.yaml | 2 ++ charts/portal/values-production.yaml | 2 ++ charts/portal/values.yaml | 2 ++ 4 files changed, 7 insertions(+) diff --git a/charts/portal/README.md b/charts/portal/README.md index 01937509..c51a0242 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -210,6 +210,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `portal.defaultTenantId` | **Important!** Do not change the default tenant ID unless you have been using a different tenant ID in your previous install/deployment. There is a 15 character limit. See [DNS Configuration](#dns-configuration) for tenant ID character limitations. | `apim` | | `portal.registryCredentials` | Used to create image pull secret, see prerequisites | `` | | `portal.useExistingPullSecret` | Configures Portal Deployment to use **global.pullSecret** as imagePullSecret | `false` | +| `portal.useExistingDBSecret` | Configures Portal Deployment to use **global.databaseSecret** for fetching the DB password | `false` | | `portal.imagePullSecret.enabled` | Configures Portal Deployment to use custom registry, this option is only evaluated only when portal.registryCredentials option is not used | `false` | | `portal.imagePullSecret.username` | Custom registry Username | `nil` | | `portal.imagePullSecret.password` | Custom registry Password | `nil` | diff --git a/charts/portal/templates/common/database-secret.yaml b/charts/portal/templates/common/database-secret.yaml index 45ce5b71..fb40fa14 100644 --- a/charts/portal/templates/common/database-secret.yaml +++ b/charts/portal/templates/common/database-secret.yaml @@ -1,3 +1,4 @@ +{{ if not (.Values.portal.useExistingDBSecret) }} apiVersion: v1 kind: Secret metadata: @@ -30,3 +31,4 @@ data: {{ end }} {{ end }} +{{ end }} diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index fb1257ff..f4bf5f5d 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -53,6 +53,8 @@ portal: ssoDebug: false hostnameWhitelist: defaultTenantId: apim + # Set this to true if there is already an existing pull secret that has DB password as value and key name 'mysql-password' available. + useExistingDBSecret: false #Configuration to use custom registries to pull the container images with appropriate credentials. #This refers to the dockerconfigjson that contains the information about the registry and its creds. registryCredentials: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 353fa713..2bebe561 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -55,6 +55,8 @@ portal: ssoDebug: false hostnameWhitelist: defaultTenantId: apim + # Set this to true if there is already an existing pull secret that has DB password as value and key name 'mysql-password' available. + useExistingDBSecret: false # Configuration to use custom registries to pull the container images with appropriate credentials. # This refers to the dockerconfigjson that contains the information about the registry and its creds. registryCredentials: From 09f7625aae011cc798ab6fb4a35d0fceda47af28 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Fri, 7 Jul 2023 19:20:17 +0530 Subject: [PATCH 28/62] Moved the useExistingDatabaseSecret to global section from portal section in values yaml --- charts/portal/README.md | 4 ++-- charts/portal/templates/common/database-secret.yaml | 2 +- charts/portal/values-production.yaml | 5 +++-- charts/portal/values.yaml | 5 +++-- 4 files changed, 9 insertions(+), 7 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index c51a0242..ef7af776 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -172,7 +172,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `global.portalRepository` | Image Repository | `caapim/` | | `global.pullSecret` | Image Pull Secret name | `broadcom-apim` | | `global.setupDemoDatabase` | Deploys MySQL as part of this Chart | `false` | -| `global.databaseSecret` | Database secret name | `database-secret` | +| `global.databaseSecret` | Database secret name. If **global.setupDemoDatabase** is true ensure **mysql.auth.existingSecret** use the same secret is used and contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` | `database-secret` | +| `global.useExistingDatabaseSecret` | Configures Portal Deployment to use **global.databaseSecret** for fetching the DB password | `false` | | `global.databaseUsername` | Database username | `admin` | | `global.demoDatabaseRootPassword` | Demo Database root password | `7layer`| | `global.demoDatabaseReplicationPassword` | Demo Database replication password | `7layer`| @@ -210,7 +211,6 @@ This section describes configurable parameters in **values.yaml**, there is also | `portal.defaultTenantId` | **Important!** Do not change the default tenant ID unless you have been using a different tenant ID in your previous install/deployment. There is a 15 character limit. See [DNS Configuration](#dns-configuration) for tenant ID character limitations. | `apim` | | `portal.registryCredentials` | Used to create image pull secret, see prerequisites | `` | | `portal.useExistingPullSecret` | Configures Portal Deployment to use **global.pullSecret** as imagePullSecret | `false` | -| `portal.useExistingDBSecret` | Configures Portal Deployment to use **global.databaseSecret** for fetching the DB password | `false` | | `portal.imagePullSecret.enabled` | Configures Portal Deployment to use custom registry, this option is only evaluated only when portal.registryCredentials option is not used | `false` | | `portal.imagePullSecret.username` | Custom registry Username | `nil` | | `portal.imagePullSecret.password` | Custom registry Password | `nil` | diff --git a/charts/portal/templates/common/database-secret.yaml b/charts/portal/templates/common/database-secret.yaml index fb40fa14..2c5cc26f 100644 --- a/charts/portal/templates/common/database-secret.yaml +++ b/charts/portal/templates/common/database-secret.yaml @@ -1,4 +1,4 @@ -{{ if not (.Values.portal.useExistingDBSecret) }} +{{ if not (.Values.global.useExistingDBSecret) }} apiVersion: v1 kind: Secret metadata: diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index f4bf5f5d..9a9c0578 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -9,6 +9,9 @@ global: # By default a user called admin will be created and given admin rights databaseType: mysql databaseSecret: database-secret + # Set this to true if there is already an existing pull secret that contains the key 'mysql-password'. + # If setupDemoDatabase is true ensure mysql.auth.existingSecret use the same secret is used and contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` + useExistingDatabaseSecret: false databaseUsername: portal # databasePassword: 7layer # demoDatabaseRootPassword: 7layer @@ -53,8 +56,6 @@ portal: ssoDebug: false hostnameWhitelist: defaultTenantId: apim - # Set this to true if there is already an existing pull secret that has DB password as value and key name 'mysql-password' available. - useExistingDBSecret: false #Configuration to use custom registries to pull the container images with appropriate credentials. #This refers to the dockerconfigjson that contains the information about the registry and its creds. registryCredentials: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 2bebe561..7d908827 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -9,6 +9,9 @@ global: # By default a user called admin will be created and given admin rights databaseType: mysql databaseSecret: database-secret + # Set this to true if there is already an existing pull secret that contains the key 'mysql-password'. + # If setupDemoDatabase is true ensure mysql.auth.existingSecret use the same secret is used and contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` + useExistingDatabaseSecret: false databaseUsername: portal # databasePassword: 7layer # demoDatabaseRootPassword: 7layer @@ -55,8 +58,6 @@ portal: ssoDebug: false hostnameWhitelist: defaultTenantId: apim - # Set this to true if there is already an existing pull secret that has DB password as value and key name 'mysql-password' available. - useExistingDBSecret: false # Configuration to use custom registries to pull the container images with appropriate credentials. # This refers to the dockerconfigjson that contains the information about the registry and its creds. registryCredentials: From f8e0d5803784588f8c3876887bf0317d7071fe70 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Fri, 7 Jul 2023 19:28:19 +0530 Subject: [PATCH 29/62] Moved the useExistingDatabaseSecret to global section from portal section in values yaml --- charts/portal/templates/common/database-secret.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/templates/common/database-secret.yaml b/charts/portal/templates/common/database-secret.yaml index 2c5cc26f..d4bdcc79 100644 --- a/charts/portal/templates/common/database-secret.yaml +++ b/charts/portal/templates/common/database-secret.yaml @@ -1,4 +1,4 @@ -{{ if not (.Values.global.useExistingDBSecret) }} +{{ if not (.Values.global.useExistingDatabaseSecret) }} apiVersion: v1 kind: Secret metadata: From 6bee66a56a9394284e9267f1b54b56ae056b8ec1 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Mon, 10 Jul 2023 15:28:28 +0530 Subject: [PATCH 30/62] Comments correction --- charts/portal/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index ef7af776..b107210e 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -172,7 +172,7 @@ This section describes configurable parameters in **values.yaml**, there is also | `global.portalRepository` | Image Repository | `caapim/` | | `global.pullSecret` | Image Pull Secret name | `broadcom-apim` | | `global.setupDemoDatabase` | Deploys MySQL as part of this Chart | `false` | -| `global.databaseSecret` | Database secret name. If **global.setupDemoDatabase** is true ensure **mysql.auth.existingSecret** use the same secret is used and contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` | `database-secret` | +| `global.databaseSecret` | Database secret name. If **global.setupDemoDatabase** is true, ensure **mysql.auth.existingSecret** uses the same secret that contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` | `database-secret` | | `global.useExistingDatabaseSecret` | Configures Portal Deployment to use **global.databaseSecret** for fetching the DB password | `false` | | `global.databaseUsername` | Database username | `admin` | | `global.demoDatabaseRootPassword` | Demo Database root password | `7layer`| From 360531476aed7079bdc4cc1661e3f61b24c41041 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Mon, 10 Jul 2023 15:37:56 +0530 Subject: [PATCH 31/62] Comments correction --- charts/portal/values-production.yaml | 2 +- charts/portal/values.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 9a9c0578..132c711f 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -10,7 +10,7 @@ global: databaseType: mysql databaseSecret: database-secret # Set this to true if there is already an existing pull secret that contains the key 'mysql-password'. - # If setupDemoDatabase is true ensure mysql.auth.existingSecret use the same secret is used and contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` + # If **global.setupDemoDatabase** is true, ensure **mysql.auth.existingSecret** uses the same secret that contain the keys `mysql-root-password`, `mysql-replication-password`. useExistingDatabaseSecret: false databaseUsername: portal # databasePassword: 7layer diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 7d908827..0e0a0d4e 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -10,7 +10,7 @@ global: databaseType: mysql databaseSecret: database-secret # Set this to true if there is already an existing pull secret that contains the key 'mysql-password'. - # If setupDemoDatabase is true ensure mysql.auth.existingSecret use the same secret is used and contain the keys `mysql-root-password`, `mysql-replication-password` along with `mysql-password` + # If **global.setupDemoDatabase** is true, ensure **mysql.auth.existingSecret** uses the same secret that contain the keys `mysql-root-password`, `mysql-replication-password`. useExistingDatabaseSecret: false databaseUsername: portal # databasePassword: 7layer From 8ec9e63972c03f357d51f7de34ba67797b06743b Mon Sep 17 00:00:00 2001 From: Meet Patel Date: Fri, 4 Aug 2023 10:48:50 -0700 Subject: [PATCH 32/62] [charts/portal] - Added support for configuring db node pool properties for portal container (#231) * US898231 - Added support for configuring db properties --- charts/portal/README.md | 56 ++++++++++++++++++- .../analytics-server/analytics-config.yaml | 5 ++ .../portal-enterprise-config.yaml | 2 +- .../tenant-provisioner-config.yaml | 5 ++ charts/portal/values-production.yaml | 4 ++ charts/portal/values.yaml | 3 + 6 files changed, 73 insertions(+), 2 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index ae7f1f56..4e7cd25b 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -396,7 +396,61 @@ This section describes configurable parameters in **values.yaml**, there is also | `jobs.labels` | A list of custom key: value labels applied to jobs | `not set` | | `jobs.image.PullPolicy` | Image pull policy applied to jobs | `IfNotPresent` | -### Portal TLS Defaults +### Database Node Pool Configurations + +#### Common configurations across multiple containers +| Parameter | Description | Default | Container | +|------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------------|-------------------------------------------------------------------------------------| +| `.additionalEnv.DATABASE_POOL_MINPOOLSIZE` | Minimum number of Connections a pool will maintain at any given time | `5` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_MAXPOOLSIZE` | Maximum number of Connections a pool will maintain at any given time | `30` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_CHECKOUTTIMEOUT` | The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted | `30000 (ms)` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_MAXSTATEMENTSPERCONNECTION` | The number of PreparedStatements to be cached for a single pooled Connection | `50` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_IDLECONNECTIONTESTPERIOD` | Test all idle, pooled but unchecked-out connections, every this number of seconds | `300 seconds` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_INITIALPOOLSIZE` | Number of Connections a pool will try to acquire upon startup | `5` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_MAXSTATEMENTS` | The size of global PreparedStatement cache | `300` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_MAXCONNECTIONAGE` | A Connection older than maxConnectionAge will be destroyed and purged from the pool | `0 seconds` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_MAXIDLETIME` | Seconds a Connection can remain pooled but unused before being discarded. | `0 seconds` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | +| `.additionalEnv.DATABASE_POOL_MAXIDLETIMEEXCESSCONNECTIONS` | Number of seconds that Connections in excess of minPoolSize should be permitted to remain idle in the pool before being culled | `0 seconds` | `portalData`, `portalEnterprise`, `tenantProvisioner`, `analytics`,`ingress`, `pssg` | + +#### Authenticator specific configurations +| Parameter | Description | Default | +|----------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `authenticator.additionalEnv.DATABASE_POOL_MAXPOOLSIZE` | Maximum number of Connections a pool will maintain at any given time | `30` | +| `authenticator.additionalEnv.DATABASE_POOL_CHECKOUTTIMEOUT` | The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted | `30000 ms` | +| `authenticator.additionalEnv.DATABASE_POOL_PINGCONNECTIONNOTUSERFOR` | Ping the database to make sure connection is still good if it has not been used in this many milliseconds, | `5000 ms` | +| `authenticator.additionalEnv.DATABASE_POOL_PINGENABLED` | Periodically pings and tests the connections in connection pool if they are alive and responsive | `true` | +| `authenticator.additionalEnv.DATABASE_POOL_PINGQUERY` | SQL query to be executed when connection pool is pinged to test the health of connections. | `select1` | +| `authenticator.additionalEnv.DATABASE_POOL_MAXIMUMIDLECONNECTIONS` | The maximum number of idle connections | `10` | + +#### Additional portalData configurations for File Repository Database +| Parameter | Description | Default | +|---------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MINPOOLSIZE` | Minimum number of Connections a pool will maintain at any given time | `5` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MAXPOOLSIZE` | Maximum number of Connections a pool will maintain at any given time | `30` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_CHECKOUTTIMEOUT` | The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted | `30000 (ms)` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MAXSTATEMENTSPERCONNECTION` | The number of PreparedStatements to be cached for a single pooled Connection | `50` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_IDLECONNECTIONTESTPERIOD` | Test all idle, pooled but unchecked-out connections, every this number of seconds | `300 seconds` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_INITIALPOOLSIZE` | Number of Connections a pool will try to acquire upon startup | `5` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MAXSTATEMENTS` | The size of global PreparedStatement cache | `300` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MAXCONNECTIONAGE` | A Connection older than maxConnectionAge will be destroyed and purged from the pool | `0 seconds` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MAXIDLETIME` | Seconds a Connection can remain pooled but unused before being discarded. | `0 seconds` | +| `portalData.additionalEnv.FILE_REPOSITORY_DATABASE_POOL_MAXIDLETIMEEXCESSCONNECTIONS` | Number of seconds that Connections in excess of minPoolSize should be permitted to remain idle in the pool before being culled | `0 seconds` | + +#### Additional tenantProvisioner configurations for Portal Database +| Parameter | Description | Default | +|---------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------------------------------------------------|---------------| +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MINPOOLSIZE` | Minimum number of Connections a pool will maintain at any given time | `5` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MAXPOOLSIZE` | Maximum number of Connections a pool will maintain at any given time | `30` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_CHECKOUTTIMEOUT` | The number of milliseconds a client calling getConnection() will wait for a Connection to be checked-in or acquired when the pool is exhausted | `30000 (ms)` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MAXSTATEMENTSPERCONNECTION` | The number of PreparedStatements to be cached for a single pooled Connection | `50` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_IDLECONNECTIONTESTPERIOD` | Test all idle, pooled but unchecked-out connections, every this number of seconds | `300 seconds` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_INITIALPOOLSIZE` | Number of Connections a pool will try to acquire upon startup | `5` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MAXSTATEMENTS` | The size of global PreparedStatement cache | `300` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MAXCONNECTIONAGE` | A Connection older than maxConnectionAge will be destroyed and purged from the pool | `0 seconds` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MAXIDLETIME` | Seconds a Connection can remain pooled but unused before being discarded. | `0 seconds` | +| `tenantProvisioner.additionalEvn.PORTAL_DATABASE_POOL_MAXIDLETIMEEXCESSCONNECTIONS` | Number of seconds that Connections in excess of minPoolSize should be permitted to remain idle in the pool before being culled | `0 seconds` | + +### Portal TLS Defaults Portal TLS defaults if the parameters are not set. | Parameter | Description | Default | | ------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | diff --git a/charts/portal/templates/analytics-server/analytics-config.yaml b/charts/portal/templates/analytics-server/analytics-config.yaml index 675d42c0..0cf89b14 100644 --- a/charts/portal/templates/analytics-server/analytics-config.yaml +++ b/charts/portal/templates/analytics-server/analytics-config.yaml @@ -29,3 +29,8 @@ data: RABBITMQ_PORT: {{ .Values.rabbitmq.service.port | quote }} PAPI_PUBLIC_HOST: {{ include "tssg-public-host" . | quote }} PAPI_INGRESS_TENANT: {{ include "default-tenant-id" . | quote }} +{{ if .Values.analytics.additionalEnv }} +{{- range $key, $val := .Values.analytics.additionalEnv }} + {{ $key }}: {{ $val | quote }} +{{- end }} +{{ end }} diff --git a/charts/portal/templates/portal-enterprise/portal-enterprise-config.yaml b/charts/portal/templates/portal-enterprise/portal-enterprise-config.yaml index 346d4688..f0ed4a56 100644 --- a/charts/portal/templates/portal-enterprise/portal-enterprise-config.yaml +++ b/charts/portal/templates/portal-enterprise/portal-enterprise-config.yaml @@ -47,4 +47,4 @@ data: {{- range $key, $val := .Values.portalEnterprise.additionalEnv }} {{ $key }}: {{ $val | quote }} {{- end }} -{{ end }} \ No newline at end of file +{{ end }} diff --git a/charts/portal/templates/tenant-provisioner/tenant-provisioner-config.yaml b/charts/portal/templates/tenant-provisioner/tenant-provisioner-config.yaml index 59e02a81..ac0b091d 100644 --- a/charts/portal/templates/tenant-provisioner/tenant-provisioner-config.yaml +++ b/charts/portal/templates/tenant-provisioner/tenant-provisioner-config.yaml @@ -30,3 +30,8 @@ data: PORTAL_VERSION: {{ .Chart.AppVersion }} PORTAL_DATABASE_NAME: {{ include "portal-db-name" . | quote }} RABBITMQ_PORT: {{ .Values.rabbitmq.service.port | quote }} +{{ if .Values.tenantProvisioner.additionalEnv }} +{{- range $key, $val := .Values.tenantProvisioner.additionalEnv }} + {{ $key }}: {{ $val | quote }} +{{- end }} +{{ end }} diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index fe8d7410..ee42fca2 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -200,6 +200,7 @@ analytics: # values: # - analytics # topologyKey: "kubernetes.io/hostname" + additionalEnv: apim: forceRedeploy: false @@ -272,6 +273,7 @@ authenticator: # values: # - authenticator # topologyKey: "kubernetes.io/hostname" + additionalEnv: dispatcher: forceRedeploy: false @@ -406,6 +408,7 @@ portalEnterprise: # values: # - portal-enterprise # topologyKey: "kubernetes.io/hostname" + additionalEnv: pssg: forceRedeploy: false @@ -476,6 +479,7 @@ tenantProvisioner: # values: # - tenant-provisioner # topologyKey: "kubernetes.io/hostname" + additionalEnv: image: dispatcher: dispatcher:5.2.1 diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 2b0e52b3..9952daf6 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -193,6 +193,7 @@ analytics: # nodeSelector: {} # tolerations: [] # affinity: {} + additionalEnv: apim: forceRedeploy: false @@ -355,6 +356,7 @@ portalEnterprise: # nodeSelector: {} # tolerations: [] # affinity: {} + additionalEnv: pssg: forceRedeploy: false @@ -407,6 +409,7 @@ tenantProvisioner: # nodeSelector: {} # tolerations: [] # affinity: {} + additionalEnv: image: dispatcher: dispatcher:5.2.1 From 94d19174ca49f6cf75cf83cbb135d8a6e5e3bdf9 Mon Sep 17 00:00:00 2001 From: im683661 Date: Mon, 11 Sep 2023 15:57:44 -0700 Subject: [PATCH 33/62] US899914 upgraded ingress-ngnix to 4.7.2 --- charts/portal/Chart.lock | 6 ++++++ charts/portal/Chart.yaml | 4 ++-- charts/portal/README.md | 2 ++ charts/portal/charts/ingress-nginx-4.5.2.tgz | Bin 46009 -> 0 bytes charts/portal/charts/ingress-nginx-4.7.2.tgz | Bin 0 -> 46283 bytes 5 files changed, 10 insertions(+), 2 deletions(-) delete mode 100644 charts/portal/charts/ingress-nginx-4.5.2.tgz create mode 100644 charts/portal/charts/ingress-nginx-4.7.2.tgz diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 9cfa6d64..f1ff6f0f 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -10,6 +10,12 @@ dependencies: version: 12.0.3 - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ +<<<<<<< Updated upstream version: 4.5.2 digest: sha256:f4528610414ae3701c85e2bc990de4be552bf56db933148760263add624e866b generated: "2023-06-27T18:25:13.9227811+05:30" +======= + version: 4.7.2 +digest: sha256:cc0b6b453db16931624b0431d989d40a9644e0871131b4745b76a82ee3840c20 +generated: "2023-09-11T15:37:49.188672-07:00" +>>>>>>> Stashed changes diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index e122ece7..2b5020e5 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.2.1" description: CA API Developer Portal name: portal -version: 2.3.4 +version: 2.3.5 type: application home: https://github.com/CAAPIM/apim-charts maintainers: @@ -25,5 +25,5 @@ dependencies: condition: rabbitmq.enabled - name: ingress-nginx repository: "https://kubernetes.github.io/ingress-nginx/" - version: 4.5.2 + version: 4.7.2 condition: ingress.create diff --git a/charts/portal/README.md b/charts/portal/README.md index 4e7cd25b..fb8250a3 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -3,6 +3,8 @@ The Layer7 API Developer Portal (API Portal) is part of the Layer7 API Managemen ## Introduction This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using the Helm Package Manager. +## 2.3.5 General Updates +- Ingress-NGINX Subchart is upgraded to version 4.7.2 to support K8s 1.26+ version. ## 2.3.3 General Updates - This new version of the chart supports API Portal 5.2.1. ## 2.3.2 General Updates diff --git a/charts/portal/charts/ingress-nginx-4.5.2.tgz b/charts/portal/charts/ingress-nginx-4.5.2.tgz deleted file mode 100644 index 162e47acb29910b5696b0c6323ce0316ac7ffcd4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46009 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
    *oPZ%c)u}3_;Ng7&_$YEQj{!Hg0!+Nj_ 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%0Dvuc_g`s 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 H7>NG@n`ak+ diff --git a/charts/portal/charts/ingress-nginx-4.7.2.tgz b/charts/portal/charts/ingress-nginx-4.7.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..286a23f872deceeea9bf60a77d9b9be30901dfaa GIT binary patch literal 46283 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

    Kl5P9Xq`d8X69=kWes3AC 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 W06BaBkP#37V9#%M8leUS;r{~F`TAD? literal 0 HcmV?d00001 From ebedaffa8da095eca73c5bbdb67486c89a509272 Mon Sep 17 00:00:00 2001 From: Ilya Melnikov <70610034+melil02@users.noreply.github.com> Date: Mon, 11 Sep 2023 16:11:44 -0700 Subject: [PATCH 34/62] Update Chart.lock --- charts/portal/Chart.lock | 6 ------ 1 file changed, 6 deletions(-) diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index f1ff6f0f..741a96a9 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -10,12 +10,6 @@ dependencies: version: 12.0.3 - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ -<<<<<<< Updated upstream - version: 4.5.2 -digest: sha256:f4528610414ae3701c85e2bc990de4be552bf56db933148760263add624e866b -generated: "2023-06-27T18:25:13.9227811+05:30" -======= version: 4.7.2 digest: sha256:cc0b6b453db16931624b0431d989d40a9644e0871131b4745b76a82ee3840c20 generated: "2023-09-11T15:37:49.188672-07:00" ->>>>>>> Stashed changes From 0271aa377021aeece2e3e7783a53a04d4752ee99 Mon Sep 17 00:00:00 2001 From: ksaladi <69457674+ksaladi@users.noreply.github.com> Date: Wed, 20 Sep 2023 14:14:49 +0530 Subject: [PATCH 35/62] [Charts/Portal]- Adding tag changes for 5.2.2 release (#264) Co-authored-by: Prem Chander Vodela --- charts/portal/Chart.yaml | 4 +-- charts/portal/README.md | 45 ++++++++++++++-------------- charts/portal/values-production.yaml | 42 +++++++++++++------------- charts/portal/values.yaml | 42 +++++++++++++------------- 4 files changed, 67 insertions(+), 66 deletions(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index e122ece7..68642b36 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 -appVersion: "5.2.1" +appVersion: "5.2.2" description: CA API Developer Portal name: portal -version: 2.3.4 +version: 2.3.5 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/README.md b/charts/portal/README.md index 4e7cd25b..e03825a7 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -3,6 +3,8 @@ The Layer7 API Developer Portal (API Portal) is part of the Layer7 API Managemen ## Introduction This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using the Helm Package Manager. +## 2.3.5 General Updates +- This new version of the chart supports API Portal 5.2.2. ## 2.3.3 General Updates - This new version of the chart supports API Portal 5.2.1. ## 2.3.2 General Updates @@ -627,18 +629,18 @@ Portal Analytics ### Portal Images | Parameter | Description | Default | |-------------------------------------------|----------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------| -| `image.dispatcher` | dispatcher image | `dispatcher:5.2.1` | -| `image.pssg` | PSSG image | `pssg:5.2.1` | -| `image.apim` | APIM ingress image | `ingress:5.2.1` | -| `image.enterprise` | portal-enterprise image | `portal-enterprise:5.2.1` | -| `image.data` | portal-data image | `portal-data:5.2.1` | -| `image.tps` | tenant provisioner image | `tenant-provisioning-service:5.2.1` | -| `image.analytics` | Analytics image | `analytics-server:5.2.1` | -| `image.authenticator` | Authenticator image | `authenticator:5.2.1` | -| `image.dbUpgrade` | db upgrade image | `db-upgrade-portal:5.2.1` | -| `image.rbacUpgrade` | Analytics image, per Portal version | `db-upgrade-rbac:5.2.1` | -| `image.upgradeVerify` | Upgrade verification image | `upgrade-verify:5.2.1` | -| `image.tlsManager` | TLS manager image | `tls-automator:5.2.1` | +| `image.dispatcher` | dispatcher image | `dispatcher:5.2.2` | +| `image.pssg` | PSSG image | `pssg:5.2.2` | +| `image.apim` | APIM ingress image | `ingress:5.2.2` | +| `image.enterprise` | portal-enterprise image | `portal-enterprise:5.2.2` | +| `image.data` | portal-data image | `portal-data:5.2.2` | +| `image.tps` | tenant provisioner image | `tenant-provisioning-service:5.2.2` | +| `image.analytics` | Analytics image | `analytics-server:5.2.2` | +| `image.authenticator` | Authenticator image | `authenticator:5.2.2` | +| `image.dbUpgrade` | db upgrade image | `db-upgrade-portal:5.2.2` | +| `image.rbacUpgrade` | Analytics image, per Portal version | `db-upgrade-rbac:5.2.2` | +| `image.upgradeVerify` | Upgrade verification image | `upgrade-verify:5.2.2` | +| `image.tlsManager` | TLS manager image | `tls-automator:5.2.2` | ## Subcharts For Production, use an external MySQL Server. @@ -754,14 +756,14 @@ The following table lists the configured parameters of the Druid Subchart | Parameter | Description | Default | |-----------------------------|---------------------|--------------------------| -| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.2.1` | -| `druid.image.broker` | Broker image | `druid:5.2.1` | -| `druid.image.coordinator` | Coordinator | `druid:5.2.1` | -| `druid.image.middlemanager` | Middlemanager image | `druid:5.2.1` | -| `druid.image.minio` | Minio image | `minio:5.2.1` | -| `druid.image.historical` | Historical image | `druid:5.2.1` | -| `druid.image.kafka` | Kafka image | `kafka:5.2.1` | -| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2.1` | +| `druid.image.zookeeper ` | Zookeeper image | `zookeeper:5.2.2` | +| `druid.image.broker` | Broker image | `druid:5.2.2` | +| `druid.image.coordinator` | Coordinator | `druid:5.2.2` | +| `druid.image.middlemanager` | Middlemanager image | `druid:5.2.2` | +| `druid.image.minio` | Minio image | `minio:5.2.2` | +| `druid.image.historical` | Historical image | `druid:5.2.2` | +| `druid.image.kafka` | Kafka image | `kafka:5.2.2` | +| `druid.image.ingestion` | Ingestion image | `ingestion-server:5.2.2` | ## RabbitMQ The following table lists the configured parameters of the Bitnami RabbitMQ Subchart - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq @@ -770,9 +772,8 @@ The following table lists the configured parameters of the Bitnami RabbitMQ Subc | ----------------------------- | ----------------------------------- | ----------------------------------------------------------- | | `rabbitmq.enabled` | Enable this subchart | `true` | | `rabbitmq.host` | Host - must match fullnameOverride | `rabbitmq` | -| `rabbitmq.image.tag` | RabbitMQ image version | `5.2.1` | +| `rabbitmq.image.tag` | RabbitMQ image version | `5.2.2` | | `rabbitmq.fullnameOverride` | Overrides the name of the subchart | `rabbitmq` | -| `rabbitmq.image.tag` | RabbitMQ image version | `5.2` | | `rabbitmq.pdb.create` | Create PodDisruptionBudget (PDB) Object | `false` | | `rabbitmq.pdb.maxUnavailable | Maximum number of simultaneous unavailable pods | `not set` | | `rabbitmq.pdb.minAvailable | Minimum number of available pods | `1` | diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index ee42fca2..2e727e8b 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -482,18 +482,18 @@ tenantProvisioner: additionalEnv: image: - dispatcher: dispatcher:5.2.1 - pssg: pssg:5.2.1 - apim: ingress:5.2.1 - enterprise: portal-enterprise:5.2.1 - data: portal-data:5.2.1 - tps: tenant-provisioning-service:5.2.1 - analytics: analytics-server:5.2.1 - authenticator: authenticator:5.2.1 - dbUpgrade: db-upgrade-portal:5.2.1 - rbacUpgrade: db-upgrade-rbac:5.2.1 - upgradeVerify: upgrade-verify:5.2.1 - tlsManager: tls-automator:5.2.1 + dispatcher: dispatcher:5.2.2 + pssg: pssg:5.2.2 + apim: ingress:5.2.2 + enterprise: portal-enterprise:5.2.2 + data: portal-data:5.2.2 + tps: tenant-provisioning-service:5.2.2 + analytics: analytics-server:5.2.2 + authenticator: authenticator:5.2.2 + dbUpgrade: db-upgrade-portal:5.2.2 + rbacUpgrade: db-upgrade-rbac:5.2.2 + upgradeVerify: upgrade-verify:5.2.2 + tlsManager: tls-automator:5.2.2 ## ## Subchart Configuration @@ -762,14 +762,14 @@ druid: # topologyKey: kubernetes.io/hostname image: - zookeeper: zookeeper:5.2.1 - broker: druid:5.2.1 - coordinator: druid:5.2.1 - middlemanager: druid:5.2.1 - minio: minio:5.2.1 - historical: druid:5.2.1 - kafka: kafka:5.2.1 - ingestion: ingestion-server:5.2.1 + zookeeper: zookeeper:5.2.2 + broker: druid:5.2.2 + coordinator: druid:5.2.2 + middlemanager: druid:5.2.2 + minio: minio:5.2.2 + historical: druid:5.2.2 + kafka: kafka:5.2.2 + ingestion: ingestion-server:5.2.2 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: @@ -779,7 +779,7 @@ rabbitmq: image: registry: caapim repository: message-broker - tag: "5.2.1" + tag: "5.2.2" pullSecrets: - broadcom-apim pdb: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 9952daf6..0f734da2 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -412,18 +412,18 @@ tenantProvisioner: additionalEnv: image: - dispatcher: dispatcher:5.2.1 - pssg: pssg:5.2.1 - apim: ingress:5.2.1 - enterprise: portal-enterprise:5.2.1 - data: portal-data:5.2.1 - tps: tenant-provisioning-service:5.2.1 - analytics: analytics-server:5.2.1 - authenticator: authenticator:5.2.1 - dbUpgrade: db-upgrade-portal:5.2.1 - rbacUpgrade: db-upgrade-rbac:5.2.1 - upgradeVerify: upgrade-verify:5.2.1 - tlsManager: tls-automator:5.2.1 + dispatcher: dispatcher:5.2.2 + pssg: pssg:5.2.2 + apim: ingress:5.2.2 + enterprise: portal-enterprise:5.2.2 + data: portal-data:5.2.2 + tps: tenant-provisioning-service:5.2.2 + analytics: analytics-server:5.2.2 + authenticator: authenticator:5.2.2 + dbUpgrade: db-upgrade-portal:5.2.2 + rbacUpgrade: db-upgrade-rbac:5.2.2 + upgradeVerify: upgrade-verify:5.2.2 + tlsManager: tls-automator:5.2.2 ## ## Subchart Configuration @@ -618,14 +618,14 @@ druid: # affinity: {} image: - zookeeper: zookeeper:5.2.1 - broker: druid:5.2.1 - coordinator: druid:5.2.1 - middlemanager: druid:5.2.1 - minio: minio:5.2.1 - historical: druid:5.2.1 - kafka: kafka:5.2.1 - ingestion: ingestion-server:5.2.1 + zookeeper: zookeeper:5.2.2 + broker: druid:5.2.2 + coordinator: druid:5.2.2 + middlemanager: druid:5.2.2 + minio: minio:5.2.2 + historical: druid:5.2.2 + kafka: kafka:5.2.2 + ingestion: ingestion-server:5.2.2 # Settings for RabbitMQ - https://github.com/bitnami/charts/tree/master/bitnami/rabbitmq rabbitmq: @@ -635,7 +635,7 @@ rabbitmq: image: registry: caapim repository: message-broker - tag: "5.2.1" + tag: "5.2.2" pullSecrets: - broadcom-apim pdb: From 2fc53abccc7908086ee4aaa99291718e4b234bde Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Wed, 11 Oct 2023 15:14:52 +0530 Subject: [PATCH 36/62] Changes to chart version for portal 5.2.2 version --- charts/portal/Chart.yaml | 2 +- charts/portal/README.md | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index 9d92adca..45430f20 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.2.2" description: CA API Developer Portal name: portal -version: 2.3.5 +version: 2.3.4 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/README.md b/charts/portal/README.md index 6c100d77..8dce21dc 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -3,10 +3,11 @@ The Layer7 API Developer Portal (API Portal) is part of the Layer7 API Managemen ## Introduction This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using the Helm Package Manager. -## 2.3.6 General Updates +## 2.3.4 General Updates +- This new version of the chart supports API Portal 5.2.2 - Ingress-NGINX Subchart is upgraded to version 4.7.2 to support K8s 1.26+ version. -## 2.3.5 General Updates -- This new version of the chart supports API Portal 5.2.2. +- Rabbitmq chart is upgraded to 12.0.3. Updated additional documentation w.r.t rabbitmq persistence.[Refer rabbitmq.volumePermissions.enabled](https://github.com/CAAPIM/apim-charts/blob/develop/portal/charts/portal/README.md#global-parameters) +- Introduced global.useExistingDatabaseSecret to avoid specifying the external MySQL password. [Refer for global.useExistingDatabaseSecret](https://github.com/CAAPIM/apim-charts/blob/develop/portal/charts/portal/README.md#global-parameters). ## 2.3.3 General Updates - This new version of the chart supports API Portal 5.2.1. ## 2.3.2 General Updates From 9f5bde18cf3821e4a500bb2e42e980523b968e5a Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Wed, 11 Oct 2023 15:39:31 +0530 Subject: [PATCH 37/62] Updating the doc links --- charts/portal/README.md | 6 +++--- charts/portal/values-production.yaml | 2 +- charts/portal/values.yaml | 2 +- utils/create-tenant.sh | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 8dce21dc..6c6975eb 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -70,7 +70,7 @@ This Chart deploys the Layer7 API Developer Portal on a Kubernetes Cluster using Solutions & Patches](https://techdocs.broadcom.com/us/product-content/recommended-reading/technical-document-index/ca-api-developer-portal-solutions-and-patches.html) page. ### Production -- A dedicated MySQL 8.0.22/8.0.26/8.0.31 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) +- A dedicated MySQL 8.0.31/8.0.33/8.0.34 server [See TechDocs for more information](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/configure-an-external-database.html) - 3 Worker nodes with at least 4vcpu and 32GB ram - High Availability with analytics - Access to a DNS Server - Signed SSL Server Certificate @@ -116,7 +116,7 @@ To delete API Portal installation, run the following command: ## Upgrade External Portal Database to MySQL 8.0 MySQL 8.0 is supported as an external database starting from API Portal 5.0 CR-1. This section helps you understand the overall process of upgrading an existing Portal database running MySQL 5.7 to MySQL 8.0. -1) Before upgrading the Database, see **Before You Begin** and **Check Database Compatibility** in [TechDocs.](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) +1) Before upgrading the Database, see **Before You Begin** and **Check Database Compatibility** in [TechDocs.](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) 2) Persist Analytics Data into Druid Database @@ -141,7 +141,7 @@ MySQL 8.0 is supported as an external database starting from API Portal 5.0 CR-1 $ helm uninstall -n ``` -4) Upgrade MySQL 5.7 to 8.0.26. For more information, see **Perform the Upgrade** [TechDocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) +4) Upgrade MySQL 5.7 to 8.0.26. For more information, see **Perform the Upgrade** [TechDocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/install-portal-on-docker-swarm/upgrade-portal-database-to-mysql-8.html) 5) After MySQL is upgraded, ensure that you can connect to it and then follow the below steps to start the portal with MySQL 8.0.26. Ensure that the value of **tls.job.enabled** is set to **false** in **values.yaml** diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 2e727e8b..c4fef581 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -23,7 +23,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 0f734da2..893aea5d 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -23,7 +23,7 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal - helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/ + helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: # The saas flag should be left as is unless otherwise specified by support. diff --git a/utils/create-tenant.sh b/utils/create-tenant.sh index 770249a4..97f89ff0 100755 --- a/utils/create-tenant.sh +++ b/utils/create-tenant.sh @@ -30,7 +30,7 @@ function print_steps() { The tenant has been added to the database. The tenant info can be found in the tenant_info file in the current directory. Please follow the rest of the instructions at TechDocs to enroll your gateway with the portal. - (https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2-1/install-configure-and-upgrade/post-installation-tasks/enroll-a-layer7-api-gateway.html) + (https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/install-configure-and-upgrade/post-installation-tasks/enroll-a-layer7-api-gateway.html) 1. You will need to navigate to the portal at https://${tenant_id}.${domain} and create a new API PROXY. 2. Copy the enrollment URL From 3a63badc76c6e39ae0960275ae195f764fc80a0e Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Wed, 11 Oct 2023 15:48:57 +0530 Subject: [PATCH 38/62] updated Chart.lock and druid tar as lint failures occured when pushing the existing ones to stable branch --- charts/portal/Chart.lock | 4 ++-- charts/portal/charts/druid-1.0.10.tgz | Bin 9138 -> 9212 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 741a96a9..73ce666e 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.7.2 -digest: sha256:cc0b6b453db16931624b0431d989d40a9644e0871131b4745b76a82ee3840c20 -generated: "2023-09-11T15:37:49.188672-07:00" +digest: sha256:24d34fa71389e0ac630c550066d2f9ca91ab48fd89365281d89793a7da264844 +generated: "2023-10-11T15:05:08.681943+05:30" diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz index f6e7b5f3581bbc36897cf53c5ed0b85af77d5270..bc8f1792b4356cb10ff617a0b42a2ce6085772bc 100644 GIT binary patch literal 9212 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 literal 9138 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 From fe9f2b583d68d810b0485272089d1ac0201fda9c Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Wed, 11 Oct 2023 16:03:06 +0530 Subject: [PATCH 39/62] updated druid chart version --- charts/druid/Chart.yaml | 2 +- charts/portal/Chart.lock | 6 +++--- charts/portal/charts/druid-1.0.10.tgz | Bin 9212 -> 0 bytes charts/portal/charts/druid-1.0.11.tgz | Bin 0 -> 9211 bytes 4 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 charts/portal/charts/druid-1.0.10.tgz create mode 100644 charts/portal/charts/druid-1.0.11.tgz diff --git a/charts/druid/Chart.yaml b/charts/druid/Chart.yaml index cdf93428..dc9f1267 100644 --- a/charts/druid/Chart.yaml +++ b/charts/druid/Chart.yaml @@ -7,5 +7,5 @@ maintainers: - name: Gazza7205 sources: - https://github.com/CAAPIM/apim-charts -version: 1.0.10 +version: 1.0.11 appVersion: 0.17.0 diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 73ce666e..3beccb98 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.10 + version: 1.0.11 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 9.4.7 @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.7.2 -digest: sha256:24d34fa71389e0ac630c550066d2f9ca91ab48fd89365281d89793a7da264844 -generated: "2023-10-11T15:05:08.681943+05:30" +digest: sha256:f389872802ff4b5fa8e629a7218888f295477b84e144b4d224ef5726d162ad2d +generated: "2023-10-11T16:00:27.1193375+05:30" diff --git a/charts/portal/charts/druid-1.0.10.tgz b/charts/portal/charts/druid-1.0.10.tgz deleted file mode 100644 index bc8f1792b4356cb10ff617a0b42a2ce6085772bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9212 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 diff --git a/charts/portal/charts/druid-1.0.11.tgz b/charts/portal/charts/druid-1.0.11.tgz new file mode 100644 index 0000000000000000000000000000000000000000..64b403ad99eb40b344ef45ca1f1922a403b8b00c GIT binary patch literal 9211 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 R{~rJV|NmaHl?eb|0RUeWW$pj~ literal 0 HcmV?d00001 From 0fd18449b2a1da52289ab2163cf47b9e039c3486 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Wed, 15 Nov 2023 10:30:36 -0500 Subject: [PATCH 40/62] bugfix: correct tag for ingestion pods is app=ingestion-server, not app=ingestion --- charts/druid/Chart.yaml | 2 +- .../druid/templates/ingestion/ingestion-pdb.yaml | 2 +- charts/portal/Chart.lock | 6 +++--- charts/portal/charts/druid-1.0.11.tgz | Bin 9211 -> 0 bytes charts/portal/charts/druid-1.0.12.tgz | Bin 0 -> 9139 bytes 5 files changed, 5 insertions(+), 5 deletions(-) delete mode 100644 charts/portal/charts/druid-1.0.11.tgz create mode 100644 charts/portal/charts/druid-1.0.12.tgz diff --git a/charts/druid/Chart.yaml b/charts/druid/Chart.yaml index dc9f1267..3b6d0d7d 100644 --- a/charts/druid/Chart.yaml +++ b/charts/druid/Chart.yaml @@ -7,5 +7,5 @@ maintainers: - name: Gazza7205 sources: - https://github.com/CAAPIM/apim-charts -version: 1.0.11 +version: 1.0.12 appVersion: 0.17.0 diff --git a/charts/druid/templates/ingestion/ingestion-pdb.yaml b/charts/druid/templates/ingestion/ingestion-pdb.yaml index c4c2d41a..8c0e185f 100644 --- a/charts/druid/templates/ingestion/ingestion-pdb.yaml +++ b/charts/druid/templates/ingestion/ingestion-pdb.yaml @@ -14,5 +14,5 @@ spec: {{- end }} selector: matchLabels: - app: ingestion + app: ingestion-server {{ end }} diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index 3beccb98..a31705ea 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.11 + version: 1.0.12 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 9.4.7 @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.7.2 -digest: sha256:f389872802ff4b5fa8e629a7218888f295477b84e144b4d224ef5726d162ad2d -generated: "2023-10-11T16:00:27.1193375+05:30" +digest: sha256:77bef6109e5ced4a4f00e93044d4bbfd15d0c4b619bae3419dd692a8620a696b +generated: "2023-11-15T10:29:33.351726-05:00" diff --git a/charts/portal/charts/druid-1.0.11.tgz b/charts/portal/charts/druid-1.0.11.tgz deleted file mode 100644 index 64b403ad99eb40b344ef45ca1f1922a403b8b00c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9211 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 R{~rJV|NmaHl?eb|0RUeWW$pj~ diff --git a/charts/portal/charts/druid-1.0.12.tgz b/charts/portal/charts/druid-1.0.12.tgz new file mode 100644 index 0000000000000000000000000000000000000000..4edeec571a06efd77665a42a87ecbe1cc760ef1a GIT binary patch literal 9139 zcmV;kBTU>MiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PKC;bK5ww?>y_Tz?J7z?aYZNO0wicResRe+Kf*U+sAS;yLW5L z1(T4(F-33)(20`x{_VE_@B;upBvQ64XVnjhOafrzqZ>f?4-GpA9lL!phXFN~aN+*+ z1Z0|~IXFDz|C^?%|8Mq=20wKU``vzL&^hY$e=D< z3tb?_V`Iku8a4p%d5SCKW8zR8EQi2?Ow`-#UFfd3|{XJx{mn=2(0Qy2v;6WGIkiuI?kkL3` z`9uE{E%0gda0qA+q6SD(U32Zjza~BX9TS>;${Jt@dOdR>J^V<}Wb!^!?iKngbOP~e z3SENKEP+s&&|Wy6^d@Sc1^^_ywJ}q>mjRkOUxvU&_bt)B4FFs;gVvI9$;u(=C&Y`m zw&(K8gR~xykk2@NicrLEb{9(k;Vf=UW(N6rg)Fk{_;{Z%h zaPL?Mj4TU>9tBez2zdlVydjO~N0fqn-U<+;@vuA)Gi#$EzTN-;hIB5tBz$O`^I^kZ zx5N|v@&JrNid!?}p#V~3M=4ltE?&^G5Fs~rXgTD6i>%^rrYw-i0B%F;4pBhokb*gO zZ6Y-eA3nTNOB@D~tTQ3|ZJ7!#Q#%d;e12!?Uolw?2@})NACp($?aAdUF!~w>=#@zP z*>PRqA)%WVkXmy9V>XsJ1ao+gBK85r1{-nwrDzD~JFNwxfn$-z0kB*g+LNej6Okaj z8KmelT#9x?9=vstoxTTg_l!N;$BsvbpxNZl#b@84W%5L{Tl!>XkyV8sur9WdM;+*b zKMD50)Nv70w$W$VXZU!zLrb1xX0dPn4`HJ@`tAXEi}B1wqKd!|@Sn({Eyw0>qd(8= zC_QBDTh3R2_;Txn4@1z2boUUvF-o_kljr*%o#e<)h`E~JRG&o8dW6N7%CkNAyM_FwbpP_zFWnw`VF{bw7L zT7O`Gfa4JgT~`=zn05tpj=;$%-(K_Fyzgmq(&hhVj$9uF#GwA8nSxiy|DaGFTn zG57Mn4f^)2{VTY47DGS~2J47-V&$h6PDKTW`Ov}`o(CR zO+kQM1WD9n7Us?_A{tFRbEq&?-69Z@*mTaAkGL&pSe8O-VX|XVMO$6yr)XlE|F!sywaCpdUCMor30nk=B2ardFExZk171^jjHy zQnxZuiQJ8>OL^Bu<3yx#;Vp6tyO*bF7FI@XYwL>r^c$OR5Il^cBQdF9!e?O<(Y*oq%Sv3-)&U=e!#Ah>c%(*@@Sj=X~)~j$O+x^75B@a-B<=a_cmrv zHA&z93x8SkUrQL&U5Zjo@^#FZ8PQd@>o0uV+{o?_qZEuWtZjE-yJgustq6BjkIFzF=Y#haw;Ds zvEx)A0wJ~L@1>Sf+v?l5IO7xaf4Tfe)`$&tz$*FgcXatbI^5&Gw?nz}e>ANY&i*?z z?Z;ZfazjEM_Aabp=!h1~U}n+r&dvLe&})L|B83 zVz>i1aUJB*v&-l1%o?;p{wbtr8oC5+ayo2<{2%r^rYiqkv)A9x|63th{-N)abZVbO zeLvBr^c__Mv6(F3=Qw`8L(5m-=X>aatfdm#Hb;#?S4_HTcAgJBJPbjT{lT(7JT!Id z-#VX)Rs)-UDpqfm77PjQ{9Ns-2w+C?mMt>)OfVVxHl%1m14z*On5+hfsM|KeDHf`lZNowzfo`)$vvm}*8odqHk zE__~P4}Vs-YB~KHH#kVq`;tG27o+)t@*G@-T7GtY8AIhH{*&2+<)HYVaN!o_`VKtD zvyn$Zr(0N+qHoK{y)>tFBXtZ4gVtZSD=l3+O{1y^Dv=~)t)2h()o=wN7kJ| z=KoeQmjR_^Va)=jW6B3e$CMA0jwuI3zRh~Z*z~8bXtL%_sg(}=OLf&NC|@=cOtI=v zOQFUkvYF=1mrSsRiim|RIog?~Oyo$sNUEDG^K)cYE~Z(eAOaK}a}nY>azDc*iPaJc z7LLai&f5T5=u+*Z!HZe%>7=j!r9&n1?~ObGE7t$LPG39!-R<-Sd;ITKsIvV(J1Fut z0qWVLUGM}*T0vs2(B%KrUV;y2=Vuo;AFtkvKpDe!Tb#^|j!BBwzkNJ;H&)9OUhnjz zswnMrbUpfQG#TGq|MODRH4vx7?F3UXbzB!X8WcfCR1}~Kcv^}5T#!lTM7+vb+Mrse zwzB$KJ}e)7F9mnxlvt8mcmXQwwwX~`H@Hzz4R$f)L|l0`)FRIyED=&|*S;Ro190d?3~;CqWp zrm`P87Bh>k2t*p+g^owj7jAPqj?O3oAf=EQ;L|c+QXOAj_smH_GO=(fO#;cqJqlbL z*hX}4`8bNMup%{%eoU0g#ZRUD(Xm-02tAMOQ_*aOMouIsEze<+ME4N5-G_7^FNlE(e;C66`JWE}3KX+H>()#jW9|^Kj{s$TR zPk)d9+zwU5e`qmhc1iLpB0)Mb5~OIN#zA6u)-WQSe2j?N051S2vbOwhfCO0~|3@8D z$A5GW`}_6(R;VuiV}}(1*exW8Vo};E97I<}5++1_l?x1!`Q9;fh(5Z0EQp9QV5;Fn zanUJOY3uJ0iixC=#j6Do_%+maFk3I#@tdN4TFxCnw{{ z$3P=zs87nai>D)*I(dx%|1>K?L3f5HqC*zZ=@%2vf zU%*<-f9jqZO(uU_T%A5)1+-194z~~#9pL_})I-?hVXd1bmFEdseiS8I|AHcIpg!Iy z*F~KcAX;dx+)^N9LC+1D8vKVqrnUwRTN5$WDMn1G>!cd6sr&*eV5b<}V>eu&4{Uuw zRC!sjXP1!9hf%*oepzqY&bVmXS?{jWG(tk6M6H5EB)k=$D=h4#gS{GZn@c<;s!8sF zC@{bWY@;DKJUo==af%jNZ*eubq8Ao9MFHTKw>el(Jz`(%Pvk)3Wj+7g``0~fM!Nkc zjlL}X+%OKn3j0qt2mfd8?|<43RmT5iMn#_aCrz|<>rX!VPhse#qWo5Yw$e&&hS}13 zuK=>uYw))R;P>n6OCUmQ13G6bWTF+#nv+uB@WRElNO0UUD|pX})SM;FpQ>6*Y&Qo|(|Yzq4%-B|MgrC9UzlAqtkj zVxN{WNSsaj+_>W#kU;lT_ef*EDP(}QQBD%Y@?5~La=xK34dU+U+UOvV{ zspSiRc$Ctb^1o3WkaGF&n1?-m|KII&_VT|Ks*C^FSw#SL3;iL@{@VqAXj)3bekgBp zp&t^{JBIww2G)-S{E){=HQYyD&UzpVsic~ykD?Mb=BF0sqagp9%n)RSfkT%kn47-R z!80Xq104E8&@nr)JE#mFk{P#PV|a*ke{KbIh}0fC3=Vnm=#Zy?htxzvNiR|Z6|7aFl1DEvi$hqeOg)=kZ1zIYwTjiVsl`4s`lG<7 zAv5)Oqe3nA5e9`?;G>KQwaCXB5^AaCBVtXQOs^Oxqm0EGFqz!^+e67n8{_SOWI*on zp>>blmgPccp+Q1Y_Os5ZJ?v%&U^iv+a8=YzBW{HgHWIF5>y4;WE3=i#VL=~8^4Qrgh=uyKRz!SM{*)%MVcef+RexD z!|48FRo+CgiYoL`KpaAmXQ9N6sjRC118z9g?SILo+3By1Zvk0_|2fRY|LvRm_+MM0 z%J?7sR`n7TP|gMHyMP7CVe8%K@9#!8zg=Ct8(&R^KwQcG#(dLl03e=5xSu43_{FF3 z)%%O9(=3FjIJ#JpCxao%96Hs4HCjuT{05^o9|s8TC^CXbQL*U%o#(85I@6J50A#Hh-izW!V5<`VD|Zfy!z}INMGv zxg80q_S|~-xoDmFUzpR`PU1=8zYMy)Z2Xt*9{;lyD)#@KCcVDKDqtt4f3RDwz;vd2 zG*93fPB;Jp`ANJhTEH)pFkp?>NuMYXrcRM}Fs(<{Ik=v0GG}De@CD|MuOG`JC=Hov z4#Av^_55#XK{efh1qE!%O)Y0&e)dN={#`H>!NyL$q~Iz(zO?6`FjswZMlXEgK&#uk2&`EqMapz79>hjM$>EhpwaX&GwkpGTpYV&_*FzD^^KU<;7 z_#b&_i4Z(*%r_jtBOa!KeNHaU&&MYmDp4E_=;2|Q_nK)2&Z;PM zboyz0b$vD&3wTg2H&UASXOrvkIY%B{z8{^PUyuKBJ#4pQ0Fp?*B2k1=Iy=2Nx%lv5 zbbdMn$eLsDGh={#AAAP^x(DBZ6;jZ$L9^8attsg2=Cu@i+7gxN|4r>aF|Azx9rkto z-|3rs{l5)T?LPuX_k^~eSO>~;Nr}xT<)?zZrz}&Mtw+jN&CXMvv4)LDw9;mVoi(XU z{x{wC#k5NP5B2zuog?#bfB(l;sN()Fmfsy&_Em}c60iF}vK4$I_I&C_kUz}X+wlrM zcW*sDmCFA{QD0J8A^-iu?x8OKM~8d-=T@k0{Ffb51YozIo?=C?-GDD~!z-~~;)l6F z&fHTI&mG|<9X~%7lrtI<)nJ@jrh1@BQAkbrW=`f!xTpo&%x2wA_?DKY>jZ5E=;UQ7 zFw9aYr>J@RaU98D&MeL<13-0%i^Yz7M|%TyQ7h|*$FWCb?W6eWDw*f<^v zp-upR{5Ia7{TFBdW8M7RYw~T9zW-Y|w(X(?U(^NaU$y;#EB1dqGvoj7nn!#4?^dX? z|1WPyRljg>i>cQBM3bY1x7SU1=`gP@(1D^Nz%BR zatlPByPLqO{v3(}df|Gu#QPD6qM z9)j#E_R#Ui>l4sAojNWukY{1r@n**#um9e94O;*B$MC<$UmSYjU4-;v`T;F)up9>g z4nXUaeZ~l>!>@svIo`~On)Vn6GlSKH-)kaXxp;Q?r}1a#8t?HeTmQHQtfdTo(g%{e zQztl1qfD_^a;wz64@N4Y{7x8vJ#dMzm)Fu$9NfiYdui0WIA+bVluKm_T8u67aKIal zTzFSv$(LTkasYmZHpV{SnH+CcRL-0y`vV7ejyGe=TdDoUyB1yeX%p7Co8>gndhT0bUQqa=7ZSQ?z1uq8$XPbH8bk4&Z1HxC z(wU%Ekfx#{DgqhC80_u;TcOMvitSY_ z7l-ylfCqHfUxgs?u`1XR9RYUDCdjviFCi4XS!@|(b*LK#J{|_OtbXwb`q8X?d{9)i z@+q0>+R<1cwXJ%Y%$smg(~75Ot;a%)MYrb24qX(e)*9t;K8Rh*Sh!6qw;HD78$5!w z&~tD#D#2Iv_p z%D-Qm`?v;wsoKl%Ga1GFpXs-K)M> zM%8W#F8oY{{XS`!b(6A``W4FL?5iFG9(_hXa6g+|2|{<$L`@i{_j>uKmWnT z=98ZL5Oxh&mP*fg#Qan`-%*^Y{9H$puj+Y@vW&IPaj;f;miUjd{BL^iM@%c^zial7 zGXCGeKK|oYsM`G>Y3%FVS?u9~ErBwo_BnDF2AQ|#7~c(nAE1`w5ei**cYH%RmxX-$ zmNojZ>WVGd&0V|;(f8s-TP7)Aaw~{_XMAp10rc#V>(AkNxBwk9lUwMBB6daZ==kL?2?akHQZVsDyIdkrZ zslcqZAI@$rOSwpMuffIE7p8mK3YE|Q+ll|&KQeXvM`wTk$9Aal`Olq#bW}L+nO(1E zg7m}|oBX6v5;a;hcO~Q=4i(L@^M^u9<$pWzpO3nSN16LS5BK=btx&YW@Gz~70b6xY zbf+{1_@O~ym0(xeK~V9q63pwF4}R_;V0#GI<3PYR3>3{o6WVrw2w}qQ2aZQUGh(Ny zYAWJG3xTFV?kyu)wiqt9pexQ+K?<8GU#$eDBKaXAw2JhkWu-nmAqq1J{#GKr-+|-N zUqDCp!?eIU0GBAPn-aya_02R4qxT>;gH*6$GN|#bq+yg2Rd;9}YVNTybDJaPG_1*5 zNRvW$b-A;816TDbgvna?l4oT*ho>4*(zTN=f-=yfLf}yu>}Y*2>*M%Xa{vT|@PS;X z_*&3`0)KabJAJhqTt5L@7EgWMnCZE20aI%3BD6qmvlJo)D&PciTWu#Br#ybU5SMl0 zw@bQw2R!}H5r;j$t@d%)MYz&<>Xi)7&%I6lVM(|DM0=GM6q}XIgF1$wmH3aNt{(q$ z(A~%X+6qO=1A2BMlInIfMuPlJHW9^oBD1mmMK=}cHsvU7u5Y=*zS)a+Qdv`w*kJKg z8Jkm%iOEy9<6E^}r!!fruo0%A>qx;k?WY-rkgkAe?fNB%d(fvlE)J^r_O)Y-59w?Y;1AF}N3 z(6ql22a@r_a!7~dh*d9dN=&fQy8P!m`P^B86yYTqim_L6SV>@!Y!Lyb*ut(X`YlupnEDMN_!!t%yU($yg5sk``1Gk5W*; zrrgxRrQ~Pd4mKrS!{~wnHpWOKC02aLLGZln6%K=g((pBz!JX@Y2032nbfx=a`J+ME>Ge!R z|1;*uT{trj2k5asu+I6Po__wn z+uz%Nw?hZu5>ko+j{u5+7y{t)9C_e2bX?o{#sN6Niv{+;r;`b=oq#lqnM2$BU%`IExcwTm`M>dl`K->^BaaS>xCL*Ej&5VBp}8fV0yv zX~c2r8ir#d*cQnH{Aa_sCl*I6j(+~HGuX#}-wqud zfZqZPZ3{2J=<@6Xxa8}8F!G?gq>e?v$s7i>!394^cLUK%ngBXSNgjT)I5=fPN-AJN zp>=08L=m4I*9B}{5P(|*7ATk@8#o@t905s&?e@%}^YGTN@S=S(Vl1_x?<`u}UolG@bDhL_L?H%Uqnc<+Sd_667&L{wTCc{!RV< x$4;-`+xvgELL6%;Tqo&yzxaBT7dxu=w5L7oX-})@{|5j7|NjtOJWv2y0RTAg_^AK@ literal 0 HcmV?d00001 From 40c6d1352abdb8454034df08c08145c6db3cd473 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Wed, 15 Nov 2023 10:50:02 -0500 Subject: [PATCH 41/62] account for rebuild druid --- charts/portal/Chart.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index 45430f20..9d92adca 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.2.2" description: CA API Developer Portal name: portal -version: 2.3.4 +version: 2.3.5 type: application home: https://github.com/CAAPIM/apim-charts maintainers: From cf914070c5a6b729fb369ffa0c01bd7e4a8a1a27 Mon Sep 17 00:00:00 2001 From: Justin Maurer Date: Wed, 15 Nov 2023 10:51:42 -0500 Subject: [PATCH 42/62] helm dep update on portal parent chart --- charts/portal/charts/druid-1.0.12.tgz | Bin 9139 -> 9139 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/charts/portal/charts/druid-1.0.12.tgz b/charts/portal/charts/druid-1.0.12.tgz index 4edeec571a06efd77665a42a87ecbe1cc760ef1a..cd15959f2e018437e246b4c0affff3575821ac95 100644 GIT binary patch delta 9116 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 a10Co<2RhI?`u_m{0RR7kCgoxPS^)rzg+C+! delta 9116 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 a_q3-y?P*V|=>G=*0RR6GT|7_#S^)sd From d6c7f7e5fa614fa4424adf6565735d372d1831bc Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Mon, 22 Jan 2024 22:50:11 +0530 Subject: [PATCH 43/62] Changes to support pod and container security context for Portal charts --- .../templates/broker/broker-statefulset.yaml | 10 +++ .../coordinator/coordinator-statefulset.yaml | 10 +++ .../historical/historical-statefulset.yaml | 12 ++- .../ingestion/ingestion-deployment.yaml | 10 +++ .../templates/kafka/kafka-statefulset.yaml | 12 ++- .../middlemanager-statefulset.yaml | 10 +++ .../templates/minio/minio-statefulset.yaml | 14 +++- .../zookeeper/zookeeper-statefulset.yaml | 12 ++- .../analytics-deployment.yaml | 10 +++ .../templates/apim/apim-deployment.yaml | 10 +++ .../authenticator-deployment.yaml | 10 +++ .../dispatcher/dispatcher-deployment.yaml | 10 +++ .../portal-data/portal-data-deployment.yaml | 10 +++ .../portal-enterprise-deployment.yaml | 10 +++ .../templates/pssg/pssg-deployment.yaml | 10 +++ .../tenant-provisioner-deployment.yaml | 10 +++ charts/portal/values.yaml | 82 +++++++++++++++++++ 17 files changed, 243 insertions(+), 9 deletions(-) diff --git a/charts/druid/templates/broker/broker-statefulset.yaml b/charts/druid/templates/broker/broker-statefulset.yaml index c0266d89..854f8c3a 100644 --- a/charts/druid/templates/broker/broker-statefulset.yaml +++ b/charts/druid/templates/broker/broker-statefulset.yaml @@ -41,10 +41,20 @@ spec: {{- if .Values.broker.tolerations }} tolerations: {{- toYaml .Values.broker.tolerations | nindent 12 }} {{- end }} + {{- if .Values.broker.podSecurityContext }} + securityContext: {{- toYaml .Values.broker.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: broker image: "{{ .Values.global.portalRepository }}{{ .Values.image.broker }}" imagePullPolicy: "{{ .Values.broker.image.pullPolicy }}" + {{- if .Values.broker.containerSecurityContext }} + securityContext: {{- toYaml .Values.broker.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} envFrom: - configMapRef: name: broker-config diff --git a/charts/druid/templates/coordinator/coordinator-statefulset.yaml b/charts/druid/templates/coordinator/coordinator-statefulset.yaml index 1e227c73..6c8e7a75 100644 --- a/charts/druid/templates/coordinator/coordinator-statefulset.yaml +++ b/charts/druid/templates/coordinator/coordinator-statefulset.yaml @@ -41,10 +41,20 @@ spec: {{- if .Values.coordinator.tolerations }} tolerations: {{- toYaml .Values.coordinator.tolerations | nindent 12 }} {{- end }} + {{- if .Values.coordinator.podSecurityContext }} + securityContext: {{- toYaml .Values.coordinator.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: coordinator image: "{{ .Values.global.portalRepository }}{{ .Values.image.coordinator }}" imagePullPolicy: "{{ .Values.coordinator.image.pullPolicy }}" + {{- if .Values.coordinator.containerSecurityContext }} + securityContext: {{- toYaml .Values.coordinator.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: MINIO_ACCESS_KEY valueFrom: diff --git a/charts/druid/templates/historical/historical-statefulset.yaml b/charts/druid/templates/historical/historical-statefulset.yaml index 3204dbcc..986b9887 100644 --- a/charts/druid/templates/historical/historical-statefulset.yaml +++ b/charts/druid/templates/historical/historical-statefulset.yaml @@ -41,12 +41,20 @@ spec: {{- if .Values.historical.tolerations }} tolerations: {{- toYaml .Values.historical.tolerations | nindent 12 }} {{- end }} - securityContext: - fsGroup: 1010 + {{- if .Values.historical.podSecurityContext }} + securityContext: {{- toYaml .Values.historical.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: historical image: "{{ .Values.global.portalRepository }}{{ .Values.image.historical }}" imagePullPolicy: "{{ .Values.historical.image.pullPolicy }}" + {{- if .Values.historical.containerSecurityContext }} + securityContext: {{- toYaml .Values.historical.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: MINIO_ACCESS_KEY valueFrom: diff --git a/charts/druid/templates/ingestion/ingestion-deployment.yaml b/charts/druid/templates/ingestion/ingestion-deployment.yaml index e3435edf..e3e546a9 100644 --- a/charts/druid/templates/ingestion/ingestion-deployment.yaml +++ b/charts/druid/templates/ingestion/ingestion-deployment.yaml @@ -42,10 +42,20 @@ spec: {{- if .Values.ingestion.tolerations }} tolerations: {{- toYaml .Values.ingestion.tolerations | nindent 12 }} {{- end }} + {{- if .Values.ingestion.podSecurityContext }} + securityContext: {{- toYaml .Values.ingestion.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: ingestion-server image: "{{ .Values.global.portalRepository }}{{ .Values.image.ingestion }}" imagePullPolicy: "{{ .Values.ingestion.image.pullPolicy }}" + {{- if .Values.ingestion.containerSecurityContext }} + securityContext: {{- toYaml .Values.ingestion.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: MINIO_ACCESS_KEY valueFrom: diff --git a/charts/druid/templates/kafka/kafka-statefulset.yaml b/charts/druid/templates/kafka/kafka-statefulset.yaml index 8c57e5a6..fcd17b34 100644 --- a/charts/druid/templates/kafka/kafka-statefulset.yaml +++ b/charts/druid/templates/kafka/kafka-statefulset.yaml @@ -41,12 +41,20 @@ spec: {{- if .Values.kafka.tolerations }} tolerations: {{- toYaml .Values.kafka.tolerations | nindent 12 }} {{- end }} - securityContext: - fsGroup: 1010 + {{- if .Values.kafka.podSecurityContext }} + securityContext: {{- toYaml .Values.kafka.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: kafka image: "{{ .Values.global.portalRepository }}{{ .Values.image.kafka }}" imagePullPolicy: "{{ .Values.kafka.image.pullPolicy }}" + {{- if .Values.kafka.containerSecurityContext }} + securityContext: {{- toYaml .Values.kafka.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} envFrom: - configMapRef: name: kafka-config diff --git a/charts/druid/templates/middlemanager/middlemanager-statefulset.yaml b/charts/druid/templates/middlemanager/middlemanager-statefulset.yaml index ab375dbf..e1eacd5c 100644 --- a/charts/druid/templates/middlemanager/middlemanager-statefulset.yaml +++ b/charts/druid/templates/middlemanager/middlemanager-statefulset.yaml @@ -41,10 +41,20 @@ spec: {{- if .Values.middlemanager.tolerations }} tolerations: {{- toYaml .Values.middlemanager.tolerations | nindent 12 }} {{- end }} + {{- if .Values.middlemanager.podSecurityContext }} + securityContext: {{- toYaml .Values.middlemanager.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: middlemanager image: "{{ .Values.global.portalRepository }}{{ .Values.image.middlemanager }}" imagePullPolicy: "{{ .Values.middlemanager.image.pullPolicy }}" + {{- if .Values.middlemanager.containerSecurityContext }} + securityContext: {{- toYaml .Values.middlemanager.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: MINIO_ACCESS_KEY valueFrom: diff --git a/charts/druid/templates/minio/minio-statefulset.yaml b/charts/druid/templates/minio/minio-statefulset.yaml index 08686ee7..6ab43c22 100644 --- a/charts/druid/templates/minio/minio-statefulset.yaml +++ b/charts/druid/templates/minio/minio-statefulset.yaml @@ -42,8 +42,16 @@ spec: {{- if .Values.minio.tolerations }} tolerations: {{- toYaml .Values.minio.tolerations | nindent 12 }} {{- end }} - securityContext: - fsGroup: 1010 + {{- if .Values.minio.podSecurityContext }} + securityContext: {{- toYaml .Values.minio.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} + {{- if .Values.minio.containerSecurityContext }} + securityContext: {{- toYaml .Values.minio.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} containers: {{ $address := print ".minio." .Release.Namespace ".svc.cluster.local/opt/data" }} - command: @@ -56,7 +64,7 @@ spec: {{ end }} name: minio image: "{{ .Values.global.portalRepository }}{{ .Values.image.minio }}" - imagePullPolicy: "{{ .Values.minio.image.pullPolicy }}" + imagePullPolicy: "{{ .Values.minio.image.pullPolicy }}" env: - name: MINIO_ACCESS_KEY valueFrom: diff --git a/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml b/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml index 2934f0a7..7a4988a8 100644 --- a/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml +++ b/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml @@ -44,12 +44,20 @@ spec: {{- if .Values.zookeeper.tolerations }} tolerations: {{- toYaml .Values.zookeeper.tolerations | nindent 12 }} {{- end }} - securityContext: - fsGroup: 1010 + {{- if .Values.zookeeper.podSecurityContext }} + securityContext: {{- toYaml .Values.zookeeper.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: zookeeper image: "{{ .Values.global.portalRepository }}{{ .Values.image.zookeeper }}" imagePullPolicy: "{{ .Values.zookeeper.image.pullPolicy }}" + {{- if .Values.zookeeper.containerSecurityContext }} + securityContext: {{- toYaml .Values.zookeeper.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} ports: - containerPort: 2181 - containerPort: 2888 diff --git a/charts/portal/templates/analytics-server/analytics-deployment.yaml b/charts/portal/templates/analytics-server/analytics-deployment.yaml index 58c14e74..276f5a3a 100644 --- a/charts/portal/templates/analytics-server/analytics-deployment.yaml +++ b/charts/portal/templates/analytics-server/analytics-deployment.yaml @@ -47,6 +47,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.analytics.podSecurityContext }} + securityContext: {{- toYaml .Values.analytics.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -58,6 +63,11 @@ spec: - name: analytics-server image: "{{ .Values.global.portalRepository }}{{ .Values.image.analytics }}" imagePullPolicy: "{{ .Values.analytics.image.pullPolicy }}" + {{- if .Values.analytics.containerSecurityContext }} + securityContext: {{- toYaml .Values.analytics.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: RABBITMQ_PASSWORD valueFrom: diff --git a/charts/portal/templates/apim/apim-deployment.yaml b/charts/portal/templates/apim/apim-deployment.yaml index 797d5fc3..c23544d9 100644 --- a/charts/portal/templates/apim/apim-deployment.yaml +++ b/charts/portal/templates/apim/apim-deployment.yaml @@ -43,6 +43,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.apim.podSecurityContext }} + securityContext: {{- toYaml .Values.apim.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -54,6 +59,11 @@ spec: - name: apim image: "{{ .Values.global.portalRepository }}{{ .Values.image.apim }}" imagePullPolicy: {{ .Values.apim.image.pullPolicy | quote }} + {{- if .Values.apim.containerSecurityContext }} + securityContext: {{- toYaml .Values.apim.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: RABBITMQ_DEFAULT_PASS valueFrom: diff --git a/charts/portal/templates/authenticator/authenticator-deployment.yaml b/charts/portal/templates/authenticator/authenticator-deployment.yaml index dc56fd90..cc4566de 100644 --- a/charts/portal/templates/authenticator/authenticator-deployment.yaml +++ b/charts/portal/templates/authenticator/authenticator-deployment.yaml @@ -43,6 +43,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.authenticator.podSecurityContext }} + securityContext: {{- toYaml .Values.authenticator.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -54,6 +59,11 @@ spec: - name: authenticator image: "{{ .Values.global.portalRepository }}{{ .Values.image.authenticator }}" imagePullPolicy: "{{ .Values.authenticator.image.pullPolicy }}" + {{- if .Values.authenticator.containerSecurityContext }} + securityContext: {{- toYaml .Values.authenticator.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: RABBITMQ_PASSWORD valueFrom: diff --git a/charts/portal/templates/dispatcher/dispatcher-deployment.yaml b/charts/portal/templates/dispatcher/dispatcher-deployment.yaml index 097c4a71..50760755 100644 --- a/charts/portal/templates/dispatcher/dispatcher-deployment.yaml +++ b/charts/portal/templates/dispatcher/dispatcher-deployment.yaml @@ -43,10 +43,20 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.dispatcher.podSecurityContext }} + securityContext: {{- toYaml .Values.dispatcher.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} containers: - name: dispatcher image: "{{ .Values.global.portalRepository }}{{ .Values.image.dispatcher }}" imagePullPolicy: "{{ .Values.dispatcher.image.pullPolicy }}" + {{- if .Values.dispatcher.containerSecurityContext }} + securityContext: {{- toYaml .Values.dispatcher.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: HTTPD_SSL_KEY valueFrom: diff --git a/charts/portal/templates/portal-data/portal-data-deployment.yaml b/charts/portal/templates/portal-data/portal-data-deployment.yaml index 367f9601..bbccea67 100644 --- a/charts/portal/templates/portal-data/portal-data-deployment.yaml +++ b/charts/portal/templates/portal-data/portal-data-deployment.yaml @@ -43,6 +43,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.portalData.podSecurityContext }} + securityContext: {{- toYaml .Values.portalData.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -54,6 +59,11 @@ spec: - name: portal-data image: "{{ .Values.global.portalRepository }}{{ .Values.image.data }}" imagePullPolicy: "{{ .Values.portalData.image.pullPolicy }}" + {{- if .Values.portalData.containerSecurityContext }} + securityContext: {{- toYaml .Values.portalData.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: RABBITMQ_DEFAULT_PASS valueFrom: diff --git a/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml b/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml index 3cc8d3dd..580bc2c4 100644 --- a/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml +++ b/charts/portal/templates/portal-enterprise/portal-enterprise-deployment.yaml @@ -43,6 +43,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.portalEnterprise.podSecurityContext }} + securityContext: {{- toYaml .Values.portalEnterprise.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -54,6 +59,11 @@ spec: - name: portal-enterprise image: "{{ .Values.global.portalRepository }}{{ .Values.image.enterprise }}" imagePullPolicy: "{{ .Values.portalEnterprise.image.pullPolicy }}" + {{- if .Values.portalEnterprise.containerSecurityContext }} + securityContext: {{- toYaml .Values.portalEnterprise.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: RABBITMQ_DEFAULT_PASS valueFrom: diff --git a/charts/portal/templates/pssg/pssg-deployment.yaml b/charts/portal/templates/pssg/pssg-deployment.yaml index 161b5191..f768d28c 100644 --- a/charts/portal/templates/pssg/pssg-deployment.yaml +++ b/charts/portal/templates/pssg/pssg-deployment.yaml @@ -43,6 +43,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.pssg.podSecurityContext }} + securityContext: {{- toYaml .Values.pssg.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -54,6 +59,11 @@ spec: - name: pssg image: "{{ .Values.global.portalRepository }}{{ .Values.image.pssg }}" imagePullPolicy: "{{ .Values.pssg.image.pullPolicy }}" + {{- if .Values.pssg.containerSecurityContext }} + securityContext: {{- toYaml .Values.pssg.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: SSG_ADMIN_USERNAME valueFrom: diff --git a/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml b/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml index e13d9fb1..9b8fa618 100644 --- a/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml +++ b/charts/portal/templates/tenant-provisioner/tenant-provisioner-deployment.yaml @@ -43,6 +43,11 @@ spec: {{- if .Values.global.schedulerName }} schedulerName: "{{ .Values.global.schedulerName }}" {{- end }} + {{- if .Values.tenantProvisioner.podSecurityContext }} + securityContext: {{- toYaml .Values.tenantProvisioner.podSecurityContext | nindent 12 }} + {{- else if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- end }} initContainers: - name: liquidbase-upgrade-portal image: "{{ .Values.global.portalRepository }}{{ .Values.image.upgradeVerify }}" @@ -54,6 +59,11 @@ spec: - name: tenant-provisioner-service image: "{{ .Values.global.portalRepository }}{{ .Values.image.tps }}" imagePullPolicy: "{{ .Values.tenantProvisioner.image.pullPolicy }}" + {{- if .Values.tenantProvisioner.containerSecurityContext }} + securityContext: {{- toYaml .Values.tenantProvisioner.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} ports: - containerPort: 9000 protocol: TCP diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 893aea5d..02427e51 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -23,6 +23,11 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: @@ -183,6 +188,10 @@ analytics: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -211,6 +220,10 @@ apim: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 1000m @@ -238,6 +251,10 @@ authenticator: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 250m @@ -264,6 +281,10 @@ dispatcher: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -319,6 +340,10 @@ portalData: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -346,6 +371,10 @@ portalEnterprise: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 250m @@ -372,6 +401,10 @@ pssg: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -399,6 +432,10 @@ tenantProvisioner: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -452,6 +489,11 @@ druid: # consider changing to mode... standalone/distributed. # Once Portal is installed, minio can not be scaled up or down. replicaCount: 1 + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} image: pullPolicy: IfNotPresent auth: @@ -501,6 +543,11 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: limits: {} # memory: 256Mi @@ -518,6 +565,10 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: limits: {} # memory: 512Mi @@ -535,6 +586,11 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -554,6 +610,10 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # memory: 1Gi @@ -571,6 +631,11 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # memory: 2Gi @@ -589,6 +654,10 @@ druid: image: pullPolicy: IfNotPresent portName: ingestion-svc + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # cpu: 100m @@ -608,6 +677,10 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: {} # memory: 4Gi @@ -740,6 +813,9 @@ jobs: mysql: image: tag: "8.0.31-debian-11-r36" + serviceAccount: + create: false + name: "default" auth: username: portal existingSecret: database-secret @@ -754,6 +830,12 @@ mysql: elevate-admin.sql: | GRANT ALL PRIVILEGES ON *.* TO 'portal'@'%'; FLUSH PRIVILEGES; primary: + # podSecurityContext: + # enabled: true + # fsGroup: 1000760000 + # containerSecurityContext: + # enabled: true + # runAsUser: 1000760000 configuration: |- [client] port=3306 From 3485033761cbd04cb972bffe489bdeeb981ac594 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 14:41:21 +0530 Subject: [PATCH 44/62] Changes to support pod and container security context for Portal charts --- charts/portal/README.md | 5 ++ .../templates/jobs/cert-update-job.yaml | 6 ++ .../portal/templates/jobs/db-upgrade-job.yaml | 6 ++ .../templates/jobs/rbac-upgrade-job.yaml | 6 ++ charts/portal/values-production.yaml | 72 +++++++++++++++++++ charts/portal/values.yaml | 19 +++-- 6 files changed, 103 insertions(+), 11 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 6c6975eb..8dc432ca 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -195,6 +195,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `global.schedulerName` | Global Scheduler name for Portal + Analytics, this doesn't apply to other subcharts | `not set` | | `global.saas` | Reserved | `not set` | | `global.additionalLabels` | A list of custom key: value labels applied to all components | `not set` | +| `global.podSecurityContext` | Same settings are applied to all portal microservices. For more details see [Pod Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod) | `[]` | +| `global.containerSecurityContext` | Same settings are applied to all portal microservices. For more details see [Container Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) | `{}` | + ### Portal Parameters | Parameter | Description | Default | @@ -272,6 +275,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `analytics.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `analytics.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `analytics.pdb.minAvailable` | Minimum number of available pods | `1` | +| `analytics.podSecurityContext` | Pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `analytics.containerSecurityContext` | Container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `analytics.strategy` | Update strategy | `{} evaluated as a template` | | `analytics.resources` | Resource request/limits | `{} evaluated as a template` | | `analytics.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | diff --git a/charts/portal/templates/jobs/cert-update-job.yaml b/charts/portal/templates/jobs/cert-update-job.yaml index fd261fb2..bc622dab 100644 --- a/charts/portal/templates/jobs/cert-update-job.yaml +++ b/charts/portal/templates/jobs/cert-update-job.yaml @@ -24,10 +24,16 @@ spec: spec: serviceAccountName: {{ include "portal.serviceAccountName" . }} restartPolicy: Never + {{- if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 8 }} + {{- end }} containers: - name: {{ .Release.Name }}-tls-manager image: "{{ .Values.global.portalRepository }}{{ .Values.image.tlsManager }}" imagePullPolicy: {{ .Values.jobs.image.pullPolicy }} + {{- if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 10 }} + {{- end }} env: - name: P12_INTERNAL_PASS valueFrom: diff --git a/charts/portal/templates/jobs/db-upgrade-job.yaml b/charts/portal/templates/jobs/db-upgrade-job.yaml index dded490d..e33acc14 100644 --- a/charts/portal/templates/jobs/db-upgrade-job.yaml +++ b/charts/portal/templates/jobs/db-upgrade-job.yaml @@ -22,10 +22,16 @@ spec: template: spec: serviceAccountName: {{ include "portal.serviceAccountName" . }} + {{- if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 8 }} + {{- end }} containers: - name: db-upgrade image: "{{ .Values.global.portalRepository }}{{ .Values.image.dbUpgrade }}" imagePullPolicy: {{ .Values.jobs.image.pullPolicy }} + {{- if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: HOST {{ if .Values.global.setupDemoDatabase }} diff --git a/charts/portal/templates/jobs/rbac-upgrade-job.yaml b/charts/portal/templates/jobs/rbac-upgrade-job.yaml index 689acc2e..b6c7de17 100644 --- a/charts/portal/templates/jobs/rbac-upgrade-job.yaml +++ b/charts/portal/templates/jobs/rbac-upgrade-job.yaml @@ -22,10 +22,16 @@ spec: template: spec: serviceAccountName: {{ include "portal.serviceAccountName" . }} + {{- if .Values.global.podSecurityContext }} + securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 8 }} + {{- end }} containers: - name: rbac-upgrade image: "{{ .Values.global.portalRepository }}{{ .Values.image.rbacUpgrade }}" imagePullPolicy: {{ .Values.jobs.image.pullPolicy }} + {{- if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: HOST {{ if .Values.global.setupDemoDatabase }} diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index c4fef581..8cba60de 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -23,6 +23,10 @@ global: legacyHostnames: false legacyDatabaseNames: false subdomainPrefix: dev-portal + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: @@ -181,6 +185,10 @@ analytics: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -218,6 +226,10 @@ apim: rollingUpdate: maxSurge: 2 maxUnavailable: 2 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 1000m @@ -254,6 +266,10 @@ authenticator: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 250m @@ -289,6 +305,10 @@ dispatcher: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -353,6 +373,10 @@ portalData: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -389,6 +413,10 @@ portalEnterprise: rollingUpdate: maxSurge: 1 maxUnavailable: 0 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 250m @@ -424,6 +452,10 @@ pssg: rollingUpdate: maxSurge: 2 maxUnavailable: 2 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -460,6 +492,10 @@ tenantProvisioner: rollingUpdate: maxSurge: 1 maxUnavailable: 1 + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -518,6 +554,11 @@ druid: # consider changing to mode... standalone/distributed. # Once Portal is installed, minio can not be scaled up or down. replicaCount: 4 + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} image: pullPolicy: IfNotPresent pdb: @@ -581,6 +622,11 @@ druid: create: false maxUnavailable: "" minAvailable: "" + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: limits: memory: 256Mi @@ -608,6 +654,10 @@ druid: create: false maxUnavailable: "" minAvailable: "" + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: limits: memory: 512Mi @@ -634,6 +684,11 @@ druid: create: false maxUnavailable: "" minAvailable: "" + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -662,6 +717,10 @@ druid: create: false maxUnavailable: "" minAvailable: "" + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: memory: 1Gi @@ -688,6 +747,11 @@ druid: create: false maxUnavailable: "" minAvailable: "" + podSecurityContext: + fsGroup: 1001 + runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: memory: 2Gi @@ -715,6 +779,10 @@ druid: maxUnavailable: "" minAvailable: "" portName: ingestion-svc + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: cpu: 100m @@ -743,6 +811,10 @@ druid: create: false maxUnavailable: "" minAvailable: "" + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container + containerSecurityContext: {} resources: requests: memory: 4Gi diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 02427e51..4f95c404 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -25,7 +25,6 @@ global: subdomainPrefix: dev-portal # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: {} - # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ @@ -491,7 +490,7 @@ druid: replicaCount: 1 podSecurityContext: fsGroup: 1001 - runAsNonRoot: true + runAsNonRoot: true # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} image: @@ -813,9 +812,6 @@ jobs: mysql: image: tag: "8.0.31-debian-11-r36" - serviceAccount: - create: false - name: "default" auth: username: portal existingSecret: database-secret @@ -830,12 +826,13 @@ mysql: elevate-admin.sql: | GRANT ALL PRIVILEGES ON *.* TO 'portal'@'%'; FLUSH PRIVILEGES; primary: - # podSecurityContext: - # enabled: true - # fsGroup: 1000760000 - # containerSecurityContext: - # enabled: true - # runAsUser: 1000760000 + # primary: + # podSecurityContext: + # enabled: true + # fsGroup: 100 + # containerSecurityContext: + # enabled: true + # runAsUser: 1001 configuration: |- [client] port=3306 From f3df7d3e2554e73575dfd174ec363a2dd389b2e7 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 14:49:44 +0530 Subject: [PATCH 45/62] Changes to support pod and container security context for Portal charts --- charts/portal/README.md | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 8dc432ca..f8bb9d31 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -195,8 +195,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `global.schedulerName` | Global Scheduler name for Portal + Analytics, this doesn't apply to other subcharts | `not set` | | `global.saas` | Reserved | `not set` | | `global.additionalLabels` | A list of custom key: value labels applied to all components | `not set` | -| `global.podSecurityContext` | Same settings are applied to all portal microservices. For more details see [Pod Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod) | `[]` | -| `global.containerSecurityContext` | Same settings are applied to all portal microservices. For more details see [Container Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) | `{}` | +| `global.podSecurityContext` | [Pod Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod) settings are applied to all portal microservices. | `[]` | +| `global.containerSecurityContext` | [Container Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) settings are applied to all portal microservices. | `{}` | ### Portal Parameters @@ -275,8 +275,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `analytics.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `analytics.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `analytics.pdb.minAvailable` | Minimum number of available pods | `1` | -| `analytics.podSecurityContext` | Pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | -| `analytics.containerSecurityContext` | Container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | +| `analytics.podSecurityContext` | Analytics Pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `analytics.containerSecurityContext` | Analytics Container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `analytics.strategy` | Update strategy | `{} evaluated as a template` | | `analytics.resources` | Resource request/limits | `{} evaluated as a template` | | `analytics.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -290,6 +290,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `apim.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `apim.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `apim.pdb.minAvailable` | Minimum number of available pods | `1` | +| `apim.podSecurityContext` | APIM Pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `apim.containerSecurityContext` | APIM Container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `apim.strategy` | Update strategy | `{} evaluated as a template` | | `apim.resources` | Resource request/limits | `{} evaluated as a template` | | `apim.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | From 965675176563b472fcdd79adab10d312fa8d772a Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 15:12:35 +0530 Subject: [PATCH 46/62] Doc changes --- charts/portal/README.md | 39 +++++++++++++++++++++++++++++++++++---- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index f8bb9d31..827f31f5 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -275,8 +275,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `analytics.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `analytics.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `analytics.pdb.minAvailable` | Minimum number of available pods | `1` | -| `analytics.podSecurityContext` | Analytics Pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | -| `analytics.containerSecurityContext` | Analytics Container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | +| `analytics.podSecurityContext` | Analytics pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `analytics.containerSecurityContext` | Analytics container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `analytics.strategy` | Update strategy | `{} evaluated as a template` | | `analytics.resources` | Resource request/limits | `{} evaluated as a template` | | `analytics.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -290,8 +290,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `apim.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `apim.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `apim.pdb.minAvailable` | Minimum number of available pods | `1` | -| `apim.podSecurityContext` | APIM Pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | -| `apim.containerSecurityContext` | APIM Container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | +| `apim.podSecurityContext` | APIM pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `apim.containerSecurityContext` | APIM container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `apim.strategy` | Update strategy | `{} evaluated as a template` | | `apim.resources` | Resource request/limits | `{} evaluated as a template` | | `apim.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -317,6 +317,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `authenticator.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `authenticator.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `authenticator.pdb.minAvailable` | Minimum number of available pods | `1` | +| `authenticator.podSecurityContext` | authenticator pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `authenticator.containerSecurityContext` | authenticator container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `authenticator.strategy` | Update strategy | `{} evaluated as a template` | | `authenticator.resources` | Resource request/limits | `{} evaluated as a template` | | `authenticator.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -329,6 +331,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `dispatcher.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `dispatcher.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `dispatcher.pdb.minAvailable` | Minimum number of available pods | `1` | +| `dispatcher.podSecurityContext` | Dispatcher pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `dispatcher.containerSecurityContext`| Dispatcher container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `dispatcher.strategy` | Update strategy | `{} evaluated as a template` | | `dispatcher.resources` | Resource request/limits | `{} evaluated as a template` | | `dispatcher.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | @@ -355,6 +359,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `portalData.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `portalData.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `portalData.additionalLabels` | A list of custom key: value labels | `not set` | +| `portalData.podSecurityContext` | Portal-data pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `portalData.containerSecurityContext`| Portal-data container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `portalEnterprise.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | | `portalEnterprise.replicaCount` | Number of portal-enterprise nodes | `1` | | `portalEnterprise.javaOptions` | Java Options to pass in | `-Xms2g -Xmx2g` | @@ -368,6 +374,9 @@ This section describes configurable parameters in **values.yaml**, there is also | `portalEnterprise.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `portalEnterprise.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `portalEnterprise.additionalLabels` | A list of custom key: value labels | `not set` | +| `portalEnterprise.podSecurityContext`| Portal enterprise pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `portalEnterprise.containerSecurityContext`| Portal enterprise container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | +| `portalEnterprise.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | | `pssg.forceRedeploy` | Force redeployment during helm upgrade whether there is a change or not | `false` | | `pssg.replicaCount` | Number of PSSG nodes | `1` | | `pssg.image.pullPolicy` | PSSG image pull policy | `IfNotPresent` | @@ -380,6 +389,8 @@ This section describes configurable parameters in **values.yaml**, there is also | `pssg.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `pssg.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `pssg.additionalLabels` | A list of custom key: value labels | `not set` | +| `pssg.podSecurityContext` | PSSG pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `pssg.containerSecurityContext`| PSSG container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `pssg.additionalEnv.CONFIG_8443_TLS` | Enabled Port 8443 TLS Versions | `If not specfied, Portal TLS defaults are enabled.` see [Portal TLS Defaults](#portal-tls-defaults) | | `pssg.additionalEnv.CONFIG_9443_TLS` | Enabled Port 9443 TLS Versions | `If not specfied, Portal TLS defaults are enabled` see [Portal TLS Defaults](#portal-tls-defaults) | | `pssg.additionalEnv.CONFIG_9446_TLS` | Enabled Port 9446 TLS Versions | `If not specfied, Portal TLS defaults are enabled` see [Portal TLS Defaults](#portal-tls-defaults) | @@ -403,10 +414,14 @@ This section describes configurable parameters in **values.yaml**, there is also | `tenantProvisioner.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `tenantProvisioner.affinity ` | Affinity for pod assignment | `{} evaluated as a template` | | `tenantProvisioner.additionalLabels` | A list of custom key: value labels | `not set` | +| `tenantProvisioner.podSecurityContext`| Tenant provisioner pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `tenantProvisioner.containerSecurityContext`| Tenant provisioner container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `jobs.nodeSelector` | Node labels for pod assignment | `{} evaluated as a template` | | `jobs.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `jobs.labels` | A list of custom key: value labels applied to jobs | `not set` | | `jobs.image.PullPolicy` | Image pull policy applied to jobs | `IfNotPresent` | +| `jobs.podSecurityContext` | Pod's security context settings applied to jobs. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `jobs.containerSecurityContext`| Container's security context settings applied to jobs. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | ### Database Node Pool Configurations @@ -690,6 +705,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.minio.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.minio.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.minio.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.minio.podSecurityContext` | Minio pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.minio.containerSecurityContext` | Minio container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.zookeeper.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.zookeeper.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.zookeeper.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -700,6 +717,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.zookeeper.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.zookeeper.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.zookeeper.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.zookeeper.podSecurityContext` | Zookeeper pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.zookeeper.containerSecurityContext` | Zookeeper container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.coordinator.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.coordinator.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.coordinator.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -710,6 +729,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.coodinator.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.coordinator.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.coordinator.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.coordinator.podSecurityContext` | Coordinator pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.coordinator.containerSecurityContext` | Coordinator container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.kafka.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.kafka.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.kafka.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -720,6 +741,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.kafka.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.kafka.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.kafka.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.kafka.podSecurityContext` | Kafka pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.kafka.containerSecurityContext` | Kafka container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.broker.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.broker.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.broker.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -730,6 +753,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.broker.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.broker.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.broker.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.broker.podSecurityContext` | Broker pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.broker.containerSecurityContext` | Broker container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.historical.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.historical.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.historical.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -740,6 +765,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.historical.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.historical.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.historical.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.historical.podSecurityContext` | Historical pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.historical.containerSecurityContext` | Historical container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.ingestion.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.ingestion.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.ingestion.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -750,6 +777,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.ingestion.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.ingestion.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.ingestion.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.ingestion.podSecurityContext` | Ingestion pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.ingestion.containerSecurityContext` | Ingestion container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | | `druid.middlemanager.pdb.create` | Create PodDisruptionBudget (PDB) object | `false` | | `druid.middlemanager.pdb.maxUnavailable` | Maximum number of simultaneous unavailable pods | `not set` | | `druid.middlemanager.pdb.minAvailable` | Minimum number of available pods | `not set` | @@ -760,6 +789,8 @@ The following table lists the configured parameters of the Druid Subchart: | `druid.middlemanager.tolerations` | Pod tolerations for pod assignment | `{} evaluated as a template` | | `druid.middlemanager.affinity` | Affinity for pod assignment | `{} evaluated as a template` | | `druid.middlemanager.additionalLabels` | A list of custom key: value labels | `not set` | +| `druid.middlemanager.podSecurityContext` | Middle manager pod's security context settings. Overrides global.podSecurityContext settings | `{} evaluated as a template` | +| `druid.middlemanager.containerSecurityContext` | Middle manager container's security context settings. Overrides global.containerSecurityContext settings | `{} evaluated as a template` | ## Druid Images The following table lists the configured parameters of the Druid Subchart From b2350e46f2a175e277d0db8a6b27145ee6e8f83b Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 16:07:52 +0530 Subject: [PATCH 47/62] Doc changes and chart changes --- charts/druid/Chart.yaml | 2 +- .../historical/historical-statefulset.yaml | 3 +++ .../templates/kafka/kafka-statefulset.yaml | 3 +++ .../templates/minio/minio-statefulset.yaml | 3 +++ .../zookeeper/zookeeper-statefulset.yaml | 3 +++ charts/portal/Chart.lock | 6 +++--- charts/portal/Chart.yaml | 2 +- charts/portal/charts/druid-1.0.12.tgz | Bin 9139 -> 0 bytes charts/portal/charts/druid-1.0.13.tgz | Bin 0 -> 9485 bytes charts/portal/values.yaml | 20 +++++++----------- 10 files changed, 25 insertions(+), 17 deletions(-) delete mode 100644 charts/portal/charts/druid-1.0.12.tgz create mode 100644 charts/portal/charts/druid-1.0.13.tgz diff --git a/charts/druid/Chart.yaml b/charts/druid/Chart.yaml index 3b6d0d7d..45ffcebf 100644 --- a/charts/druid/Chart.yaml +++ b/charts/druid/Chart.yaml @@ -7,5 +7,5 @@ maintainers: - name: Gazza7205 sources: - https://github.com/CAAPIM/apim-charts -version: 1.0.12 +version: 1.0.13 appVersion: 0.17.0 diff --git a/charts/druid/templates/historical/historical-statefulset.yaml b/charts/druid/templates/historical/historical-statefulset.yaml index 986b9887..47fe6255 100644 --- a/charts/druid/templates/historical/historical-statefulset.yaml +++ b/charts/druid/templates/historical/historical-statefulset.yaml @@ -45,6 +45,9 @@ spec: securityContext: {{- toYaml .Values.historical.podSecurityContext | nindent 12 }} {{- else if .Values.global.podSecurityContext }} securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- else }} + securityContext: + fsGroup: 1010 {{- end }} containers: - name: historical diff --git a/charts/druid/templates/kafka/kafka-statefulset.yaml b/charts/druid/templates/kafka/kafka-statefulset.yaml index fcd17b34..70edd947 100644 --- a/charts/druid/templates/kafka/kafka-statefulset.yaml +++ b/charts/druid/templates/kafka/kafka-statefulset.yaml @@ -54,6 +54,9 @@ spec: securityContext: {{- toYaml .Values.kafka.containerSecurityContext | nindent 12 }} {{- else if .Values.global.containerSecurityContext }} securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- else }} + securityContext: + fsGroup: 1010 {{- end }} envFrom: - configMapRef: diff --git a/charts/druid/templates/minio/minio-statefulset.yaml b/charts/druid/templates/minio/minio-statefulset.yaml index 6ab43c22..ce479647 100644 --- a/charts/druid/templates/minio/minio-statefulset.yaml +++ b/charts/druid/templates/minio/minio-statefulset.yaml @@ -51,6 +51,9 @@ spec: securityContext: {{- toYaml .Values.minio.containerSecurityContext | nindent 12 }} {{- else if .Values.global.containerSecurityContext }} securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- else }} + securityContext: + fsGroup: 1010 {{- end }} containers: {{ $address := print ".minio." .Release.Namespace ".svc.cluster.local/opt/data" }} diff --git a/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml b/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml index 7a4988a8..1ab05c5b 100644 --- a/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml +++ b/charts/druid/templates/zookeeper/zookeeper-statefulset.yaml @@ -48,6 +48,9 @@ spec: securityContext: {{- toYaml .Values.zookeeper.podSecurityContext | nindent 12 }} {{- else if .Values.global.podSecurityContext }} securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- else }} + securityContext: + fsGroup: 1010 {{- end }} containers: - name: zookeeper diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index a31705ea..bcf0cd5e 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -1,7 +1,7 @@ dependencies: - name: druid repository: file://../druid - version: 1.0.12 + version: 1.0.13 - name: mysql repository: https://raw.githubusercontent.com/bitnami/charts/archive-full-index/bitnami version: 9.4.7 @@ -11,5 +11,5 @@ dependencies: - name: ingress-nginx repository: https://kubernetes.github.io/ingress-nginx/ version: 4.7.2 -digest: sha256:77bef6109e5ced4a4f00e93044d4bbfd15d0c4b619bae3419dd692a8620a696b -generated: "2023-11-15T10:29:33.351726-05:00" +digest: sha256:52ddb3e04c6f6b75b023041b9cca016beb93590982f57379950b0ee18b6691c1 +generated: "2024-01-23T15:57:52.7895836+05:30" diff --git a/charts/portal/Chart.yaml b/charts/portal/Chart.yaml index 9d92adca..9148a838 100644 --- a/charts/portal/Chart.yaml +++ b/charts/portal/Chart.yaml @@ -2,7 +2,7 @@ apiVersion: v2 appVersion: "5.2.2" description: CA API Developer Portal name: portal -version: 2.3.5 +version: 2.3.6 type: application home: https://github.com/CAAPIM/apim-charts maintainers: diff --git a/charts/portal/charts/druid-1.0.12.tgz b/charts/portal/charts/druid-1.0.12.tgz deleted file mode 100644 index cd15959f2e018437e246b4c0affff3575821ac95..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9139 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 literal 0 HcmV?d00001 diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 4f95c404..c43b5bd2 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -488,9 +488,8 @@ druid: # consider changing to mode... standalone/distributed. # Once Portal is installed, minio can not be scaled up or down. replicaCount: 1 - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} image: @@ -542,9 +541,8 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} resources: @@ -585,9 +583,8 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} resources: @@ -630,9 +627,8 @@ druid: replicaCount: 1 image: pullPolicy: IfNotPresent - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} resources: From 9b97d4b1639b390e0fbd5d2572d34820932686aa Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 16:23:44 +0530 Subject: [PATCH 48/62] Doc changes and chart changes --- .../templates/kafka/kafka-statefulset.yaml | 2 +- charts/portal/charts/druid-1.0.13.tgz | Bin 9485 -> 9480 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/druid/templates/kafka/kafka-statefulset.yaml b/charts/druid/templates/kafka/kafka-statefulset.yaml index 70edd947..d74bbef4 100644 --- a/charts/druid/templates/kafka/kafka-statefulset.yaml +++ b/charts/druid/templates/kafka/kafka-statefulset.yaml @@ -56,7 +56,7 @@ spec: securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} {{- else }} securityContext: - fsGroup: 1010 + fsGroup: 1010 {{- end }} envFrom: - configMapRef: diff --git a/charts/portal/charts/druid-1.0.13.tgz b/charts/portal/charts/druid-1.0.13.tgz index 23bf5b9ad30292be5b31683fea458c50b9359d6c..0f3dba76216f6986c952a2efbe47aba7aeb3fe95 100644 GIT binary patch delta 7572 zcmV;F9c$u^N{C93tAEZw9dy4_JKbJq@EuT}gBdw_m_YYCwf48<%Ds>T9phKzV#Bt^ z;HleyjuZZ?DxHy{HgtqF*Ki1X_LFNvU9(qUa&!3++}JLGCYV^zToXgXfQ_TZ(q5r4 zSQ6skal5@R$kKaIG<(%PpU`4$=oqV(Mzi9^3K|xHhJ{=_Zhy3Z1!>Xu@XtTtsH+Yd z{C_q`8`$<-4Y6$HXp^;r#sE5wX=sr0-*^h@)=^ZY(`)Rz_4l8+{69g{L-@HAK!N;^ z`n`@U|ARsIDF3@ir-Jli0<}k=+1A`xcrKF|&;k<&YD)wz=s-DXoPxWh;R`x2FwhY; z78cS0vB3iZI)8FZdyRAeF@Rv^J@Ab79FQfVr9}k-F3=M)Z3nr&COK))EbmSG0h)l1 z$&NsFp|wE3nA3K!kVaq9+<(vl=nFxv1x=ts0v{ko3gs3f z;yD*+WncJD$AGvVq8|Q)5==Id0`1BJ-v)P9v?OXJRXSn>` z9GVzOgJmaxo8!&t!uVod#M+m8r2$Q=uR4iuHX zdvNVX`hw}M;Gt&Qu5MV6*z%i|q3b4EK?^PtrB;Sz*kk{f|7>YsV!MV0O)2vuoIk>` z|I2@7SPO*t+!+4Z!pMCJ*ga`Dbke~DSsJezrGFk&Gyb)K`rhDAeZKnP1OMBd@PW`k z{2^`g8FHTt4S|WK*`7tf+;+L(0?gmwlZOA7pM`Ouxd@VQ;GXhXm{R0y&@9j+OP^!R zhRzimS1dz|KjCjr!NenWYk@4}LV|QZ3oXwD5o#L3`2G>C$NT{=?LVOU1@SWA!P6cQ z0e@r(30T^uj)lfz!;95#ZF{b-8JIx+w2q{lswx8mwkV(l-cZ5zFqP@aZ?iYx{rSxs zF!|GS(HoxmvtgRRLR_D%Akmfp27Ih-4=mvm@@oKyt+3I^-ty*vj?r2n;u;#JtZ1g~ z=`+8(Be}u71tjP*T>A}*Ecjp|UC04~{(qWUx?>v_8G~k%zu+JL1+Ak;ya9zr3k?^4 z;goi}jx1t86a0>C3(O4@QC01Kn|_LoqDQpmMHU+U@c&>s+Jldug7>z)FcGgTa9sO$ zq>&b#E9h(g|4Th60cmR&apxkoW;j#O2g8rPaGA!+$jx*LEL%r2WFn0z9GdYI z!1>&;46U4^$ z(=AyYaaN5FV&P4C&G^86t8RT@=T&{s=@!edpQ%Lkg~^#!(s)7^!uZCu9|F#4W&@fR z$b{<|(rin|W67Qn2;dczPi4f&J^;6Z1EdK_Fr{0 zknBHwwbMJ=e|C`~>ko7hFq0q#E&@9Jvrq>30s=5RlS&D`0(FkF3JN;|f7Rpue-~*J z|6g)kq#FUGBZ7zG2^7?;z+tw>@A+ODqnK?%-+fGY*rZU2v1tct-?k$`{dU2#3jLaxG&TexUt6O@+A4;I3+ z1-dwkpGU(q72C??ndJ%EqH~d(P4}Y!-PyN@uEWo6?m9o`mRP|rGqhMCi{P{FAlCPO zMYys$%U5Fio)!Ode^S}?UmYY!k^gtpAIbio;qVy$Zzm}}b;tDOGlM`R^`Bf?=E6Z_ zPOD%-N|en7h9t^YM2D0rzZpa%)~IE0B4y>D#~6B+{hvA*%JSdot4I0YNy@^1@PJ+g zo4+XT*WqpcxKr}lfq&4oP*@3ZrG6W(jtjR(K_tDhTcj}me_!BX*hiKoEwlIC?O`e} z|C=MhisXN&CgguGIL3e2Nve+jk^?^-oa9$Wf^}j@u&kNdb|W*sgc0kc%+YCWad<$n z((+#e36?Ma9koB|O7h?B4@O7%-$kl{|2lX@01gfb7Be300S=Z>M*=2HdY1|e6Zt<( zbXa1{y+(*we{2|4#EGSr-4q!m65A9pmPun9Ol^i8%c8Iij%ow93W&WzC|Qb3gW7m9 zfoLUAnb`alk!51hEuyzdk$sgIvjkp>PpWU&`iBJ!wCX0zX}Z!ey= z7LpMr0lnhM4fL0Fw zv!InbMUs|9R(49xT${lw(I2JIwP zA>Ke-e{TF-t*l(wd*C0;Cig0Up+QF8`XXbY@``naAEV}@t)nsM_xrKM6+tVx>zFz% z>XKC&H2|D~4ge*!sO|90cVZ zoup0hpNWByZvKn1?Zx_+f&Pqh^^#GZMNqw{f2MVjdU8)@0QGt&4gUTV{CszJ1NdDA zfGp_>6U*dj!xG{smbbd&InH`&MB&D@>8gfZzs6s)xTz1`e2&~0F(=Ha@V5#!{zN~m z3BqR`wf}Z78V1+NBnk*0A4K2wA#A}-U2)FYt8=I=kz(5XUP*lRudhuy5jDrn_7imd ze+7r17dPKDSMbZs_!Bk9ot_$|Z~snd6F=vfkWXlp|Mif&1{(dkSXSt2_D=CIVk{=0 zfQg)r?RZoc)3ftD41B1;`5YNm%4^!(msZf=ah8wZzr#-D=Kp$epbGJSy#)TR*FDbv zJ4tcph@c&w8~zucQxXe{T=1X7W)Y7>&1a8 z#QzOs|9_{e9^=34Bvr@%#0B@@mi^VyKRr1Plz;b`gz@R6h+|5H4-ev#n@Y-mtvFBx z_@AyiRAu~6=P3WXNj3042d)Uf!J&VI*?%A4A6ZWc*q`{TROpYu{9z)0fE4D*vgU<>@z#@FQ2dNF{X_=OtscOuc72gE5u^@tXV(sm#!uLCahJb0mvaWScm zs308xtR-vtBr>L?luR_F3=kh$!K~qANlp+}`lc1OcqLd;k7faAh-cDYMu3Su_ zyMGu^hObWKYm1{JPInuFBTjKUV+w-}QZNLX1V(6rW#ZjV&=# ze6x@y?vX-?tC>GMgcAzQCmmCm4sx-939>X4y6j`Sp5vA8uPw>;f5TcJOyw~8tM)B$ zMfksdUylE%4m!v4|2s*Wf8hV3k-;%bxhOz6^Im)b8CbwH-hP?<{g=u8Pq){)VSYh%hI>WLPMHB1}XbkVEuc-(Fl^P42E! zP>VSq6w6ip=C-kmHIsYcy14 z|9_|7J#Yf@3a0S22JeRg(M|c#2 zGO`z`@PMd7Dd>Q*e+Y%N!Lk_`Abr@qMo54#k}4tsQc7;>?T$!oiU-J`P@kdA&;aS> z>vL1v^`1-W#XtedJMyyx8Ps;?hm9RDmO|8?$u_^!^|LygU^1q8z`TmET zRpfzMe-HO2e~5i|erfrybNai){SUpqEdL|*IREb?RX_jzg8V+=5<=WtwETnK;#NXD z>McG`7#c+Lt1H?{(hi2Fx-*zEIuFjKpX~d@xGet+HNk(@#(f2;K>j;wSBn4884i#0 z|8CMI_%CsEq)R``u@{lgKzfA?ad?*x;CiRN;{Y!He>4j0c7AyIBNR~KV|w51Kcr#w&=z+b>cPv9@0c?7g{&}=n9YYsYxb2Zg5?I7jp|GIXc zAQi6vf8_iBI>XMOd({8CNOAiQ$4oxA?I+ZI;&hU0^NIMXV(-Z;S<6qMY| z#^X0wCBsh1lqdgn_kBSslK=ilvj28QYX7+Z+exav{|lw}kd}QFqke@8KM-yP-}#%q z_*RfVP21eDy6(I8>Ze@!uNCzxN(J&i91Z)jfBcUI$Nk?80&r8Jw&lfb zf6Iv6mX7yILLqa3km-hJp0)y7)Zl>w6|-TADOIdq!7`x4+}h>VEw^T=l9>)f%!eV$ zCG!WiG$3X8VG8u{T{n825m+at4%5Td$Z>Zx7~6E2_5#P7&JUVH7f6{oUjY`9$GF)n zo=Zk^A49psLb(Lfs<{7?_x~$H*G;ryf2(&l{@=#_;DY^sPaVqle|6Q-(f+rSw2A*W zZB(S&0b)7#Vh_mh2Xn?gMvT4Yi@;*NQ2j12I){EiuHt%@g2O z$Yntr|FkW1_UY~%v@Yg`i42H;t_-02)8h-h2l5yf0^wr6j~W}s~LY~+Kc}0%I}`3e6SZOZ4gv}HkZQA zPeJ^6VYp{eC_efs-ZGnC3@1{_zZ?$O7PvvSmD=EQ+kFfM`&!xX2Dy^N;aVC z*)D55d~MzG6_juh+bQ@N>bC6wR?4sznUt0+-*2}2XjlunXcT&aziW||ei2vP9iks2n)9!QQKoYCNwB=RiW7;~;xO?dDWmT-;zpzaRS`duQF>G0M4a5Fc#<3{+hJ@od`UKq z?Qm5a<55WN)!qkdrf|$Le0A?kx=z13`ROd3Rm?vrRke<@G?>)!hkqyqbYR~>ZZ^Pj{1(f+@alvrHS-JNFIo<8HKpoHtc z+AT4mCO9M|0S?e9z;@Ly=`I*G$2UMLQ{x_(aAa(1_YViw>$LZ?u~OO2A1k%F!J3lU z+^(M}U5}AX?f7!pO}PjTcW6tbdnR%vV_58Y`mqqHWX?vnf4~YZjCrsH>$hdt6|LU1 zP1CI1@jDPwyAk&mkf6_StsskP7ukjzS*t*^{a{#ayllP^Gc;QolAg3Z?6SPNtvw>Q zg)HK(9ow*of|tC#fd5s1drAEj@#M?r)Y4gTR;PcbTE>$mlce1K>A7gXwPh^SsKP?S z`>nu2!^!>bRGf3+!625ozx;rmClR({8})hshc zOHZAxisksR*k8~(v&xg-X2O`bzkKG~oGN!X{ER0-B`y;eGHukDA=kN$;*YVzm1p=F zb013BKIK~{`8?0dNY&(fL=qL@P7L3!#QlnGN+*$zY0@-hOP9#BA%4EQyNSO`bwo;z zM9I%6f4wbmQWkh20hmL>^jwscA=eF^)neK8O>a&5ku`f;woOypt*6#$xMA&v>lLoY zHuZJJ%f3V(r|g|9S~79vAcqMEHAY#bA~LdXL*+3&OUkqV?=k*!w?91E|96q(^M6zo zJpZ{r-&Q56u!3`b0bkY5_vMr-IM)}JtbCp?f4AhO=lEEI?IQlODF1cu{R&cn{C7KD z+5a~j4UYc*outb5e??bbq^=vjePgT8q(5be%$0(d?WJu$j)CK%mSJH6O|w8p9L9BF zU%w^|xwPVZ?|lCl?h|DLO4i0!C>UN0#+O{8c`}un3oU(OI!k!vtw2XjmiKi;7SFu1 ze-b=L_LBU~csZUWYB8Ssc|2D!&WJXY6sCo83yto5{|DQa{OMNyw=>Ku6-_E}14Rm} zX+={mjH|@3Y{E#|0&*FNikD*KxKDVIDS!Uo&HWF$P+tFcRke4F|Fe_iuOTd( z)W851M+!JVl>z<}K!8;NcTyw(|7kUp-$9)GKOz8+2*8~n0E0zA?UVZ%WM1Zp{d8D) z@hS20O;z=Pc)io>&vlv|{OW2GwJW@6qDIHl; z4vCb7naM)sl)%!+p$>8{RVjaON-FwD6`MX2e3afm*}$VJu%q+_Jltj~xXFc!QmLC< zM8$s~z@dFz$db`&#|v3v7qSGiw&+3GvHeH3|M@%77UWye#Dh%?fkpQJf03Gq|2^y+ z&;RZu`GN&4JshcVV?=-i`av`i1|pO&Tl|L?Kc0j&^;n|W# z#}pHzCD~kd?Y|IIe=D;w=ALPajBY_|$nqavToe6OI}S*Z{P%jQZ2up0j`*LQq)p;~ z$Ri_N$iiHE5vYB)>q|*xf8@U|4!CgsPsIOL)$Y;%x04iijtJM5Ju?P4rX6Ipl8Xh7 z^H>EBTv##}6D*akhzl-JdNXXW(2$$pgUiT&T^vxc{10XMA9V&t`QJsVj{k{C?x9Wl zWpF?VH#|f12!8nZ<&BX&Q&^aP{}?+N8bXB_EhT0=6}^%IS}28xe`^z4vrU0e@F;<@ zOh*}ojF<2KQu1FD2UH;cqi$cm|EDwTc8~JEi$sT-W$TFh+fs!f>5;382RdjK0uBxr z6m`XRu|WdVC)VVtaG#9vu<>H08ct|47?3oOULzD}mjS3U7sOSONGT;ZMV3UQHbo?5 zP^iz)X2_)U^7Xl?e~k*tCG}!ZO3x3piPnh;^#f|-JVKI{VzWhESMfHIsNfcF_$Wd2 z_1!{}hP{w57TwO)X3@f964xwrIKGy;*3HwDOfl zMov7ngd$1DA%GMtLbQ*2m8b-e8x$pZ0Yds^4tWlZD8;UPPzM7BJ=qKvk<*b!XhaMe zAx?Dr-Xp)}#O*)I5}7MwVc9NvhHn(ve-rmVce;b_(f_-XbP8@DA;`5bAU5Db0DN8| z3p{v+sThNkgbRd~lg25yTN)T(&*7F)yhNr6sMg?ne#2V40WLBjF`f`Z4GPbp zrBezPS}^4fesEkgH@+Ypd^X4u{GT5caBZ1uU|XyxWeQLQU>X)uP8!O^?0!aU7f~YT z_G)EY;MemR&j6H}Uu4Dpvt2qx{O$kIa=${?ussYeFQ$|WKl1EJLosv&+kPR}{{5t( zJYmh&QTwob(_H>!y0^mYvhi?HdGEvx{H&4(VfxOjMfuhj%_34TPzjHzuK4MKlBFO{!#vS qkr)Ko_n1ZpzQcRsUfOUzreiv$V>+gi>Hh}+0RR87n)lWKbO8W*i~;`u delta 7577 zcmV;K9cJQ)N{vd8tA9?nKNxxWa#fEK- z!Be*Z9Vh%(RXQU@ZRiMVuHg{&>?hZTx@NDyHn8ov8e-YX(I#sLjRABV)6gL0zws2*t)r+)r`Onb>+e5t`G10@hwyVLfCBj+ z^?Myz{s)86QT}(4P6g@31Zs~!v#q(Y@LVP_pamul)RqWb(1CK&I0bi0!xwa5V4x#x zEG(o0VuJ?+bbsWS_8RE`VgSL+d*B)EIUq|!ON$BwT%adp+75DkO>)wpS>BuW12h32 zlP8S@`*(cO0Kj3nZjobSgV^qR3^YguzRg~Gra42Ji^v!}_+M$!xAf&H{XVAr&7o%! z%I#{6|1beYgc#NW1NdM+p*KKVLTiD5F{kZdA&tJIxqqPr&=-PS3z|TO1U^8F6v{0| z#B(mt%D(WQjsbB!L_ZqjyJLEYeNTM+vyDm0W7-sB(Ceu~@#!awX0s1T+PCNr&v5y> zIW#en3b|Z^LVaae;w!(U=p*bs=r+~EH!hkRU&cU3Pc6sq5CBZHfZCceOG#njGyF|Z z@2l9`(|@Qw5aZ9btB=9Rglpu|PM+JYhHeobEn%6HhOvSR#F+ZiwjU94kUJLs94IP% z_u$%(^aayh!9&fqUEQ!CvE?@_L)T5Tf)-pPO05jbu*d!{|Jl;O#C8o0no{ORIDdp= z|Cj&FuoejOxiS2+g^~LduzS*Q=%j-QvNT>bN`F15X8dad^}WHL`h4}n2mZG^;RB(8 z_(R&}Gvq!Q8UhndvptJ|x$Sbn1(?6VCk_8EKMUhRa}gxrz&+)&Fr~=Zpjn_tmOjUr z4V^1Cu2_Z^f5P9Mf{91$)&g0`g#_t-7FwPQBGfd5@%$+J8Xx3*u$KgQq{eHvJSEMUQCBi!3zy;s3#Ov8L{;M&HlrRU9VJi59E0B` zw^v+u>gbDKfT~6459@F|l ze!o$nZj@r^-H!O#(}?eGZ^TCnx|+k5@1uf@&?N??Do<&A-5@U=%hq3WJi7c-SC!-- zD3vVMQ3fTOiLXa@AlaE!91Yaxtm3{m<~vH<{zK5pF(E;?eRX{|ohjrC+2S{f?7!-0 zAlZNVYF9nle|C`~>ko7hFq0q#E&{rpvrq>30s`1OlS&D`0u7I|3JN;|e+S3?|1Q!d z{=ek7NH+pVM+6VW6DX)xfx~Q%-}8G3KVDv4Uf+MZ{lKHHL>z zoGQnsL?_UFdKZ(s$xoBn^#1OjH@w0w4-=t>sHnMNn!u1SL^38S0}{mYiZw_DizNbM zNW4YODs^uwIsb_vGlDM)e*mo%nmOeq&Z8MLBop>tw3ClRs1&IK!;+t7(|Z<+Bbx^v z$s>!v?eu>?UEUTFiNb!!gl<1wUfhS|!Vw?0Nko7@xh6#pYf)kZuQf9zc@|wFDvoPA z$R!3{X#LgV!Wy%LobgE~p&oc9$AkvkcF;B7S#W+B05Olq1zYj3f2Hf$&0SBOW#!}R z)BHRTUq2z&v|U~CgA$wt0apsL+x{Q3SQUe(A_4!@yW)D5gW=BlX9j^t>OZ-(%!Px< zoL0evlqj1E3`vx)hz==Lelv(jtWnG0M9RuPk1_Nt`#*Isl;ywE?;PcSCn*d6!2@~~ zZ2qFSUx&B(<4(zI2mV3VLSZGumHKVCIxgHE1(Ed1Zjr+Le}938VINtVw9MXjw}+{` z{BMo~E0X`Anvnm&@EHGLC#gFAOAh>WaFSmg3D$`r!Lnv*+l|cl5=N|(GDoMi#o+

    *B7$EKje%Gc&|yXC5@*hX)Kb{e{m4o?NH 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%0A)U;*6`n| zN)HigG2=mMtPNijixqOoChk{7#R$N#(R$`)Wx#+2i8H26YZvAEX4z4>TH((FNC-mZ zP#lO$D6(^-rmW8Y9Uj>ARL&{lM(|FQ0f7JgH(`noDPab-zP>Mub0f?f-`5BEY#rv) z6TJosy3C_kL{`sFxD@PO>SjTBcsS1oM=^;4IDtdg>j#$OCeqYKEX>6=VU zHV+{?iVnly6*jeotCZzGM#d00cIrI(f9g&4n7CsN#h>GJ8H)dTI5n|qr@zSm?_ZtZ zzg*Q(sOZpx>yH5BYUAb2&TnuE;W(ec`7H9G2X!HCrM=O7_qkEZ*^(2tZv6aBE_t0y z>5A^6%gmYiMa9pc>AOeZr3M~p{DYCx(oXcz$qPSa_;F8>_s{Q35iFta6Rh@$gNbfU zOot@A=4{726HmbKFcSP^Ed#l5yOK^I1vB7*e0f)$d9Gz!j8DO{M$ut9qhV2zB zo*8x&2}1^<;yj>xnKtKmd`T}Kw^E<3j~6VzzTS(KGQc6Uo%k7dvFcYKsSo^b=zs&D zDpLXgo*yM>spm93L!9EG%??)+svOUF$QvAStEi)tH01`9O3O3MG4T`Irt?8YuIypS!>?hO*CN;Qy+4O(xhC&V}vBiPLt5AX{o{1_O2n5>sMUkSI1r$&O z0Jc~Qhd;Gs-E3r)oT)sac$%%AuO>L^YbZdF#L4Bawh#!!CxQ_ur~sZSDvC0KIi5F^ zR^Dh58|-c>th{>p@}PhMuR@RH4bDT!xCFVQtbTl>PeZA-EU7YkP1eKg{OOWM}B|zx(;b!VNL$`8Pix6R@r6*-m3Vo^+>TZZ! zkg9_y0+g4bBH#m^q1yBwRemeQ!waX*DsFS_eqJ04n(xsgW!rVb z9^)R&imdg<{ZTBY3W>4_5+cnto_6L`yb`3N=jgv6Gk>N&@=H^ zJy^X+7CZO(P!?-zHW-`3nk*U309%qhon5-&VBNZeNeZ^>uSq`Kr%ta9c}t(~3oD0^ zNoQBi{_a3FuXcql&Kgta^OC%TMr&*9J4ztwfCpiAsvCpK3IW(We&VmycC>)D^Ybb@ zoSq3+m5lfDOB04@Tq>AD@(+TLJ#yxWW#Y2etxX51-An%J?`a+9N6h%cJdb7)YXMti ztc|P((v`ehI1%=&;Un+g+&%g>ET9ct)UrHZPefKFg&Q1yClsgbj$w}RDI!t1J08~~ zV=E!HF-2d>9ed>UH8vOJ{heppTB6D~w!LaSFKX;(Yl|2=H>01xO#Hk<&S%R^)u%lK zxQv7L{!vG_tE%o4N^!+>%8jsQSHGW)U97XpPd~Ph?RBlJ;sQ2@QOm`_qA7FYqvHD3apd%Nh<-#qHOM&3z2z_b z?D1NZuxMS;P=?G0GfGTp1dFQJds&~|zQ5x=u~i0Aq^Ta-*x<`;GUr@-hOEI(xK|{HTsmy)ED0Wwx(Xmed%NQO1;Q|A)$bfR=$em!$cGn zNQwyw-4Mn~Q8Pc>)Ka-iB8{HCJREBl{-isYUocs2cj8t88tjyaYMB&;H?ZCagg z9djiUoxs5XpilXA5>DJ%WcYYR&NnKu3wU3+uq35O>KFcGw+bR~%Z;l8E33zCEHo1k z^uiuQego2coAUnwbsVtFdpPNYBd38Rl9O$N?hfa&nu0hCU9>x}-N74bhOsW4pDis< z1vjaX5x^py^HB$zJ#CMz>Yf(W{-46hL<+Y7@CJ-&AYxH}$f1OdG{J(xhED{DaR&NoV+R z#uUj}slCLN1ccj9#hE()fd}!1#FN-hp9ZN4&|+JE+>o23;C#(Vxh;RNoWQeZyBRaV z?WT+(p1(-zWnuzX0j1!x(zwwL^@t2;XZzDllBZsfDQ#XCzZ_hUqN zH%!=Zp$obFaVCL#3%v+Q!{g0kjGbwpRu=*hgOLVO{P+KBN|pQM1i@J5t1%3xDY?+) zx;a0=2EHYFJ*fA1la*xLcTRPLu`*@LJqM~vwh7G4fYe&2zcAn@KDFpy!T6IU2y{l? zxxeIFERU4S;d-*LOTCSx!X;dhQ6t~mT2o{gT0oB+v{UbbXBGL~vQF;MlAz|mDcB~S zU1}1EK)zVfbWnhhpg!lIlsLGdm3jdzRg_t$oQi(XE_hYl|1`c3%)06%%`_NH#v_M4M?XT&w~Lz#3dA61g-*jQwE~G* zbB%7Mb@d~ko+Z|U#~!Wgn*3SuRqPi}f<`ks-=sy>iid;&jVm|x? zR8yW0f5WBSfAW(ws>8>#?`huFoy~U}j0N7ni!nP}HjAXZ3?sBLI~-<)p0- z{pgY?06v&B9h~OIjRp?%G7hI}2NHM993z~~ZPkB%D5jM>KeY=9V|q#s@(2|vG4j;H z^ZRC%wFp)$wj2>+G16d8U=XtLOQmunsj5bG+I7erKM#O-WR5g7&y`*-#;Eao@YMRG z82SE}h?S;|@(Mk$2(xt}t>{Pn6wnRm__5HqsNJU{=Fcjy)V?=XqnMg?M@ghXcXeli)0q`G?Q(ujoyrGr*Sxa){ zMb9zNO3XZCH`(CPVy(aHObgxgd9z>xV7gTuij`pk=n5U|B?a?2OpXl`VK8aSj8HZq z6zIeBSgARYf2V~ zv%aN_D{l|vtRU<4L@^EFW#xZRexVtz$q#^)L*Bgk`;*#5Gdi^QxMy#kHu#F(F!Zx8 z&)31Y6AI8T%rn4q?+hu8VmEvDj($F9JO_4e!ElcG_3D@P;LhSrix~1w*@i;Ep8I?w z7Q`Xp6%Z47=ItF4a+>z$U>A+@n93ebW;-Qf zhlZs7_0x4wv1}%B+I3l0Iq%m?G9g)fm<4S(1_g(O*!{F4o-}X+!Z=G>r<&D` zjH;~RC<|a4Do1Za)T(;4ukOG1)D|;R zLCRi>{!Jy5!lu&hG7iIuM@l(J(?yAk?;zB;LSa4Vwh62z$X$Y|CdY;un&XM2tgTes zXg|~Y*b0KLuC89A7sQUy;=b!W?IxdYGoMxZ@J>UYdCcT>rIs3U2nz7Wh<=qoXjx~6 zT>KlG1MY;b+?#DPECTK41Ikh=qG#A<9C0$xRjJyId^;8|8{qSx-347UyPIN?)X{_< z-`)K~O-Q^#hzRIpY&;`2H_xrV1EUfAA{Ubuh#PESJ9`g{<$*hrOcPh;^v+H!ifg04 zi(Q%D&6@vjv)(OGY){xi?{^0*Fwo!sR-yTzm^+uGWA9zoohri||F_mtGr7MGHVJ$F zPvqal&7sMI4Nd_fR>YoEbeYj+6&KmFJvaqEF8_FmEYfGEjE(RZvVic9l+LZ=nJuN- z`5bSt(5kQ}xz}I+b{ogFg&4k13r&@N@M1q%oN9jLIQ&-YHpu6PYFrMrBd0-pny%%S5dp0tzoB5*8jB!rZjctnK287k%8~_J_9ka zR!Si??~Ix}yGO}p|IVz?tj{vHZqID|>4HNW;=4q;1KpGn^Q)H|&guTZW6UhZD8p^Q za4t~~q`AMXi1Kq>?_}2t4t%!z`GNXU$ef9h5*9Yp6NBv$>z2RXJ`tdkLPytlY_-qp+Qf&@-d(~L3- zKy~UXy1)~Am}U6)=9{3>JbKod{^Se75|p?rVQMxgwl~Pc$H=nqL|#8(g0~C4?X&&W zq_?-XK~Yh$ug!JXWm!>9<~^_6K)7L%4T;zGV_h9SnNQ2f#w9ieDTCzk`SsH3alb6< z)bIYdFg`xfW*$ITTfi6ELC!`k@z2HGq9DbZCqDm?FCG)f9AN-VFt3;^j5sC7)mv@g z5h2I0rlxDX&F@m0}C!>@E8XDdRYIKmLMI5@CQQ+X&|0i)v`sADqFdKq^Cvqh7_id1!^(u z4Q|ucK5+FlLA@O1!OE#$7qe~rc{<;cpv1&hEIjasV$jLSES7%FC9gj>%X7fJIzE8sQyqRtl^_t}7E5`T|Dp3+ zcU4`!Nu7S`WSEE*lBzw-Qg7U$3AtE)+5W|@R+=n9ySWZDAs^nqi{U{Q$bRtIsS_ly z{u@UjIn&Fs=l=^xvY~b)#qt2iFIP?rc^^u+^`mVp2=F$rK548_tJ8_-=DCX#fcc;7 zveq}OCd-mhB(htW(09?f=SNGtSv;JHtWVjKNk`+E=2AJPOd_Y=o1>pp_-o_&+1den z8RQ^UA6p3*BtM8J4CswReW3Y?<}e|LB+DP-bs{q?rXwI($`_oR&%ZjYk{IvVa}zw# z0PGxeEBF3s+VUQtJjc&+(PQM{GBk_5A6 zdbS;cKk8Th&o%bb+hcGG|iL?qE09!R6DKu9-Y6 zPvZ@4(-FtFH;u)%L#>hhkVTcdKPV5GXj__F?&#JLxRgUv14_qZMg6wmp?^+o!nV_> zp7)r;)>%tRcZfTAL5M0B#cwXQ212ZqtE0~ULV-hTi)DJfoT={mo)|R>nX$spD=5Zo zMew(NzFHsqv7n$yG3!EWsQ2!-t@dIUR$Z}UW8wV#c~ohKTDf44x|E0u zTPID!EcIs9_8Qn;T_-P28)Gb9P|r6z+Y9ft&;^-dSa>;kgOSntq0QLp;XVk*r6qLZ z#tosi{e#a89OeW251Kd5x^u!@jV&z|M@w~md=ALS&{joa>uBW-kA0oPw*spM*sZoZ zHrJLb3NK`yWakQ&c0s-J=BewReH5X;xEMt)$uWeTEAllD*XBVW*+2mwkpOc^|E-ZF zC^y5Yla<+AY%42aP&p%&aUy`N{1OB2h0t zA4ADInkA7mLa49%jH0+dA5^lbjblIE=)o>zO!2?<-Co~O$>w6r+4V;c40|*#7MK|a&5<$1r1j$Tunj`d%-%`~Tgylm?)PP3g-|YH zD>~fjWw6eeV(v>iU3ee(anj zQg5x>+@>oNkp8oy{pVhs8rI6*Cx>mhi<0RX9^a0pw@J?C8%&ut1_opGlrLf!X^u4j z$6l+lEMdh)0mrqw+P>e7R|jOOeVO!(=)ZwA;$;Zjw;1#9IhtB5-L>EB33HBa0|6diRE%yRkh8b zxt7)wI%lujDh;S#&KJ;G<^}&92pFwXlMN8#G?rZg>VC-(HfonyNcinwBW#^nLODnj zjG*U|4|YVo6~Z5KfxXCabaXd$S&ua|N|mVNYnHARmjyWr>0YFd@2JXib$_zag8|5K z$<@fiKlK0Pvgc!UxJp5IjoD!n{t_CKezI`7A1^kecjEt_cNpU&uA)fG9W>YGqkKIn zYzY$~L!&LP0s|Fj4NL`Y0)BWhxk?4i@AG2JZ5SC~`^H~}LnKQZJ%}e7hDDi3u+OT} zHRfWrB8TLevA+bwb}NgY4>0Qu=H=ukIbLRSy6|Mz@lDBQ*|b|GZxenmB0x=U6tdr> z1dKJz)RNQJH%6fCp7WPtHIk~^5~KV6w<&}i6NMduo%=8U^YPo?jrQAPVyt4GV%R3e zk#ma&oh=4_x-=z9uZ7RVDwoU~*G4AYf%e~!0{v{3=K<-uUW;nJiqv<~d>i-PAi@qoM|2Y5T>hR^tNXw0)Ss z=)ZHHm9V)q9k~bP0U&&Bfpn0;8-i(Dr>umb6AS6$_GlN+$&IV)(qJ5%U@%qUq$Z*; zvjnGn>$V9!Q2lSp#;>y3vLxWwN6QrEg(^LbBkF9AkPA^l4~yUiA5@dxqR>$il}RGy zlSX4b8Uk|?JJ$2G@V$l$=>s@GY&UIe!DcaZzR|-+LxUA(t!M4PebTbuo=HoICc`cp z_`iN-(eP-rv4%TC9h}g<&m(3 zt~MDmYHbWdaBJpm{%^9>>hnkbFXd3%zFGeXM%K3*wk`?vnK_F*uRrFo_>{Ymq5{y+ zetJW;Cfi+%B?@B2IlqA`i*P-A0+}6y>yWRTyWMvbxOe|Pmqory%aZ`>4|^3lgTJTC z38k-Bj^@3P;lRLhh^W^@2lGKj-(IGe$4t@S)ye7e^b8rVqKog9xw*o09$?D6YSa++ z!QxvOfLF9~E=h^cb;9FjD44@*5q8|?r3#!sChhnkkNEy{qW_CWcn6b4T_;iFs^7vN z@1c_JEQtNqA5BE8tgK{9fMVGdq$MBa1q^i}cY3v0GP1Kce93y4fTjwBsNr&6V`QOga2$xKNF- zxYx{uZ^@Zv3a?h2qqZ9Hy}-Rida{t6YMS}23hkER<=|J=EDZFBpnYXcEa?2l*! z0xMK#IG_IlQeCGGXPh+OX-6<6kNX4bn>`KN13_VCb*RDa_dpgs&j(T-MsJ#)f=c5a zgLN!!+t_TKmJi13O<_p{*WO9jbwQolGswcHja~j}?rw#kGJ&3Q5(%Iursu^|M*;x! zkb!5As`XdTZ*4L{e@0%4)~ZOBZMQbN=%t|0!3i-;TxDyROy@TcRAtAHw^?5yib2Te#r2THO*YRIMHOwx|^qaATiQe^AvjClrN9*UlX3UI zC`l~@$Qo^@L#FrKuSk&I{Rh$WfseQHVRcxd@vV{PmDBcT;IqF#|P=IA;D&Ar&NGzI#PKmV-9 zJ?0fE?1yL;<(rcmf1@M`k(^wr9ZPMQiO)07b>A4z+If)i?9oRLzCW3Dv!)(fFZPt7 zFNb1{3JY^20D?dvXII-YC{^g*!DDac+1r=z-?`+;eRlTf4#PG3Ja#s}+3dTW$Z6H>;AKDo0Cx zy}I|U=*?Sa+0R;JEjzQJE%@I*Y~9h>yS5Jc>__50EBCEj>_RhU3Bl_3$>dovy#VzEEn-z-lEITi<;Ho;e3gBi=YEi;7rY{F9W!XI1TnFF(BSlGd_#UI97e9Rc%yt_;ESWc8 zRcX6yw32)0=x1?tVlMI}i#_Lq7jf)>2mLpn@ID)g8@m5i2f^WLcDr3uCrZ4iK_o=% z>MN})++S7OSxp;?;(}iFS^oZ~<(2P$-?CoNPM|DGZoH=H#Z9rrdo-+n4l-{fM18d$Y7G$OdrF z5>Hsd)zWq`>7jMLW9qz(T;%lsfsHKX#ea{DXtl`xEzpQwmDBf(rCfE2(8O;3f3FCQ zHvIpJBCNcxBC#&2-kiD%6i(j?3#peEQC0-h3u?Iv3n#NCU$J1Ss78BZ{9r?I{U;cr zTz&NxGeiYcP?c$)*W>)NEmeW6N8;k!_X%J8dp@I~MGKh1)6Hp8#7k^SR$FB)gPJc&D-2RuIFZhE zykb=1>cmx&SOG6hE0|3|j9Ja77`-?|QA{OG4`i&dswAD9z_G!2Y6XeLmwuhRl}g)) z6(bd2wCc#CK%fT4$O_LrWBCe`$jkS&vlOD$l2uD4CNoe2u?o}4SmA$)P$Y#=P^nW_ zoTG#_UMH!zuD=N)p_qz*Bw0ZM@uh7Lhu6_uv2s2MAQ(zjpa}2ZycveI-f+j4ZrGaE zsS;)Nj%u%4#m9FI2?Ye?(w8eZtB6!YUI}^g@@5g+ppHtz2{ebvmah~E%d1{>qzsJ@ zt0)2GgrXAkdwJGFw5XBoD@8gRHLH$lA#srjkjO;ku!6Khv?yPp;w1E}3K9}fg_0Ce zdH%Cmx9Z3kL9;fFQHUDE;R+C&O+GjswhSgxI!m~3ZTO%RBb5WBlVGbf-ICuGmG)l zU^oi8gRC@Eo(5<|il7(?5DXv+1+#REsDU^)KVJ-hVe_t3#BG&iaijfpV6aZH;OVmo+IDq_okP799j)W{^6jL!%gzk4bWOw-TWl;=t_L2I~j-F0U z(HH;(h*6A!gc6ZMh9XK_hbhDW5(G}$DQ<~4NQHoa8axv!Kvo)LC#M{t5H+r9PXY~! zp&A`#Z8Y56Dj2_FRShY?)nxt&C?n2w$?WSX>Db@Zt?z*R{%-mCPGaC`$I2Baaih55#2JZcdtO-kWX9xG2zF%Xkb zPC&}=M+~zWLaaogTESFdi%L8_#YTl^fuYx{!qBS{7gw+1AD6TA|@*OY>uGy=F%P?}bXD5fH5 zHO*)jTEn~3q8?@TEVHbKQXmV*+Eai^Bk(L?o1!1BTf+?)j=e=)fJXAx3gwjYdiN%Af%{9#6$k9|51jPNY zxR8W|j;Jl#`$YD$!RT4aE*&?HyXrQ zbS5vw{V-tu#NZTUg#*ll7(kR1Bmer7bj|rA-2oqI;8xt92R(pYb?O z2{yKH_79Z?+0sDFX77p369O3n!q}aqA~~+Ja(I#0?lo`A@>aTAV~F+(vQ! zqp<=BY2${%2}ae*1np9g(4ZKr9Zca+h)U>i3S;Tk6Cb%;Miv5(GoP<+*~uUqH6*sO z6a|0N%^5LOpejgGLUaTj4g%s&&2){h&p}oIS?RS|jSzq61XU!mVk1Ef(jX6f;A?5 zPC!fni8!5F&DJ9M5Rhv*lTm9dZZ;(iX1~o@>E&+wo42d2Ia`q_Yl4-)gciJ~rx1f4 zO;hukA>Jf0=A5;%I8Z+1wZHf13{0#FtemCIakQcC}o05 z9?)TE2EQwdJ-UxMyu%C~6KtwZ3cyT6twShUWOC6I+U4QxymF?xg?y;;32)~3+nMB6 z@UcJDxv#wQPU}(rZTcca<4^9Sgf*8S~V9SVo75f8WMB!NkC;jk; zC<$C+?OfStgk()v1?j=A3wxxh@l+3QAElp{0{R3Zo`L@UazCi_OjXK#y;FUZ0X}~6 z03R>UfYbm_PY(`3sS0=O>FXuw>FWy&T{2yN8#KU$S$^x_>e5fj{nbVIr-b<)BI$!j za{5X7ci_GmU%0xt(lt6%sGQRv0j*5D6P{0GLEKWfje-V8Kp|!RFE&(_Mk9l1>)-Gb z#e_fOnEsaUU;rt@4AKw-zm@Ml*!2JH#ecZe@|Ow#*@^%7`UP0TfBZb(?f-l&&+Fg+ z*`0}7QxMRilV(te(dH@>z(+~iJ=G!{#6|LwniMYmS&CYYbGcRw z`i^9Cce#}??ko3;`xb}OVwV5L{W4#liW96x31Au)qNI%F4R9quFaWbrk}EV zwdr;YwLKy+N(z`)jH%#)69Cg`QX%0=gQS%gS4|2cDUgM#)gToDia;=up1KNJB`HuP zbNnO)^oT|c6p*$PXes*Ox(D0d0`QU|y!PO`) zDavAS4EjlsZzT(|lT&1EbB)#HQk(!TFvA46wQU%#mZfa(nP3|bj67?P2wB1SogPS& z@65=WOL*=ZbLgZkfB8ow#k zI70dRnt$h;V_4O)!91G9te9-&$Gzg%%r1(c4OK1=iySSk|(dfYDs6r2Yq1IyufFJ5GtHNmzc`8%vxQ%W31f7OF-_l94tqMbAhx zXqBX^W%Y9NAzy&JubjFD;>saGNi+zCsF)RLE}=ni;VPA)+gwN>ol8 zUx4l+txi$aS>XsHtS*X&O5;rt!q#X>rNHH+hmIaM501zlj)no12*KDNTpD&X3z}8~ zkfe;xivW@h_l1|!f{vH(y_C}`pQXZzsx*X*f_h*AT5L`TxmriNDeO`>L5ukcRkKsv z^bjISO-c~C28vyU;_aKzyBw|+wa}_?`wHpzx^*T=1B^{ z6bPYUPbsq+hUOTMFKImP(CXoaY$eOH$jU!&%AyT{#z8QJasHb%>uU0aYfO;o$Dh?A z3*sfE#o1-7hOl_e=CAXmLT$w=oCdOC6v{{}D=izMSW+vp)aZCvhB`HnV3Gy| zkxt`!g~_>feDkhWPBe72Fx0J&qt#R0Oh%FhWHN^3RN+SvSZ$9VKi0%H89J-wje}=e zgC94OVY3)6s~`>6Mwy>MUtVH>sky`vpV=jWV*u4?bQE)g7h{0Z=BGRjAS8E!hm_Pp zxs>G2G8CRoNSgv=rrfkZInu=RSi|xJir}+^4lxoi$f29X%G##q>fC%r~6A(!koMb|}^Zq~S4j?6$ ziX!kVmEp-KXOpN<8M5DGUFWCuPo*;GQn|xUzUwL8e%7pG| z+^bYlRaWY}wKnd%$M$2#{%4uu<;;J(_J4q-{(l|MYtR1-&(_jPfL1ve z7a(W0^)WVwO|>EvP7-4g?kGg2E+d9`y-k;l&4dJjDj+Q#2^}T}{yxl~s3t+DRHE5H zEU|TUNhkqni;`W_WzeK?=2!j@&SXi|8&PMqsl5(xMx9A?iOCg|IFn-2jMh)4pl^WHc+#&>(hLXUABUM;T0$r9_3DH8it5g)JEc)7gl;wXZKdm8?Ro>M0eX zR^wU1U3CmAl3H3@u-hDQmOKi`9%7-R83d(udvimDH5{WKeH8y=oLk!l2;CL3g2rp-G3`zl`2G|v4l;QWWWiaS~VoF?QEdkVU_ctp*C;~zc4T54Grk8>{ z^1WxPMmn;0iE|-hwVu}OSrDWlnRF*IA%UpPDN53kUwG*AtIlRJ78oa>FY6_eL(k$2>3w)}$$Ei4{qYil@G zO+TAOg@_s{z<1xesbDU3(xJXWLML5t1J8@d9QHb#bjWP|6TcHIuS2k;L%sFmKw<>( zCb|$WFPN(Kr+2#XhFl4I1(Ym^z2Mno+FF@4rZ-(#%p21ht|r;umJsO{qY1_^di&p>081SEyi>|WknFoSGm zGO*Xz3kd}z%y~MUSzy7Y(9DGrf652H-_VLsatBbVlF=p@nV~jNSS$s}s9Ft}bv`9Z zkQ96F52PT$C4_VHQ^5jbQDw&jNSORmqqL-PX1{PfRdKwj00e?5aE*a*EEsk;fdq8L zaWzCRQ&7oikU6o1!fD46ka|rjt|s{|+W~EiURW`6%*KNa;xK}lIXj0$P|h2t$Cov2 z_}CMvOXXtc_Rc2)5{m0!JK}>on^?x=9D^2&TNJ!xHMJ7T!_$f#*5ZTtlThw zwwN5OTy%+40>sM9q1(cBm;&f98Vkc}1kdvPptdKunnot%vatu_@X=(oTL?$ z_woc%j#h@k9K-Nz7{!`V=DJ=-p=wg9f>adLcO!5Ot$7T3o@PWbkeaC{D_4)Y+HAHr zf7PeWhM5v{)51$Q8B@Y)AIfc=9m_C;LKuHgjpOM$Ef8nYCI;_KR3I>DfXgw5t5iXQ z6dZdZXh>*wa%nZf&rzxTt$e5ZL_$~!cS$IJSt3yupg_Sr^R!JgPWkm~OXF}X#m8+SXO z;5-qt;{hOsq^hC9^Z*=wjs^+mnytOmPW(-7e0>dO9%(PeRD-0jEXBX+p*5G#2QU1Je4IG!y4nD`Z$}+kkW=Bn3tbvwz-nA1FN;-2qNJ z6j>$8Q0=_Y;S}N-ibM5rzk|jB@rO~r8@IUIk3Oi*3%A59D zE9tG-wH5i%Hw38+H=2tDFJG-SVwUVHY|X`n9U{DygG1S-5n`_6rKZDd3CFa6HGOU^ z$V^)gnFf#+^WXH7{oR&XT;u=&S^{RGxQ?{+L=d4%OIBpEvnB0K_BS?rE6LsVn49md z86Q_I4_g}3|B-Y2U-YrJ{!ifqqJppV{0}eh0B?)+e}Auc>;JFgc~j@V3eR6kV3`as zd%mp-JdO+HbOGbWW5e;>a%g=uPEf#juw?leab`^!V=deV21jP$M*v)E@==&M$DJT& zzM{h&7-vz<y zEpmHxSr@=MW;T2CUzWCS-(yGq8#h+Hga)u9|GoYE%=UkHdwRaR|K;^OZ$SQI3P>12 z`|QezVV%T~ccXs;q9wd%& z63K~sv9rcoNT zBSSk0J?)skDl{|rP4d9%E_quF>}C6t>7l+AWoQl!MSetJmxzaBnY|H$KhOkbYjJ`Cv;^S+g^!ORyXCt9mU8P!74 ze=t|X(e5wTVL=UMy)6_WVKeA3$#2hR`{;3C(zZx2+N`fL-~M0#_^kG4s>7 z2xt?EjZ{s_Xo)k6RGe04N6_xbm76DF$ev_>RceY^05(Q_>E3WzBZ3i>icQxCtS@~q zT8)ZL9ZY|4GFzuNGc$}WS)}j^;7F`wJZRZncm&KuA-ge;7M%pQ)`TlTduOse7v~2k z26&Upsr=LivxN;8eu>10j46i*J_MDwWMNp@$fU>5nCj!infsFbd{EBX2D{wF(@>C+ zWwPJ}aDpqzttc>4h{*s}0}RI`TM%O00nCZUwO6wXaLYa9}q z2Ic9bP6H5uC&UepnD>%scL)J)Y-Wg?aec{!y&ydr(Yo__@k*RvZZJYIpv6tj(R2qe zo2C=L*^@uD2)K|C0!Obvp8$VX`xb?qLpYJc)<9PlW3dN&i?{~SGHbz=6>65?4Ge>` zB8f-Kg+Jt-6Ht5&X;*}VakLa++%8w4emA%&oHv4NP>KaC79Nl+PDe3DuW}?38$Fgh zK&Bzye*W~3{WrXqchAc{cKp9AgrH~W%ejDd*Z;gM*8lu{-ktyXTAtVL|0S~=1&~x+ zM{yT^6S!KuCA6SLRfB!|SuM8Y2$JmXt%=SFnHxP5Qfdt84Ld@)@U=A3RaIHw_RwROw!m#Q)74ycQ^5wrEh1X-C z93e>rQxHgHm4UtZpO?4U`48US-U098f3M|v?ed??p@txoXD8#y_{J;a5rUCz?0x*@ zX1-dk$_yX9G_8Yz}gV+ zA|)KQY`c7ZzO`+7Qp4s%V@v$82?%MdixV_irTm^g8QWi*I2lXk}&glUQ`u=4KKr%qzBs zm@)8a`OW&y5Mv6JeHp-E8Of(75?P7a>Uge5F2*UmYAjx7*G^&jQJ)iBTRN~nV+-3FL0P; zqLl}-!hou3;JKM=>`LXvo|kUc2fgBh!NaM*CYfBt2 zOLu;g2s_@DqPb8N@D_x@R^YA$dh2JOuoHI1+454&HW_8kI9FVyiorB`l%7 zr7p4gDA{z2O$yp}jX55X&_i6s-mwV=roCa16f(+-9CTvAa5gT-5^QY}-uQ2VgRA8R zr>YJ@@RYVBa+QW5%=cRfyU$)AER;TC!CVlRLj)U>$~N~|DPI95G}d|rWU_`+`4szK z3FK5n16ElqrwWaMis1bM!5ki}6?iWa$f+QhDh}iDov6gPzhDT*7L=C^;P7DI^6-sN zoK|LznHY7iFnIF{r<+L^US^&NHBx0JmW_H<9GIi$ZzV?7XlDN>N7abFoe>pENoyk} zeE*_hxXQ$Ta7=|)ef-DE)6ds@|F2hopZ~k~&+B;JVEl(>r?9T=2&n2*^+6zxSKpo> zkg&J5BS9?MFBuCGHuZ`ELYCyMTtJAcUnKz{Q&=_vLgj~XOhMQPYX)cp^H#n=kMN%k_W8sOLu#xV!*nReL>mscN?Gt+2qRZNbA zR0TqEMzLfs7{`^Y0MoPOB_yOIhHFKtFapOR@-FsPQDdX(VsDJ`m0BfkV+HVjk(dAn z_P-r_<2q4^aevX+n++&08++rxzU8sE3P)&cSsAgJ}GbG=L?=UWw3dc&DsECasF^LjI}Cc8SX>LN{5rTFdR{30F}1N6Tg zV`92c;n9B4_>xr^FB@HAfWGCir3wczY@2ScGKBGJrq@eHF4%eXAJ6BqZbtv-Mzi7} zLW4AXRe4-5`cxwRqs2)|MZn4jf$Zdec?DR+f4u$P?f-i{&zpAtHl!X(%srzwAS$r9JOW-kR0GiquruyuoOSWihLiwe99x7Psx!TA3SFbi|A$7N+49jzWTgtP~dt zN6|QXrf~!-O_+~IImE7PK%rdbtk4L&+VDd8J$su14KHRsE1(=zK*Ob=kVcHwh}>my z9G>OrJWFQNkxAYAHcG0`_D%MFF!bP|M`%duzP+#$rwOHE87`5%%E;6dg+_ z_AaXmNkf|qYTk(bgjwsJGJkTti}{!eaIqdkay9KvIsUZGHYy9aibGX`E>@CbUMy%; z4xpEeTnPv3?G9h@!43oLT!H}wT4=UWFS0X)(MUxB*qV^>SV=G%u&2sn_ z25lf2vNp2?^CA4PKT*wdQm8)$0xDxSSrsylk|MU0t^f%A{ z^Y!(87yo@7Pu0YKUnl?^PxI5O+5XG2>RS{0Wzex5_GLc5T*Q}c;nf6tEr?mMuq<1x zVi8%J33nzy(xIM|YMHWTfS4;M5CYAC3htsKyTAlhq?!EXNX+F|wqw}*4azRYhg_S63tt%sg0ZJqye-Nl<~3!r)`2NM#5i+9#5* zXobmRf@Km3Lv&PH<;Rm_Vf#4hNElZsG~bG7zTm1#BZXcjlhB0Pwj-#9zSH>gO>=gi zX~<5He`dyQ<>bx@OWKZYn~GqY4Oco(PT2Z?KX7d?48;oA@^rOzrBJ!xlXVy`>6x)W z-^!2^tMS;&LwQGx?R|wQ%|v84#rX<-tSYlYY^#0S!_3wZj#>GnXK$x8timw#X7Fbq zwkLUtlB_+)3vhN$0vFC^0Kq}P%h$ESBVpC-cnSWu3QrL15^5e^sGF)UmrB@NuB5K(xVV^`e1=<|nO9<4zP=%u zfisaLo}QeUY@;==s%_27&{{=IK3kR^d(X91+F0v?<(=1N!vM4bWzYB0dXOVAjl0L3 z!g))C!5UL>pioR;p)mI(o9uQpI(s(aDMquxW<14uyChIS3=#+h6&@AeX31UqZ?Ao} z7}qxr83jTi)|;@M_fP@5-l(eBE5fCQ=$MJaWS@K3JGIT2$jHM|!$8~gi==F~t=uPG zG4s~IW!$}Y< zpnrluGTlQhLbH_Yp`Jy-T8)uxY&6TW4&38-?qY{gSaVM$R==`|yn=l1$ zELXcTE!Mf6G7-a$QF=OXs?4N_3R0muf`FJYs3;bj2W}8dVUQf0#4wAW@GaS*8dE6| z563clBZM$X(gqqv9|j~E-DNpjgk^16Kdc|dXCpe3{V*$@4%;}3IX!Y51*EPv61_|# z04(_S&SZN_v1YiS8Br)edx?ZLi)eQ%$cZk_NdX!Q1XD<9FU-gq#?cqN;|XX%iI??j ztl9t4G^o~~DhwxJmDree?0-)`Z!`Pf%g;N&`h3sREa$Lqdw;9;s~mZ1Z%J zOuKR%BXKnp(Y*kM_Vqxgr43C(F$O(Ei}vQ5&-4cLMBw>T7bbUZdibhwv1V( zuwVmMURMAOf*~qMNJS#kQ8j6R5&V6lbg2;0YDpusbncB*0W&>V&QUyEZI zS@6tHTnQKk4Q1h@7?7)VBn1hYgL>k4I*l%c(=7sAM*u`?NS(Cx3q&v&}Owd9(il_mKX>}AJKo~Pa0AF0-PNFnW+QU-g za@y+>0RXcRjaCh1z%Z{wBEkH#(^R~nBs0t`e0m-TA#=p{z*H!fEfP_P${tu24uzSnzR%iiTA##-wT=qRv9} zWP93CGT=eetUVKAr`o%->s7ReKo^fx#^6*O0ZE8a?OA--m44EQ5JC`$UIYM2K{ozS zKBm0;tkwgPM;c>+(41*NpKAxW829)fq(M@Uu2PXm0aJAXa;LJ3ffl4;`@$@|ph}>} zbs!7ZsTDwtrbGG*2_b;l6oCK~Q{se%oer!WI7>P2@Ff$jK zQ*VT}42l7SL);yZxCR0W{Xh1u?zd@WiNE`=7^Ub!QSE#o9^jU%UMM0uC_znnD#Qcb z*yCiu_L|*w(umXl{b**_j+6G33eJa)L>^ETuXpErXMVFAax^r-S`_S*3wqn-FWMbN zD3vjCE;DI2ZduN7mMFE^mj>lPwRR7-k-Y0=#ovcvczfdNrSkn*D?ldZnE4$_l;!ldy@QP>v(ss0uk21W_5-cq zUhnU14)^-s(H_3`SBe;$Tf|#ifKb6FqY5JLxbv0&=cTA+h1VSl zZ^GcyClDrw!EGYwf0qdQZ4vbU91-;Y0ul80MNnfN=jB3+gfbNlAu|R2s2BBu;KQVV zv07n1M-Bbq5e#~R-jOSzSA!bFhP5!jB?y&AsVt;fVzRCD7t$`PIT!k5ydEh%Fjm;g zgenc~5<`y%bNw$3XkH4sImo;zD;h+&_=G%fvjDT)Oe2TM56g`RIA4ew)IAXr5~ zLFrOyVOiO(w< zk)2N7Mm{QEEQM`oU!z8l9(zLH@ZFcg|AHWdcN$lWqx&z7lZP~IhAV?`xtoz(!XqCw zSPt_I%#~fbmj=w=uoix6B2uk`>6riBIR`iAbm$7GBHJ8B@Zk+=yc_AP5l*rJQA*EL z$YK4E%idTNWK;>{ieomJh35WCx*Xm6kvCKmVeaLTKBunJZ~ zZ!PBr(<*~Z7M~eC{cpWCtr@ieTU%MBrN~TIqfyxkLn3d${|>`a85?d%ahmSFXwP^b zZf<>Ho~cFGjlqyO;Wfk6AhgQ=IqbgRZOtFM3|eP1{}Zcn^PIM^;qE!jzzpuTl9h#f62 z5e4u41Zr*tdpwa^?{$6@2pa?}l4srSdcBSWlNc$z=w@z+>AoGkJRMK@Xz7a}I4?3Z zX1iI=H#K}u5jzuWpg^+F=mNYfV6CO)ZnIITB@qRQG*-)bWp~6=(X z(X<2qKbelEN5REt_GWTEgNu{1vy<^`bUKB}8N8f~UyWv?$#@Er*Kjg^55J7YuZ{qv zgY>Q_bQ&U1=Df8>!4z?4@fzxKpsb7`6UCwu3xtJQp)R=jjyjjd?UkZPf=uSp`iOXg fo#ekM`T6: + - : + - : + standalone: {} + # host: redis-standalone + # port: 6379 + tls: + enabled: true + existingSecret: "" + verifyPeer: true + # redisCrt: |+ + # -----BEGIN CERTIFICATE----- + # MIIEGzCCAwOgAwIBAgIRANzOj1Mgxk7VRFClPaQnUGgwDQYJKoZIhvcNAQELBQAw + # .... + # -----END CERTIFICATE----- + # Enable subChart to have Helm optionally deploy Redis Sentinel/Standalone with your gateways. + subChart: + # If the subChart is enabled, configuration from redis in the subCharts section + # will need to match the auth and tls settings here. This is true by default so no + # changes will be required + # Using Redis as a subChart is not recommended in production, please use your own Redis for this integration. + enabled: false + ## Reference an existing secret for sensitive Gateway fields ## Note that additionalSecret will no longer take effect when existingGatewaySecret is set. @@ -400,6 +456,11 @@ tls: # Cluster Password clusterPassword: mypassword +# Rollout Gateway deployment when the primary Gateway ConfigMap Changes. +# This does not apply to cluster wide properties, listen ports or the Gateway secret +restartOnConfigChange: + enabled: false + # This enables/disables Policy Manager Access and sets the SSG_ADMIN username and password # Credentials will be moved to a secret object in the next push.. management: @@ -485,36 +546,107 @@ service: # This enables/disables otk install or upgrade. # Prerequisites. # 1. OTK DB is installed. -# 2. restman is enabled. Can be disabled once the install/upgrage is complete (management.restman.enabled: true) -# Note: In dual gateway installation, restart the pods after OTK install or upgrade. +# 2. Restman is enabled for DB backed Gateway. Can be disabled once the install/upgrade is complete (management.restman.enabled: true) +# Note: In dual gateway installation, restart the pods after OTK install or upgrade. otk: enabled: false # OTK installation type - SINGLE, DMZ or INTERNAL type: SINGLE - # Force install or upgrade by uninstalling existing otk soluction kit and install. - # forceInstallOrUpgrade: false + # Force install or upgrade by uninstalling existing otk solution kit and install. + forceInstallOrUpgrade: false - # Not applicable for DMZ and INTERNAL OTK types - # enablePortalIngeration: false - # skipPostInstallationTasks: false + # Not applicable for DMZ and INTERNAL OTK types. Install/Upgrade portal sub solution kits. + enablePortalIntegration: false + skipPostInstallationTasks: false + skipInternalServerTools: false + + # Restman host and port (optional). Valid only for db backed gateways + # Default - gateway service + # restmanHost: + # Default - installSolutionKits.restmanPort + # restmanPort: # Specify internal gateway host and port for DMZ OTK type # internalGatewayHost: # internalGatewayPort: - # Specify DMZ gateway host and port for interal OTK type + # Specify DMZ gateway host and port for internal OTK type # dmzGatewayHost: # dmzGatewayPort: - # List of comma seperated sub soluction Kits to install or upgrade. + # Network mask and startIP used in the 'Restrict Access to IP Address Range Assertion' to protect the schedule jobs and health checks. + # The db maintenance and health check services can accessible based on the IP address. + # https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-gateway/10-1/policy-assertions/assertion-palette/service-availability-assertions/restrict-access-to-ip-address-range-assertion.html + # networkMask: 16 + # startIP: 240.224.2.1 + + cert: + # Specify DMZ gateway certificates that needs to be imported to Internal GW (for ephemeral gateway) + # dmzGatewayCert: + # dmzGatewayIssuer: + # dmzGatewaySerial: + # dmzGatewaySubject: + + # Specify Internal gateway certificates that needs to be imported for DMZ GW (for ephemeral gateway) + # internalGatewayCert: + # internalGatewayIssuer: + # internalGatewaySerial: + # internalGatewaySubject: + + # List of comma separated sub solution Kits to install or upgrade. # subSolutionKitNames: + customizations: + + # This mounts one or more bundles that exist as secrets or configmaps in your Kubernetes Cluster. + # When creating these secrets/configmaps the format should be + # key: bundle1.bundle value: + # Each bundle that you create as a ConfigMap can not exceed 1MB in size. + # Ephemeral Gateway: Copies the bundles into Gateways bundle folder (/opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/000OTK) + # DB backed Gateway: Applies bundles to the Gateway using Restman calls (PUT /restman/1.0/bundle) + existingBundle: + enabled: false + configMaps: [] + # - name: otkbundle1 + # configMap: + # defaultMode: 420 + # optional: false + # name: otkbundle1 + # - name: otkbundle1 + + secrets: [] + # - name: secretotkbundle1 + # csi: + # driver: secrets-store.csi.k8s.io + # readOnly: true + # volumeAttributes: + # secretProviderClass: "secret-provider-class-name" + # - name: secretotkbundle2 + job: image: repository: caapim/otk-install - tag: 4.6.1 + tag: 4.6.2 pullPolicy: IfNotPresent + imagePullSecret: + enabled: false + + # Valid only for ephemeral gateway. Creates cronJobs for each OTK DB maintenance schedule tasks. + scheduledTasks: + - name: client + schedule: "*/31 * * * *" + - name: idtoken + schedule: "*/29 * * * *" + - name: sessions + schedule: "*/7 * * * *" + - name: token + schedule: "*/5 * * * *" + - name: trl + schedule: "0 */1 * * *" + - name: miscellaneous + schedule: "*/5 * * * *" + labels: {} # nodeSelector: {} # tolerations: [] @@ -525,41 +657,96 @@ otk: # Pod Annotations apply to the OTK install Pod ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ podAnnotations: {} + + resources: + requests: + memory: 64Mi + cpu: 200m + limits: + memory: 128Mi + cpu: 250m + database: # OTK database type - mysql/oracle/cassandra type: mysql connectionName: OAuth - # existingSecretName: otkdb-secret - username: root - password: 7layer + dbUpgrade: true + useDemoDb: true + + # OTK database user name and password used to create Gateway Database/cassandra connection. + username: otk_user + password: mypassword + + # existingSecretName: otkDbSecret + + # Database connection properties properties: {"maximumPoolSize":15, "minimumPoolSize":3} + + # For Cassandra driverConfig is supported from GW 11.0. Either otk.database.cassandra.driverConfig or otk.database.properties should be provided # properties: {"localDataCenterName" : "DC1"} + + # Update database connection properties during helm upgrade. + updateConnection: true + + # If using existing non liquibase OTK DB then perform manual OTK DB upgrade and set 'changeLogSync' to true. + # This is a onetime activity to initialize liquibase related tables on OTK DB. Set to false for successive helm upgrade. + changeLogSync: false + sql: + + # If provided, used to create OTK schema and tables. + # ddlUsername: + # ddlPassword: + # jdbcURL: jdbc:mysql://:/ jdbcURL: - jdbcDriverClass: com.l7tech.jdbc.mysql.MySQLDriver + jdbcDriverClass: com.mysql.jdbc.Driver + # Oracle database name or MySQL demo db name + databaseName: otk_db + + # c3p0 connection properties. + # connectionProperties: {"c3p0.maxConnectionAge":"100","c3p0.maxIdleTime":"1000"} + + # For mysql & oracle setup test clients + createTestClients: false + # Test clients redirect Url prefix. Required if createTestClients is true. + testClientsRedirectUrlPrefix: + + cassandra: + # connectionPoints: + # port: + # keyspace: + # For Cassandra driverConfig is supported from GW 11.0. Either otk.database.cassandra.driverConfig or otk.database.properties should be provided + # driverConfig: {"localDataCenterName" : "DC1"} + + # Optionally configure read only database connection for MySQL/Oracle. + readOnlyConnection: + enabled: false + # connectionName: OAuth_ReadOnly + # existingSecretName: otkReadOnlyDbSecret + # username: root + # password: 7layer + # properties: {"maximumPoolSize":15, "minimumPoolSize":3} + # connectionProperties: {"c3p0.maxConnectionAge":"100","c3p0.maxIdleTime":"1000"} + + jdbcURL: jdbc:mysql://:/ + jdbcDriverClass: com.mysql.jdbc.Driver # Oracle database name - # databaseName: - # cassandra: - # connectionPoints: localhost - # port: - # keyspace: - # For Cassandra driverConfig is supported from GW 11.0. Either otk.database.cassandra.driverConfig or otk.database.properties should be provided - # driverConfig: {"localDataCenterName" : "DC1"} + databaseName: # Install OTK Health check bundle on gateway. Uses config map. # Alternatively the bundle can be loaded using config map external to helm (useExisting: true) # The bundle content can be found at https://github.com/CAAPIM/apim-charts/blob/stable/charts/gateway/bundles/otk-healthcheck.bundle healthCheckBundle: - enabled: true + enabled: false useExisting: false name: otk-health-check-bundle-config # OTK Specific configuration: # - The liveliness probe is not supported for OTK 4.6 & below versions. # - Only valid for SINGLE and INTERNAL OTK types. Not be enabled for a DMZ OTK type. - # - In a dual gateway OTK setup, it is recomended enable liveness probe after the pods restart. - # - Should be enabled after otk installation. + # - In a dual gateway OTK setup, it is recommended enable liveness probe after the pods restart. + # - Should be enabled after OTK installation. # - otk.livenessProbe.type as httpGet # - otk.livenessProbe.path /auth/oauth/health # - otk.livenessProbe.port 8443 @@ -568,13 +755,14 @@ otk: enabled: false type: httpGet httpGet: - path: - port: + path: /auth/oauth/health + port: 8443 + # OTK Specific configuration: # - The readinessProbe probe is not supported for OTK 4.6 & below versions. # - Only valid for SINGLE and INTERNAL OTK types. Not be enabled for a DMZ OTK type. - # - In a dual gateway OTK setup, it is recomended enable readiness probe after the pods restart. - # - Should be enabled after otk installation. + # - In a dual gateway OTK setup, it is recommended enable readiness probe after the pods restart. + # - Should be enabled after OTK installation. # - otk.readinessProbe.type as httpGet # - otk.readinessProbe.path /auth/oauth/health # - otk.readinessProbe.port 8443 @@ -583,9 +771,8 @@ otk: enabled: false type: httpGet httpGet: - path: - port: - + path: /auth/oauth/health + port: 8443 # This project does not currently support Google's GCE controller. # The default way to expose the Gateway is via L4 Load Balancer because it goes far beyond the HTTP(S) limitation ingress currently imposes @@ -621,10 +808,11 @@ ingress: # number: # - host: dev1.ca.com # path: "/" + # backend: management # service: # port: - # name: anotherport - # #number: + # name: management + # #number: # Additional Environment variables to be added to the Gateway Configmap additionalEnv: {} @@ -827,6 +1015,70 @@ installSolutionKits: ## Subchart Configuration ## +# Settings for Redis - https://github.com/bitnami/charts/tree/master/bitnami/redis +redis: + auth: + # The Gateway supports Redis master auth in sentinel mode only, set this value to true to enable auth. + enabled: false + # Sentinel auth which enables password authentication on sentinels too is not supported by the Gateway and should remain false + sentinel: false + password: "mypassword" + tls: + enabled: true + authClients: false + # this only applies if redis.subChart.enabled is true + autoGenerated: true + image: + registry: docker.io + repository: bitnami/redis + tag: 7.2.1-debian-11-r0 + pullPolicy: IfNotPresent + # replication or standalone + architecture: replication + master: + count: 1 + configuration: "" + disableCommands: + - FLUSHDB + - FLUSHALL + persistence: + enabled: false + size: 20Gi + service: + type: LoadBalancer + replica: + replicaCount: 3 + containerPorts: + redis: 6379 + resources: + limits: {} + requests: {} + persistence: + enabled: false + sizeLimit: "" + accessModes: + - ReadWriteOnce + size: 20Gi + # service: + # type: LoadBalancer + # externalTrafficPolicy: Local + sentinel: + enabled: true + # service: + # type: LoadBalancer + # externalTrafficPolicy: Local + image: + registry: docker.io + repository: bitnami/redis-sentinel + tag: 7.2.1-debian-11-r0 + digest: "" + pullPolicy: IfNotPresent + masterSet: mymaster + quorum: 2 + resources: + limits: {} + requests: {} + # MySQL Bitnami chart - https://github.com/bitnami/charts/tree/master/bitnami/mysql (DO NOT USE IN PRODUCTION!!) mysql: image: @@ -875,6 +1127,13 @@ mysql: port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid + persistence: + annotations: + helm.sh/hook: pre-install,post-upgrade + helm.sh/hook-weight: "-10" + commonAnnotations: + helm.sh/hook: pre-install,post-upgrade + helm.sh/hook-weight: "-10" # Settings for Hazelcast - https://github.com/hazelcast/charts/blob/master/stable/hazelcast/values.yaml # The Gateway currently supports Hazelcast 4.x & 5.x servers diff --git a/charts/gateway/templates/_helpers.tpl b/charts/gateway/templates/_helpers.tpl index a2b52a04..f33b49d1 100644 --- a/charts/gateway/templates/_helpers.tpl +++ b/charts/gateway/templates/_helpers.tpl @@ -84,6 +84,40 @@ Create java args to apply. {{- end -}} {{- end -}} +{{/* +Redis sentinel nodes +*/}} +{{- define "gateway.redisSentinelNodes" -}} +{{- if .Values.config.redis.sentinel.enabled }} + {{- if empty .Values.config.redis.sentinel.nodes }} + {{- fail "config.redis.sentinel.nodes is required." }} + {{- end }} + {{- join "," .Values.config.redis.sentinel.nodes }} +{{- end -}} +{{- end -}} + +{{/* +Redis config secret name +*/}} +{{- define "redisConfigSecretName" }} +{{- if not .Values.config.redis.existingConfigSecret }} +{{- printf "%s-%s-%s" .Release.Name .Chart.Name "redis-configuration" -}} +{{- else }} +{{- .Values.config.redis.existingConfigSecret }} +{{- end }} +{{- end }} + +{{/* +Redis TLS secret name +*/}} +{{- define "redisTlsSecretName" }} +{{- if not .Values.config.redis.tls.existingSecret }} +{{- printf "%s-%s" .Release.Name "redis-crt" -}} +{{- else }} +{{- .Values.config.redis.tls.existingSecret }} +{{- end }} +{{- end }} + {{/* Create Image Pull Secret */}} @@ -93,6 +127,15 @@ Create Image Pull Secret {{- end }} {{- end }} +{{/* +Create OTK Image Pull Secret +*/}} +{{- define "otkImagePullSecret" }} +{{- if not .Values.otk.job.imagePullSecret.existingSecretName }} +{{- printf "{\"auths\":{\"%s\":{\"username\":\"%s\",\"password\":\"%s\",\"auth\":\"%s\"}}}" .Values.otk.job.image.registry .Values.otk.job.imagePullSecret.username .Values.otk.job.imagePullSecret.password (printf "%s:%s" .Values.otk.job.imagePullSecret.username .Values.otk.job.imagePullSecret.password | b64enc) | b64enc }} +{{- end }} +{{- end }} + {{/* Define Image Pull Secret Name */}} @@ -104,6 +147,19 @@ Define Image Pull Secret Name {{- end -}} {{- end -}} +{{/* +Define OTK Image Pull Secret Name +*/}} +{{- define "otkImagePullSecretName" -}} +{{- if .Values.otk.job.imagePullSecret.existingSecretName -}} + {{ .Values.otk.job.imagePullSecret.existingSecretName }} +{{- else -}} + {{- printf "%s-%s" (include "gateway.fullname" .) "otk-image-pull-secret" -}} +{{- end -}} +{{- end -}} + + + {{/* Define Gateway TLS Secret Name */}} @@ -175,4 +231,47 @@ Define Image Pull Secret Name {{- else -}} {{- printf "%s-%s" (include "gateway.fullname" .) "otkdb-secret" -}} {{- end -}} -{{- end -}} \ No newline at end of file +{{- end -}} + +{{/* + Define OTK database ReadOnly Connection Secret Name + */}} +{{- define "otk.dbSecretName.readOnly" -}} +{{- if .Values.otk.database.readOnlyConnection.existingSecretName -}} + {{ .Values.otk.database.readOnlyConnection.existingSecretName }} +{{- else -}} + {{- printf "%s-%s" (include "gateway.fullname" .) "rconn-otkdb-secret" -}} +{{- end -}} +{{- end -}} +{{/* + Define OTK install image pullSecret + */}} +{{- define "otk.imagePullSecret" -}} +{{- if .Values.otk.job.imagePullSecret.enabled -}} + {{- printf "%s" (include "otkImagePullSecretName" .) -}} +{{- else -}} + {{- printf "%s" (include "gateway.imagePullSecret" .) -}} +{{- end -}} +{{- end -}} + +{{/* + Define OTK install image + */}} +{{- define "otk.image" -}} +{{- if empty .Values.otk.job.image.registry -}} + {{- printf "%s/%s:%s" .Values.image.registry .Values.otk.job.image.repository .Values.otk.job.image.tag -}} +{{- else -}} + {{- printf "%s/%s:%s" .Values.otk.job.image.registry .Values.otk.job.image.repository .Values.otk.job.image.tag -}} +{{- end -}} +{{- end -}} + +{{/* + Define OTK Restman host + */}} +{{- define "otk.restmanhost" -}} +{{- if empty .Values.otk.restmanHost -}} + {{- printf "%s" (include "gateway.fullname" .) -}} +{{- else -}} + {{- printf "%s" .Values.otk.restmanHost -}} +{{- end -}} +{{- end -}} diff --git a/charts/gateway/templates/configmap.yaml b/charts/gateway/templates/configmap.yaml index b3753afc..d6840b7d 100644 --- a/charts/gateway/templates/configmap.yaml +++ b/charts/gateway/templates/configmap.yaml @@ -159,7 +159,7 @@ data: echo "***************************************************************************" echo "scanning for $TYPE in $SOURCE_DIR" echo "***************************************************************************" - FILES=$(find $3 -type f -name '*'$2 2>/dev/null) + FILES=$(du -a $3 | grep -e ".\\$2$" | awk '{ print $2 }' 2>/dev/null) for file in $FILES; do name=$(basename "$file") cp $file $4/$name @@ -174,7 +174,7 @@ data: echo "***************************************************************************" echo "scanning for $TYPE in $SOURCE_DIR" echo "***************************************************************************" - FILES=$(find $3 -type f -name '*'$2 2>/dev/null) + FILES=$(du -a $3 | grep -e ".\\$2$" | awk '{ print $2 }' 2>/dev/null) for file in $FILES; do name=$(basename "$file") echo -e "running $name" @@ -186,7 +186,8 @@ data: done } - copy "bundles" ".bundle" $BUNDLE_DIR $TARGET_BUNDLE_DIR + copy "restman bundles" ".bundle" $BUNDLE_DIR $TARGET_BUNDLE_DIR + copy "graphman bundles" ".json" $BUNDLE_DIR $TARGET_BUNDLE_DIR copy "custom assertions" ".jar" $CUSTOM_ASSERTIONS_DIR $TARGET_CUSTOM_ASSERTIONS_DIR copy "modular assertions" ".aar" $MODULAR_ASSERTIONS_DIR $TARGET_MODULAR_ASSERTIONS_DIR copy "external libraries" ".jar" $EXTERNAL_LIBRARIES_DIR $TARGET_EXTERNAL_LIBRARIES_DIR diff --git a/charts/gateway/templates/deployment.yaml b/charts/gateway/templates/deployment.yaml index 34a62494..57bdc4f7 100644 --- a/charts/gateway/templates/deployment.yaml +++ b/charts/gateway/templates/deployment.yaml @@ -33,6 +33,19 @@ spec: {{- end }} {{- if .Values.podAnnotations }} annotations: {{- toYaml .Values.podAnnotations | nindent 8 }} + {{- if .Values.restartOnConfigChange }} + {{- if .Values.restartOnConfigChange.enabled }} + checksum/config: {{ include ( print $.Template.BasePath "/configmap.yaml" ) $ | sha256sum }} + {{- end }} + {{- end }} + {{- end }} + {{- if not .Values.podAnnotations }} + {{- if .Values.restartOnConfigChange }} + {{- if .Values.restartOnConfigChange.enabled }} + annotations: + checksum/config: {{ include ( print $.Template.BasePath "/configmap.yaml" ) $ | sha256sum }} + {{- end }} + {{- end }} {{- end }} spec: serviceAccountName: {{ include "gateway.serviceAccountName" . }} @@ -57,13 +70,48 @@ spec: {{- if .Values.terminationGracePeriodSeconds }} terminationGracePeriodSeconds: {{.Values.terminationGracePeriodSeconds }} {{- end }} - {{- if .Values.initContainers }} - initContainers: {{- toYaml .Values.initContainers | nindent 12 }} + + initContainers: + {{- if and (.Values.otk.enabled) (not .Values.database.enabled) }} + - name: {{ .Chart.Name }}-otk-install-container + image: {{ template "otk.image" . }} + imagePullPolicy: {{ .Values.otk.job.image.pullPolicy }} + envFrom: + - secretRef: + name: {{ template "otk.dbSecretName" . }} + - secretRef: + name: {{ template "gateway.secretName" . }} + {{- if and (.Values.otk.database.readOnlyConnection.enabled) (ne .Values.otk.database.type "cassandra") }} + - secretRef: + name: {{ template "otk.dbSecretName.readOnly" . }} + {{- end }} + - configMapRef: + name: {{ template "gateway.fullname" . }}-otk-install-configmap + volumeMounts: + - name: {{ template "gateway.fullname" . }}-otk-install-container + mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/000OTK + {{- if .Values.otk.customizations.existingBundle.enabled }} + {{- range .Values.otk.customizations.existingBundle.configMaps }} + - name: {{ .name }} + mountPath: /docker/custom_bundles/{{ .name }} + {{- end }} + {{- range .Values.otk.customizations.existingBundle.secrets }} + - name: {{ .name }} + mountPath: /docker/custom_bundles/{{ .name }} + {{ if .csi }} + readOnly: {{ .csi.readOnly }} + {{ end }} + {{- end }} + {{- end }} {{- end }} -{{- if .Values.imagePullSecret.enabled }} + {{- if .Values.initContainers }} + {{toYaml .Values.initContainers | nindent 6 }} + {{ end }} + + {{- if .Values.imagePullSecret.enabled }} imagePullSecrets: - name: {{ template "gateway.imagePullSecret" . }} -{{- end }} + {{- end }} containers: {{- if .Values.sidecars }} {{- toYaml .Values.sidecars | nindent 8 }} @@ -171,8 +219,8 @@ spec: mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/configmap {{- end }} {{- if and (.Values.otk.enabled) (.Values.otk.healthCheckBundle.enabled) (not .Values.otk.healthCheckBundle.useExisting)}} - - name: {{ .Values.otk.healthCheckBundle.name }} - mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/otkhealthcheck + - name: {{ template "gateway.fullname" . }}-{{ .Values.otk.healthCheckBundle.name }} + mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/1otkhealthcheck {{- end }} {{- if .Values.management.restman.enabled }} - name: {{ template "gateway.fullname" . }}-restman @@ -184,6 +232,18 @@ spec: mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/services/graphman {{- end }} {{- end }} +{{- if .Values.config.redis }} + {{- if .Values.config.redis.enabled }} + - name: {{ template "gateway.fullname" . }}-redis-properties + mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/assertions/RedisSharedStateProviderAssertion/redis.properties + subPath: redis.properties + {{- if and (.Values.config.redis.tls.enabled) (.Values.config.redis.sentinel.enabled) }} + - name: {{ template "gateway.fullname" . }}-redis-crt + mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/assertions/RedisSharedStateProviderAssertion/redis.crt + subPath: redis.crt + {{- end }} + {{- end }} +{{- end }} {{- if .Values.existingHealthCheck }} {{- if .Values.existingHealthCheck.enabled }} {{- if .Values.existingHealthCheck.configMap }} @@ -254,6 +314,10 @@ spec: {{- end }} {{- end }} {{- end }} +{{ if and (.Values.otk.enabled) (not .Values.database.enabled) }} + - name: {{ template "gateway.fullname" . }}-otk-install-container + mountPath: /opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/000OTK +{{- end }} {{- if .Values.sidecars }} {{- range .Values.sidecars }} {{- range .volumeMounts }} @@ -375,6 +439,24 @@ spec: - key: hazelcast-xml path: hazelcast-client.xml {{- end }} +{{- if .Values.config.redis }} + {{- if .Values.config.redis.enabled }} + - name: {{ template "gateway.fullname" . }}-redis-properties + secret: + secretName: {{ template "redisConfigSecretName" . }} + items: + - key: redis.properties + path: redis.properties + {{- if and (.Values.config.redis.tls.enabled) (.Values.config.redis.sentinel.enabled) }} + - name: {{ template "gateway.fullname" . }}-redis-crt + secret: + secretName: {{ template "redisTlsSecretName" . }} + items: + - key: tls.crt + path: redis.crt + {{- end }} + {{- end }} +{{- end }} {{- if .Values.customConfig }} {{- if .Values.customConfig.enabled }} {{- range .Values.customConfig.mounts }} @@ -425,11 +507,11 @@ spec: name: {{ template "gateway.fullname" . }}-bundle-configmap {{- end }} {{- if and (.Values.otk.enabled) (.Values.otk.healthCheckBundle.enabled) (not .Values.otk.healthCheckBundle.useExisting) }} - - name: {{ .Values.otk.healthCheckBundle.name }} + - name: {{ template "gateway.fullname" . }}-{{ .Values.otk.healthCheckBundle.name }} configMap: defaultMode: 292 optional: false - name: {{ .Values.otk.healthCheckBundle.name }} + name: {{ template "gateway.fullname" . }}-{{ .Values.otk.healthCheckBundle.name }} {{- end }} {{- if .Values.serviceMetrics.enabled }} - name: {{ template "gateway.fullname" . }}-service-metrics-configmap @@ -532,6 +614,32 @@ spec: {{- end }} {{- end }} {{- end }} +{{ if and (.Values.otk.enabled) (not .Values.database.enabled) }} + - name: {{ template "gateway.fullname" . }}-otk-install-container + emptyDir: {} + {{- if .Values.otk.customizations.existingBundle.enabled }} + {{- range .Values.otk.customizations.existingBundle.configMaps }} + - name: {{ .name }} + {{- if .configMap }} + configMap: {{ toYaml .configMap | nindent 12 }} + {{- else }} + configMap: + defaultMode: 292 + optional: false + name: {{ .name }} + {{- end }} + {{- end }} + {{- range .Values.otk.customizations.existingBundle.secrets }} + - name: {{ .name }} + {{- if .csi }} + csi: {{ toYaml .csi | nindent 12 }} + {{- else }} + secret: + secretName: {{ .name }} + {{- end }} + {{- end }} + {{- end }} +{{- end }} {{- if .Values.sidecars }} {{- range .Values.sidecars }} {{- range .volumeMounts }} diff --git a/charts/gateway/templates/image-pull-secret.yaml b/charts/gateway/templates/image-pull-secret.yaml index 7559a51f..b7565686 100644 --- a/charts/gateway/templates/image-pull-secret.yaml +++ b/charts/gateway/templates/image-pull-secret.yaml @@ -10,9 +10,11 @@ metadata: heritage: {{ .Release.Service }} {{- range $key, $val := .Values.additionalLabels }} {{ $key }}: "{{ $val }}" - {{- end }} - {{- if .Values.additionalAnnotations }} + {{- end }} annotations: + "helm.sh/hook": pre-install,post-upgrade + "helm.sh/hook-weight": "-5" +{{- if .Values.additionalAnnotations }} {{- range $key, $val := .Values.additionalAnnotations }} {{ $key }}: "{{ $val }}" {{- end }} diff --git a/charts/gateway/templates/ingress.yaml b/charts/gateway/templates/ingress.yaml index 16d3dd5c..7759d832 100644 --- a/charts/gateway/templates/ingress.yaml +++ b/charts/gateway/templates/ingress.yaml @@ -35,7 +35,15 @@ spec: path: {{ .path }} backend: service: + {{- if .backend }} + {{- if eq .backend "management" }} + name: {{ $gatewayFullName }}-management + {{- else }} name: {{ $gatewayFullName }} + {{- end }} + {{- else }} + name: {{ $gatewayFullName }} + {{- end }} port: {{- if .service.port.number }} number: {{ .service.port.number }} diff --git a/charts/gateway/templates/otk-db-scripts-configmap.yaml b/charts/gateway/templates/otk-db-scripts-configmap.yaml new file mode 100644 index 00000000..cbfb4da7 --- /dev/null +++ b/charts/gateway/templates/otk-db-scripts-configmap.yaml @@ -0,0 +1,32 @@ +{{- if .Values.database.create }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ .Values.mysql.initdbScriptsConfigMap }} + labels: + app: {{ template "gateway.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} + annotations: + "helm.sh/hook": pre-install,post-upgrade + "helm.sh/hook-weight": "-5" + {{- if .Values.additionalAnnotations }} + {{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- end }} +data: + create_otk_db.sql: |- + CREATE DATABASE {{ .Values.otk.database.sql.databaseName }}; + CREATE USER '{{ .Values.otk.database.username }}'@'%' identified by '{{ .Values.otk.database.password }}'; + GRANT ALL ON {{ .Values.otk.database.sql.databaseName}}.* TO '{{ .Values.otk.database.username }}'@'%'; + {{- if .Values.otk.database.readOnlyConnection.enabled }} + CREATE USER '{{ .Values.otk.database.readOnlyConnection.username }}'@'%' identified by '{{ .Values.otk.database.readOnlyConnection.password }}'; + GRANT SELECT ON {{ .Values.otk.database.sql.databaseName}}.* TO '{{ .Values.otk.database.readOnlyConnection.username }}'@'%'; + {{- end }} + flush privileges; +{{ end }} \ No newline at end of file diff --git a/charts/gateway/templates/otk-db-secret.yaml b/charts/gateway/templates/otk-db-secret.yaml index bc7fd8fa..c7c0d22c 100644 --- a/charts/gateway/templates/otk-db-secret.yaml +++ b/charts/gateway/templates/otk-db-secret.yaml @@ -1,8 +1,8 @@ -{{ if and (.Values.management.restman.enabled) (.Values.otk.enabled) (not .Values.otk.database.existingSecretName)}} +{{ if and (.Values.otk.enabled) (not .Values.otk.database.existingSecretName)}} apiVersion: v1 kind: Secret metadata: - name: {{ template "otk.dbSecretName" . }} + name: {{ template "otk.dbSecretName" . }} labels: app: {{ template "gateway.name" . }} chart: {{ template "gateway.chart" . }} @@ -10,15 +10,19 @@ metadata: heritage: {{ .Release.Service }} {{- range $key, $val := .Values.additionalLabels }} {{ $key }}: "{{ $val }}" - {{- end }} - {{- if .Values.additionalAnnotations }} + {{- end }} annotations: -{{- range $key, $val := .Values.additionalAnnotations }} + "helm.sh/hook": pre-install,post-upgrade + "helm.sh/hook-weight": "-5" + {{- if .Values.additionalAnnotations }} + {{- range $key, $val := .Values.additionalAnnotations }} {{ $key }}: "{{ $val }}" -{{- end }} -{{- end }} + {{- end }} + {{- end }} type: Opaque data: OTK_DATABASE_PASSWORD : {{ required "Please fill in otk.database.password in values.yaml" .Values.otk.database.password | b64enc }} OTK_DATABASE_USERNAME : {{ required "Please fill in otk.database.username in values.yaml" .Values.otk.database.username| b64enc }} + OTK_DATABASE_DDL_PASSWORD: {{ default .Values.otk.database.password .Values.otk.database.sql.ddlPassword | b64enc}} + OTK_DATABASE_DDL_USERNAME: {{ default .Values.otk.database.username .Values.otk.database.sql.ddlUsername | b64enc}} {{ end }} \ No newline at end of file diff --git a/charts/gateway/templates/otk-db-upgrade-job.yaml b/charts/gateway/templates/otk-db-upgrade-job.yaml new file mode 100755 index 00000000..9c375aa8 --- /dev/null +++ b/charts/gateway/templates/otk-db-upgrade-job.yaml @@ -0,0 +1,98 @@ +{{ if and (.Values.otk.database.dbUpgrade) (.Values.otk.enabled) (ne .Values.otk.type "DMZ") (ne .Values.otk.database.type "cassandra")}} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ template "gateway.fullname" . }}-otk-db-upgrade + annotations: + chartversion: {{ .Chart.AppVersion | quote }} + "helm.sh/hook": pre-install,post-upgrade + "helm.sh/hook-weight": "-4" + {{- if .Values.additionalAnnotations }} + {{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- end }} + labels: + app: {{ template "gateway.fullname" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.otk.job.labels }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} +spec: + backoffLimit: 1 + template: + metadata: + labels: + app: {{ template "gateway.fullname" . }} + release: {{ .Release.Name }} + {{- if .Values.otk.job.podLabels }} + {{- toYaml .Values.otk.job.podLabels | nindent 8 }} + {{- end }} + {{- if .Values.otk.job.podAnnotations }} + annotations: {{- toYaml .Values.otk.job.podAnnotations | nindent 8 }} + {{- end }} + spec: + serviceAccountName: {{ include "gateway.serviceAccountName" . }} + {{- if .Values.podSecurityContext }} + securityContext: {{- toYaml .Values.podSecurityContext | nindent 8 }} + {{- end }} + containers: + - name: otk-db-upgrade + image: {{ template "otk.image" . }} + imagePullPolicy: {{ .Values.otk.job.image.pullPolicy }} + resources: {{- toYaml .Values.otk.job.resources | nindent 12 }} + {{- if .Values.containerSecurityContext }} + securityContext: {{- toYaml .Values.containerSecurityContext | nindent 12 }} + {{- end }} + envFrom: + - secretRef: + name: {{ template "otk.dbSecretName" . }} + env: + - name: OTK_TYPE + value: {{ template "otk-install-type" .}} + {{- if and (not .Values.otk.database.useDemoDb) (.Values.otk.database.changeLogSync)}} + - name: OTK_LIQUIBASE_OPERATION + value: "changelogSync" + {{ end }} + - name: OTK_DATABASE_TYPE + value: {{ required "Please fill in otk.database.type in values.yaml" .Values.otk.database.type | quote }} + - name: OTK_DATABASE_WAIT_TIMEOUT + value: {{default 60 .Values.otk.database.waitTimeout | quote}} + - name: OTK_SK_UPGRADE + value: "false" + - name: OTK_DATABASE_UPGRADE + value: "true" + - name: OTK_JDBC_URL + {{- if and (.Values.otk.database.useDemoDb) (eq .Values.otk.database.type "mysql")}} + value: jdbc:mysql://{{ .Release.Name }}-mysql:3306/{{default "otk_db" .Values.otk.database.sql.databaseName }} + {{- else }} + value: {{ required "Please fill in otk.database.sql.jdbcURL in values.yaml" .Values.otk.database.sql.jdbcURL | quote }} + {{- end }} + {{- if eq .Values.otk.database.type "oracle" }} + - name: OTK_DATABASE_NAME + value: {{ required "Please fill in otk.database.sql.databaseName in values.yaml" .Values.otk.database.sql.databaseName | quote }} + {{- end }} + - name: OTK_CREATE_TEST_CLIENTS + value: {{ default "false" .Values.otk.database.sql.createTestClients | quote }} + {{- if .Values.otk.database.sql.createTestClients }} + - name: OTK_TEST_CLIENTS_REDIRECT_URL_PREFIX + value: {{ required "Please provide test clients redirect url prefix otk.database.sql.testClientsRedirectUrlPrefix in values.yaml" .Values.otk.database.sql.testClientsRedirectUrlPrefix | quote }} + {{- end }} + + {{- if or (.Values.imagePullSecret.enabled) (.Values.otk.job.imagePullSecret.enabled) }} + imagePullSecrets: + - name: {{ template "otk.imagePullSecret" . }} + {{- end }} + {{- if .Values.otk.job.nodeSelector }} + nodeSelector: {{- toYaml .Values.otk.job.nodeSelector | nindent 8 }} + {{- end }} + {{- if .Values.otk.job.tolerations }} + tolerations: {{- toYaml .Values.otk.job.tolerations | nindent 6 }} + {{- end }} + restartPolicy: "Never" + {{ end }} diff --git a/charts/gateway/templates/otk-healthcheck-bundle-configmap.yaml b/charts/gateway/templates/otk-healthcheck-bundle-configmap.yaml index f6c06600..72c6d491 100644 --- a/charts/gateway/templates/otk-healthcheck-bundle-configmap.yaml +++ b/charts/gateway/templates/otk-healthcheck-bundle-configmap.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: ConfigMap metadata: - name: {{ .Values.otk.healthCheckBundle.name }} + name: {{ template "gateway.fullname" . }}-{{ .Values.otk.healthCheckBundle.name }} labels: app: {{ template "gateway.name" . }} chart: {{ template "gateway.chart" . }} @@ -64,8 +64,8 @@ data: <wsp:All wsp:Usage="Required"> <L7p:SslAssertion/> <L7p:RemoteIpAddressRange> - <L7p:NetworkMask stringValue="16"/> - <L7p:StartIp stringValue="240.224.2.1"/> + <L7p:NetworkMask stringValue="{{ default "16" .Values.otk.networkMask}}"/> + <L7p:StartIp stringValue="{{ default "240.224.2.1" .Values.otk.startIP }}"/> </L7p:RemoteIpAddressRange> <L7p:SetVariable> <L7p:Base64Expression stringValue="YWR2YW5jZWQ="/> diff --git a/charts/gateway/templates/otk-image-pull-secret.yaml b/charts/gateway/templates/otk-image-pull-secret.yaml new file mode 100755 index 00000000..75507555 --- /dev/null +++ b/charts/gateway/templates/otk-image-pull-secret.yaml @@ -0,0 +1,25 @@ +{{ if and (not .Values.otk.job.imagePullSecret.existingSecretName) (.Values.otk.job.imagePullSecret.enabled) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "otkImagePullSecretName" . }} + annotations: + "helm.sh/hook": pre-install,post-upgrade + "helm.sh/hook-weight": "-5" + {{- if .Values.additionalAnnotations }} + {{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- end }} + labels: + app: {{ template "gateway.name" . }} + chart: {{ template "gateway.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} +type: kubernetes.io/dockerconfigjson +data: + .dockerconfigjson: {{ template "otkImagePullSecret" . }} +{{ end }} \ No newline at end of file diff --git a/charts/gateway/templates/otk-install-configmap.yaml b/charts/gateway/templates/otk-install-configmap.yaml new file mode 100644 index 00000000..a9006e95 --- /dev/null +++ b/charts/gateway/templates/otk-install-configmap.yaml @@ -0,0 +1,101 @@ +{{ if (.Values.otk.enabled) }} +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ template "gateway.fullname" . }}-otk-install-configmap + labels: + app: {{ template "gateway.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- if .Values.additionalAnnotations }} + annotations: +{{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" +{{- end }} +{{- end }} +data: + OTK_TYPE: {{ template "otk-install-type" .}} + {{- if .Values.database.enabled }} + OTK_INSTALL_MODE: "job" + {{- else }} + OTK_INSTALL_MODE: "initContainer" + {{- end }} + BOOTSTRAP_DIR: "/opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/000OTK" + OTK_SK_UPGRADE: "true" + OTK_DATABASE_UPGRADE: "false" + OTK_SKIP_INTERNAL_SERVER_TOOLS: {{default false .Values.otk.skipInternalServerTools | quote }} + OTK_FORCE_INSTALL: {{default false .Values.otk.forceInstallOrUpgrade | quote}} + {{- if eq .Values.otk.type "DMZ" }} + OTK_INTERNAL_CERT_ENCODED: {{ default "" .Values.otk.cert.internalGatewayCert | quote }} + OTK_INTERNAL_CERT_ISS: {{ default "" .Values.otk.cert.internalGatewayIssuer | quote }} + OTK_INTERNAL_CERT_SERIAL: {{ default "12345" .Values.otk.cert.internalGatewaySerial | quote }} + OTK_INTERNAL_CERT_SUB: {{ default "" .Values.otk.cert.internalGatewaySubject | quote }} + {{- end }} + {{- if eq .Values.otk.type "INTERNAL" }} + OTK_DMZ_CERT_ENCODED: {{ default "" .Values.otk.cert.dmzGatewayCert | quote }} + OTK_DMZ_CERT_ISS: {{ default "" .Values.otk.cert.internalGatewayIssuer | quote }} + OTK_DMZ_CERT_SERIAL: {{ default "12345" .Values.otk.cert.dmzGatewaySerial | quote }} + OTK_DMZ_CERT_SUB: {{ default "" .Values.otk.cert.dmzGatewaySubject | quote }} + {{- end }} + + {{- if ne .Values.otk.type "DMZ" }} + OTK_DATABASE_TYPE: {{ required "Please fill in otk.database.type in values.yaml" .Values.otk.database.type | quote }} + OTK_DATABASE_CONNECTION_NAME: {{ required "Please fill in otk.database.connectionName in values.yaml" .Values.otk.database.connectionName | quote }} + {{ if and (.Values.otk.database.useDemoDb) (eq .Values.otk.database.type "mysql")}} + OTK_CREATE_RO_DATABASE_CONN: "false" + {{- else }} + OTK_CREATE_RO_DATABASE_CONN: {{default false .Values.otk.database.readOnlyConnection.enabled | quote }} + {{- end }} + {{- if eq .Values.otk.database.type "cassandra" }} + OTK_CASSANDRA_CONNECTION_POINTS: {{ required "Please fill in otk.database.cassandra.connectionPoints in values.yaml" .Values.otk.database.cassandra.connectionPoints | quote }} + OTK_CASSANDRA_PORT: {{ required "Please fill in otk.database.cassandra.port in values.yaml" .Values.otk.database.cassandra.port | quote }} + OTK_CASSANDRA_KEYSPACE: {{ required "Please fill in otk.database.cassandra.keyspace in values.yaml" .Values.otk.database.cassandra.keyspace | quote }} + OTK_CASSANDRA_DRIVER_CONFIG: {{ default "na" .Values.otk.database.cassandra.driverConfig | toJson | b64enc| quote }} + {{- end }} + OTK_DATABASE_PROPERTIES: {{ default "na" .Values.otk.database.properties | toJson | b64enc | quote }} + {{- if or (eq .Values.otk.database.type "mysql") (eq .Values.otk.database.type "oracle") }} + OTK_JDBC_DRIVER_CLASS: {{ required "Please fill in otk.database.sql.jdbcDriverClass in values.yaml" .Values.otk.database.sql.jdbcDriverClass | quote }} + OTK_DATABASE_CONN_PROPERTIES: {{ default "na" .Values.otk.database.sql.connectionProperties | toJson | b64enc | quote }} + {{- if .Values.otk.database.readOnlyConnection.enabled }} + OTK_RO_DATABASE_CONNECTION_NAME: {{ required "Please fill in otk.database.readOnlyConnection.connectionName in values.yaml" .Values.otk.database.readOnlyConnection.connectionName | quote }} + OTK_RO_JDBC_URL: {{ default .Values.otk.database.sql.jdbcURL .Values.otk.database.readOnlyConnection.jdbcURL | quote }} + OTK_RO_JDBC_DRIVER_CLASS: {{ default .Values.otk.database.sql.jdbcDriverClass .Values.otk.database.readOnlyConnection.jdbcDriverClass | quote }} + OTK_RO_DATABASE_PROPERTIES: {{ default "na" .Values.otk.database.readOnlyConnection.properties | toJson | b64enc | quote }} + OTK_RO_DATABASE_CONN_PROPERTIES: {{ default "na" .Values.otk.database.readOnlyConnection.connectionProperties | toJson | b64enc | quote }} + {{- end }} + {{- end }} + {{- if eq .Values.otk.database.type "oracle" }} + OTK_JDBC_URL: {{ required "Please fill in otk.database.sql.jdbcURL in values.yaml" .Values.otk.database.sql.jdbcURL | quote }} + OTK_DATABASE_NAME: {{ required "Please fill in otk.database.sql.databaseName in values.yaml" .Values.otk.database.sql.databaseName | quote }} + {{- if .Values.otk.database.readOnlyConnection.enabled }} + OTK_RO_DATABASE_NAME: {{ default .Values.otk.database.sql.databaseName .Values.otk.database.readOnlyConnection.databaseName | quote }} + {{- end }} + {{- end }} + {{- if eq .Values.otk.database.type "mysql" }} + {{- if (.Values.otk.database.useDemoDb)}} + OTK_JDBC_URL: jdbc:mysql://{{ .Release.Name }}-mysql:3306/{{ default "otk_db" .Values.otk.database.sql.databaseName }} + {{- else }} + OTK_JDBC_URL: {{ required "Please fill in otk.database.sql.jdbcURL in values.yaml" .Values.otk.database.sql.jdbcURL | quote }} + {{- end }} + {{- end }} + {{- end }} + OTK_UPDATE_DATABASE_CONNECTION: {{default false .Values.otk.database.updateConnection | quote }} + OTK_SKAR_RETRY_COUNT: {{ default 10 .Values.otk.installRetry | quote}} + OTK_SKAR_BACKOFF_FACTOR: {{ default 0.1 .Values.otk.installBackoffFactor | quote}} + OTK_CONNECT_BACKOFF_FACTOR: {{ default 0.1 .Values.otk.connectlBackoffFactor | quote}} + OTK_CONNECT_RETRY_COUNT: {{ default 10 .Values.otk.connectRetry | quote}} + SSG_RESTMAN_PORT: {{ default .Values.installSolutionKits.restmanPort .Values.otk.restmanPort | quote}} + SSG_RESTMAN_HOST: {{ template "otk.restmanhost" . }} + OTK_INTERNAL_GW_HOST: {{ default "" .Values.otk.internalGatewayHost | quote }} + OTK_INTERNAL_GW_PORT: {{ default "" .Values.otk.internalGatewayPort| quote }} + OTK_DMZ_GW_HOST: {{ default "" .Values.otk.dmzGatewayHost| quote }} + OTK_DMZ_GW_PORT: {{ default "" .Values.otk.dmzGatewayPort| quote }} + OTK_INTEGRATE_WITH_PORTAL: {{default false .Values.otk.enablePortalIntegration | quote }} + OTK_SKIP_POST_INSTALLATION_TASKS: {{default false .Values.otk.skipPostInstallationTasks | quote }} + OTK_DBMAINTENANCE_NET_MASK: {{ default "16" .Values.otk.networkMask| quote }} + OTK_DBMAINTENANCE_START_IP: {{ default "240.224.2.1" .Values.otk.startIP | quote }} +{{- end }} \ No newline at end of file diff --git a/charts/gateway/templates/otk-install-job.yaml b/charts/gateway/templates/otk-install-job.yaml index 477aa0ef..7761290c 100644 --- a/charts/gateway/templates/otk-install-job.yaml +++ b/charts/gateway/templates/otk-install-job.yaml @@ -1,4 +1,4 @@ -{{ if and (.Values.management.restman.enabled) (.Values.otk.enabled)}} +{{ if and (.Values.management.restman.enabled) (.Values.otk.enabled) (.Values.database.enabled)}} apiVersion: batch/v1 kind: Job metadata: @@ -7,6 +7,11 @@ metadata: chartversion: {{ .Chart.AppVersion | quote }} "helm.sh/hook": post-install,post-upgrade "helm.sh/hook-weight": "-4" + {{- if .Values.additionalAnnotations }} + {{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- end }} labels: app: {{ template "gateway.fullname" . }} chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" @@ -18,12 +23,6 @@ metadata: {{- range $key, $val := .Values.additionalLabels }} {{ $key }}: "{{ $val }}" {{- end }} - {{- if .Values.additionalAnnotations }} - annotations: -{{- range $key, $val := .Values.additionalAnnotations }} - {{ $key }}: "{{ $val }}" -{{- end }} -{{- end }} spec: backoffLimit: 1 template: @@ -44,85 +43,76 @@ spec: {{- end }} containers: - name: otk-install - image: {{.Values.image.registry}}/{{.Values.otk.job.image.repository}}:{{.Values.otk.job.image.tag}} + image: {{ template "otk.image" . }} imagePullPolicy: {{ .Values.otk.job.image.pullPolicy }} {{- if .Values.containerSecurityContext }} securityContext: {{- toYaml .Values.containerSecurityContext | nindent 12 }} {{- end }} + volumeMounts: + {{- if .Values.otk.customizations.existingBundle.enabled }} + {{- range .Values.otk.customizations.existingBundle.configMaps }} + - name: {{ .name }} + mountPath: /docker/custom_bundles/{{ .name }} + {{- end }} + {{- range .Values.otk.customizations.existingBundle.secrets }} + - name: {{ .name }} + mountPath: /docker/custom_bundles/{{ .name }} + {{ if .csi }} + readOnly: {{ .csi.readOnly }} + {{ end }} + {{- end }} + {{- end }} + + resources: {{- toYaml .Values.otk.job.resources | nindent 12 }} envFrom: - secretRef: name: {{ template "otk.dbSecretName" . }} - secretRef: name: {{ template "gateway.secretName" . }} - env: - - name: OTK_TYPE - value: {{ template "otk-install-type" .}} - - name: OTK_FORCE_INSTALL - value: {{default false .Values.otk.forceInstallOrUpgrade | quote}} -{{ if ne .Values.otk.type "DMZ" }} - - name: OTK_DATABASE_TYPE - value: {{ required "Please fill in otk.database.type in values.yaml" .Values.otk.database.type | quote }} - - name: OTK_DATABASE_CONNECTION_NAME - value: {{ required "Please fill in otk.database.connectionName in values.yaml" .Values.otk.database.connectionName | quote }} -{{ if eq .Values.otk.database.type "cassandra" }} - - name: OTK_CASSANDRA_CONNECTION_POINTS - value: {{ required "Please fill in otk.database.cassandra.connectionPoints in values.yaml" .Values.otk.database.cassandra.connectionPoints | quote }} - - name: OTK_CASSANDRA_PORT - value: {{ required "Please fill in otk.database.cassandra.port in values.yaml" .Values.otk.database.cassandra.port | quote }} - - name: OTK_CASSANDRA_KEYSPACE - value: {{ required "Please fill in otk.database.cassandra.keyspace in values.yaml" .Values.otk.database.cassandra.keyspace | quote }} - - name: OTK_CASSANDRA_DRIVER_CONFIG - value: {{ default "na" .Values.otk.database.cassandra.driverConfig | toJson | b64enc| quote }} -{{ end }} -{{ if or (eq .Values.otk.database.type "mysql") (eq .Values.otk.database.type "oracle") }} - - name: OTK_JDBC_URL - value: {{ required "Please fill in otk.database.sql.jdbcURL in values.yaml" .Values.otk.database.sql.jdbcURL | quote }} - - name: OTK_JDBC_DRIVER_CLASS - value: {{ required "Please fill in otk.database.sql.jdbcDriverClass in values.yaml" .Values.otk.database.sql.jdbcDriverClass | quote }} -{{ end }} -{{ if eq .Values.otk.database.type "oracle" }} - - name: OTK_DATABASE_NAME - value: {{ required "Please fill in otk.database.sql.databaseName in values.yaml" .Values.otk.database.sql.databaseName | quote }} -{{ end }} - - name: OTK_DATABASE_PROPERTIES - value: {{ default "na" .Values.otk.database.properties | toJson | b64enc | quote }} -{{ end }} - - name: OTK_SKAR_RETRY_COUNT - value: {{ default 1 .Values.otk.installRetry | quote}} - - name: OTK_SKAR_BACKOFF_FACTOR - value: {{ default 0.1 .Values.otk.installBackoffFactor | quote}} - - name: OTK_CONNECT_BACKOFF_FACTOR - value: {{ default 0.1 .Values.otk.connectlBackoffFactor | quote}} - - name: OTK_CONNECT_RETRY_COUNT - value: {{ default 10 .Values.otk.connectRetry | quote}} - - name: SSG_RESTMAN_PORT - value: {{ .Values.installSolutionKits.restmanPort | quote}} - - name: SSG_RESTMAN_HOST - value: {{ template "gateway.fullname" . }} - - name: OTK_INTERNAL_GW_HOST - value: {{ .Values.otk.internalGatewayHost | quote }} - - name: OTK_INTERNAL_GW_PORT - value: {{ .Values.otk.internalGatewayPort| quote }} - - name: OTK_DMZ_GW_HOST - value: {{ .Values.otk.dmzGatewayHost| quote }} - - name: OTK_DMZ_GW_PORT - value: {{ .Values.otk.dmzGatewayPort| quote }} - - name: OTK_INTEGRATE_WITH_PORTAL - value: {{default false .Values.otk.enablePortalIngeration | quote }} - - name: OTK_SKIP_POST_INSTALLATION_TASKS - value: {{default false .Values.otk.skipPostInstallationTasks | quote }} - - name: SSK_NAMES - value: {{ .Values.otk.solutionKitNames | quote }} + {{- if and (.Values.otk.database.readOnlyConnection.enabled) (ne .Values.otk.database.type "cassandra") }} + - secretRef: + name: {{ template "otk.dbSecretName.readOnly" . }} + {{ end }} + - configMapRef: + name: {{ template "gateway.fullname" . }}-otk-install-configmap + + volumes: + {{- if .Values.otk.customizations.existingBundle.enabled }} + {{- range .Values.otk.customizations.existingBundle.configMaps }} + - name: {{ .name }} + {{- if .configMap }} + configMap: {{ toYaml .configMap | nindent 12 }} + {{- else }} + configMap: + defaultMode: 292 + optional: false + name: {{ .name }} + {{- end }} + {{- end }} + {{- range .Values.otk.customizations.existingBundle.secrets }} + - name: {{ .name }} + {{- if .csi }} + csi: {{ toYaml .csi | nindent 12 }} + {{- else }} + secret: + secretName: {{ .name }} + {{- end }} + {{- end }} + {{- end }} + + {{- if .Values.otk.job.nodeSelector }} + nodeSelector: {{- toYaml .Values.otk.job.nodeSelector | nindent 8 }} + {{- end }} -{{- if .Values.imagePullSecret.enabled }} + {{- if or (.Values.imagePullSecret.enabled) (.Values.otk.job.imagePullSecret.enabled) }} imagePullSecrets: - - name: {{ template "gateway.imagePullSecret" . }} -{{- end }} -{{- if .Values.otk.job.nodeSelector }} - nodeSelector: {{- toYaml .Values.otk.jobs.nodeSelector | nindent 12 }} -{{- end }} -{{- if .Values.otk.job.tolerations }} - tolerations: {{- toYaml .Values.otk.jobs.tolerations | nindent 12 }} -{{- end }} + - name: {{ template "otk.imagePullSecret" . }} + {{- end }} + + {{- if .Values.otk.job.tolerations }} + tolerations: {{- toYaml .Values.otk.job.tolerations | nindent 8 }} + {{- end }} + restartPolicy: "Never" + {{ end }} diff --git a/charts/gateway/templates/otk-ro-db-secret.yaml b/charts/gateway/templates/otk-ro-db-secret.yaml new file mode 100644 index 00000000..bd813331 --- /dev/null +++ b/charts/gateway/templates/otk-ro-db-secret.yaml @@ -0,0 +1,26 @@ +{{ if and (.Values.management.restman.enabled) (.Values.otk.enabled) (.Values.otk.database.readOnlyConnection.enabled) (not .Values.otk.database.readOnlyConnection.existingSecretName) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "otk.dbSecretName.readOnly" . }} + labels: + app: {{ template "gateway.name" . }} + chart: {{ template "gateway.chart" . }} + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- if .Values.additionalAnnotations }} + annotations: + "helm.sh/hook": pre-install,pre-upgrade + "helm.sh/hook-weight": "-5" +{{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" +{{- end }} +{{- end }} +type: Opaque +data: + OTK_RO_DATABASE_PASSWORD : {{ required "Please fill in otk.database.readOnlyConnection.password in values.yaml" .Values.otk.database.readOnlyConnection.password | b64enc }} + OTK_RO_DATABASE_USERNAME : {{ required "Please fill in otk.database.readOnlyConnection.username in values.yaml" .Values.otk.database.readOnlyConnection.username| b64enc }} +{{ end }} \ No newline at end of file diff --git a/charts/gateway/templates/otk-scheduled-task-jobs.yaml b/charts/gateway/templates/otk-scheduled-task-jobs.yaml new file mode 100644 index 00000000..803f0475 --- /dev/null +++ b/charts/gateway/templates/otk-scheduled-task-jobs.yaml @@ -0,0 +1,76 @@ +{{ if and (.Values.otk.enabled) (not .Values.database.enabled) (ne .Values.otk.database.type "cassandra") (ne .Values.otk.type "DMZ") (.Values.otk.job.scheduledTasks)}} +{{- range $name, $schedule := .Values.otk.job.scheduledTasks }} +apiVersion: batch/v1 +kind: CronJob +metadata: + name: {{ template "gateway.fullname" $ }}-dbmaintenance-{{ .name }} + annotations: + chartversion: {{ $.Chart.AppVersion | quote }} + {{- if $.Values.additionalAnnotations }} + {{- range $key, $val := $.Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- end }} + labels: + app: {{ template "gateway.fullname" $ }} + chart: "{{ $.Chart.Name }}-{{ $.Chart.Version }}" + release: {{ $.Release.Name }} + heritage: {{ $.Release.Service }} + {{- range $key, $val := $.Values.otk.job.labels }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- range $key, $val := $.Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} +spec: + schedule: {{ .schedule | quote }} + concurrencyPolicy: "Forbid" + successfulJobsHistoryLimit: 1 + jobTemplate: + spec: + template: + metadata: + labels: + app: {{ template "gateway.fullname" $}} + release: {{ $.Release.Name }} + {{- if $.Values.otk.job.podLabels }} + {{- toYaml $.Values.otk.job.podLabels | nindent 12}} + {{- end }} + {{- if $.Values.otk.job.podAnnotations }} + annotations: {{- toYaml $.Values.otk.job.podAnnotations | nindent 12 }} + {{- end }} + spec: + {{- if $.Values.podSecurityContext }} + securityContext: {{- toYaml $.Values.podSecurityContext | nindent 12 }} + {{- end }} + containers: + - name: otk-schedule-task + image: {{ template "otk.image" $ }} + imagePullPolicy: {{ $.Values.otk.job.image.pullPolicy }} + resources: {{- toYaml $.Values.otk.job.resources | nindent 14 }} + {{- if $.Values.containerSecurityContext }} + securityContext: {{- toYaml $.Values.containerSecurityContext | nindent 14 }} + {{- end }} + env: + - name: SCHEDULE_TASK_URL + value: https://{{ template "gateway.fullname" $ }}:8443/oauth/db-maintenance?task={{ .name }} + - name: OTK_SCHEDULE_JOB_SERVICE + value: "true" + + {{- if $.Values.otk.job.nodeSelector }} + nodeSelector: {{- toYaml $.Values.otk.job.nodeSelector | nindent 12 }} + {{- end }} + + {{- if or ($.Values.imagePullSecret.enabled) ($.Values.otk.job.imagePullSecret.enabled) }} + imagePullSecrets: + - name: {{ template "otk.imagePullSecret" $ }} + {{- end }} + + {{- if $.Values.otk.job.tolerations }} + tolerations: {{- toYaml $.Values.otk.job.tolerations | nindent 10 }} + {{- end }} + + restartPolicy: Never +--- +{{- end }} +{{- end }} diff --git a/charts/gateway/templates/redis-config-secret.yaml b/charts/gateway/templates/redis-config-secret.yaml new file mode 100644 index 00000000..f343aecd --- /dev/null +++ b/charts/gateway/templates/redis-config-secret.yaml @@ -0,0 +1,62 @@ +{{- if and (.Values.config.redis.enabled) (not .Values.config.redis.existingConfigSecret)}} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "redisConfigSecretName" . }} + labels: + app: {{ template "gateway.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- if .Values.additionalAnnotations }} + annotations: +{{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" +{{- end }} +{{- end }} +type: Opaque +stringData: + redis.properties: |+ + {{- if .Values.config.redis.sentinel.enabled }} + redis.type=sentinel + redis.sentinel.master={{ .Values.config.redis.sentinel.masterSet }} + {{- if .Values.config.redis.subChart.enabled }} + redis.sentinel.nodes={{ .Release.Name }}-redis-node-0.{{ .Release.Name }}-redis-headless.{{ .Release.Namespace }}.svc.cluster.local:26379,{{ .Release.Name }}-redis-node-1.{{ .Release.Name }}-redis-headless.{{ .Release.Namespace }}.svc.cluster.local:26379,{{ .Release.Name }}-redis-node-2.{{ .Release.Name }}-redis-headless.{{ .Release.Namespace }}.svc.cluster.local:26379 + {{- else }} + redis.sentinel.nodes={{ template "gateway.redisSentinelNodes" . }} + {{- end }} + {{- if .Values.config.redis.auth.enabled }} + {{- if .Values.config.redis.auth.username }} + redis.sentinel.username={{.Values.config.redis.auth.username}} + {{- end }} + {{- if .Values.config.redis.auth.password.encoded }} + redis.sentinel.encodedPassword={{.Values.config.redis.auth.password.value}} + {{- else }} + redis.sentinel.password={{.Values.config.redis.auth.password.value}} + {{- end }} + {{- end }} + redis.ssl={{ .Values.config.redis.tls.enabled }} + {{- if .Values.config.redis.tls.enabled }} + redis.ssl.cert=redis.crt + redis.ssl.verifypeer={{ .Values.config.redis.tls.verifyPeer }} + {{- end }} + {{- else }} + redis.type=standalone + {{- if .Values.config.redis.subChart.enabled }} + redis.standalone.hostname={{ .Release.Name }}-redis-master-0.{{ .Release.Name }}-redis-headless.{{ .Release.Namespace }}.svc.cluster.local + redis.standalone.port=6379 + {{- else }} + redis.standalone.hostname={{ .Values.config.redis.standalone.host }} + redis.standalone.port={{ .Values.config.redis.standalone.port }} + {{- end }} + {{- end }} + {{- if .Values.config.redis.groupName }} + redis.key.prefix.grpname={{ .Values.config.redis.groupName }} + {{- end }} + {{- if .Values.config.redis.commandTimeout }} + redis.commandTimeout={{ .Values.config.redis.commandTimeout }} + {{- end }} +{{- end }} \ No newline at end of file diff --git a/charts/gateway/templates/redis-tls-secret.yaml b/charts/gateway/templates/redis-tls-secret.yaml new file mode 100644 index 00000000..9c974f4a --- /dev/null +++ b/charts/gateway/templates/redis-tls-secret.yaml @@ -0,0 +1,23 @@ +{{- if and (.Values.config.redis.enabled) (.Values.config.redis.sentinel.enabled) (.Values.config.redis.tls.enabled) (not .Values.config.redis.tls.existingSecret) (not .Values.config.redis.subChart.enabled) }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ template "redisTlsSecretName" . }} + labels: + app: {{ template "gateway.name" . }} + chart: "{{ .Chart.Name }}-{{ .Chart.Version }}" + release: {{ .Release.Name }} + heritage: {{ .Release.Service }} + {{- range $key, $val := .Values.additionalLabels }} + {{ $key }}: "{{ $val }}" + {{- end }} + {{- if .Values.additionalAnnotations }} + annotations: +{{- range $key, $val := .Values.additionalAnnotations }} + {{ $key }}: "{{ $val }}" +{{- end }} +{{- end }} +type: Opaque +data: + tls.crt: {{ .Values.config.redis.tls.redisCrt | b64enc }} +{{- end }} \ No newline at end of file diff --git a/charts/gateway/templates/secret.yaml b/charts/gateway/templates/secret.yaml index 8c7ad7b9..8ea27dc6 100644 --- a/charts/gateway/templates/secret.yaml +++ b/charts/gateway/templates/secret.yaml @@ -13,6 +13,8 @@ metadata: {{- end }} {{- if .Values.additionalAnnotations }} annotations: + "helm.sh/hook": pre-install,post-upgrade + "helm.sh/hook-weight": "-5" {{- range $key, $val := .Values.additionalAnnotations }} {{ $key }}: "{{ $val }}" {{- end }} @@ -31,4 +33,4 @@ data: {{ $key }}: {{ $val | toString | b64enc }} {{- end }} {{ end }} -{{ end }} +{{ end }} \ No newline at end of file diff --git a/charts/gateway/values.yaml b/charts/gateway/values.yaml index c4e3fb6a..720b4f6d 100644 --- a/charts/gateway/values.yaml +++ b/charts/gateway/values.yaml @@ -12,7 +12,7 @@ license: image: registry: docker.io repository: caapim/gateway - tag: 11.0.00 + tag: 11.0.00_CR2 pullPolicy: IfNotPresent # If you are using a Hazelcast 3.x server then you need to set hazelcast.legacy.enabled=true @@ -214,6 +214,10 @@ config: javax.net.ssl.trustStoreType=jks # Period of time before the Gateway removes inactive nodes. com.l7tech.server.clusterStaleNodeCleanupTimeoutSeconds=86400 + # Redis configuration - uncomment to use Redis + # com.l7tech.server.extension.sharedKeyValueStoreProvider=redis + # com.l7tech.server.extension.sharedCounterProvider=redis + # com.l7tech.server.extension.sharedRateLimiterProvider=redis # Additional properties go here # If enabled this will override the default listen ports and their configuration in the API Gateway @@ -354,6 +358,58 @@ config: # - Built-in services tls: enabled: false + redis: + # enable or disable redis integration + # please uncomment the 3 redis properties in config.systemProperties + # Redis client properties for configuring Redis Standalone or Redis Sentinel connections + enabled: false + # We recommend using an existing secret for Redis configuration in production environments + # for separation of concerns and to better secure Redis client property secrets. + # redis configuration must have a key called redis.properties (see the Redis Configuration in the readme for more details) + # existingConfigSecret: redis-config-secret + # To configure the Redis client directly in this values file uncomment and/or set the following client properties + groupName: l7GW + commandTimeout: 5000 + # The Gateway supports Redis master auth only. + # If trying out auth using the subChart redis.auth.enabled should be true, and redis.auth.sentinel should be false (default) + # If redis.auth.sentinel is enabled in the redis subChart or on your External Redis Sentinel Deployment, the Gateway will fail to start. + auth: + enabled: false + # username: username + password: + encoded: false + value: mypassword + # In standalone mode auth and ssl/tls is not available + # this is for testing only and is not supported in + # production environments + sentinel: + enabled: true + masterSet: mymaster + # If the subChart is not enabled sentinel nodes need to be set + nodes: + - : + - : + - : + standalone: {} + # host: redis-standalone + # port: 6379 + tls: + enabled: true + existingSecret: "" + verifyPeer: true + # redisCrt: |+ + # -----BEGIN CERTIFICATE----- + # MIIEGzCCAwOgAwIBAgIRANzOj1Mgxk7VRFClPaQnUGgwDQYJKoZIhvcNAQELBQAw + # .... + # -----END CERTIFICATE----- + # Enable subChart to have Helm optionally deploy Redis Sentinel/Standalone with your gateways. + subChart: + # If the subChart is enabled, configuration from redis in the subCharts section + # will need to match the auth and tls settings here. This is true by default so no + # changes will be required + # Using Redis as a subChart is not recommended in production, please use your own Redis for this integration. + enabled: false + ## Reference an existing secret for sensitive Gateway fields ## Note that additionalSecret will no longer take effect when existingGatewaySecret is set. @@ -400,6 +456,11 @@ tls: # Cluster Password clusterPassword: mypassword +# Rollout Gateway deployment when the primary Gateway ConfigMap Changes. +# This does not apply to cluster wide properties, listen ports or the Gateway secret +restartOnConfigChange: + enabled: false + # This enables/disables Policy Manager Access and sets the SSG_ADMIN username and password # Credentials will be moved to a secret object in the next push.. management: @@ -485,36 +546,107 @@ service: # This enables/disables otk install or upgrade. # Prerequisites. # 1. OTK DB is installed. -# 2. restman is enabled. Can be disabled once the install/upgrage is complete (management.restman.enabled: true) -# Note: In dual gateway installation, restart the pods after OTK install or upgrade. +# 2. Restman is enabled for DB backed Gateway. Can be disabled once the install/upgrade is complete (management.restman.enabled: true) +# Note: In dual gateway installation, restart the pods after OTK install or upgrade. otk: enabled: false # OTK installation type - SINGLE, DMZ or INTERNAL type: SINGLE - # Force install or upgrade by uninstalling existing otk soluction kit and install. - # forceInstallOrUpgrade: false + # Force install or upgrade by uninstalling existing otk solution kit and install. + forceInstallOrUpgrade: false - # Not applicable for DMZ and INTERNAL OTK types - # enablePortalIngeration: false - # skipPostInstallationTasks: false + # Not applicable for DMZ and INTERNAL OTK types. Install/Upgrade portal sub solution kits. + enablePortalIntegration: false + skipPostInstallationTasks: false + skipInternalServerTools: false + + # Restman host and port (optional). Valid only for db backed gateways + # Default - gateway service + # restmanHost: + # Default - installSolutionKits.restmanPort + # restmanPort: # Specify internal gateway host and port for DMZ OTK type # internalGatewayHost: # internalGatewayPort: - # Specify DMZ gateway host and port for interal OTK type + # Specify DMZ gateway host and port for internal OTK type # dmzGatewayHost: # dmzGatewayPort: - # List of comma seperated sub soluction Kits to install or upgrade. + # Network mask and startIP used in the 'Restrict Access to IP Address Range Assertion' to protect the schedule jobs and health checks. + # The db maintenance and health check services can accessible based on the IP address. + # https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-gateway/10-1/policy-assertions/assertion-palette/service-availability-assertions/restrict-access-to-ip-address-range-assertion.html + # networkMask: 16 + # startIP: 240.224.2.1 + + cert: + # Specify DMZ gateway certificates that needs to be imported to Internal GW (for ephemeral gateway) + # dmzGatewayCert: + # dmzGatewayIssuer: + # dmzGatewaySerial: + # dmzGatewaySubject: + + # Specify Internal gateway certificates that needs to be imported for DMZ GW (for ephemeral gateway) + # internalGatewayCert: + # internalGatewayIssuer: + # internalGatewaySerial: + # internalGatewaySubject: + + # List of comma separated sub solution Kits to install or upgrade. # subSolutionKitNames: + customizations: + + # This mounts one or more bundles that exist as secrets or configmaps in your Kubernetes Cluster. + # When creating these secrets/configmaps the format should be + # key: bundle1.bundle value: + # Each bundle that you create as a ConfigMap can not exceed 1MB in size. + # Ephemeral Gateway: Copies the bundles into Gateways bundle folder (/opt/SecureSpan/Gateway/node/default/etc/bootstrap/bundle/000OTK) + # DB backed Gateway: Applies bundles to the Gateway using Restman calls (PUT /restman/1.0/bundle) + existingBundle: + enabled: false + configMaps: [] + # - name: otkbundle1 + # configMap: + # defaultMode: 420 + # optional: false + # name: otkbundle1 + # - name: otkbundle1 + + secrets: [] + # - name: secretotkbundle1 + # csi: + # driver: secrets-store.csi.k8s.io + # readOnly: true + # volumeAttributes: + # secretProviderClass: "secret-provider-class-name" + # - name: secretotkbundle2 + job: image: repository: caapim/otk-install - tag: 4.6.1 + tag: 4.6.2 pullPolicy: IfNotPresent + imagePullSecret: + enabled: false + + # Valid only for ephemeral gateway. Creates cronJobs for each OTK DB maintenance schedule tasks. + scheduledTasks: + - name: client + schedule: "*/31 * * * *" + - name: idtoken + schedule: "*/29 * * * *" + - name: sessions + schedule: "*/7 * * * *" + - name: token + schedule: "*/5 * * * *" + - name: trl + schedule: "0 */1 * * *" + - name: miscellaneous + schedule: "*/5 * * * *" + labels: {} # nodeSelector: {} # tolerations: [] @@ -525,41 +657,96 @@ otk: # Pod Annotations apply to the OTK install Pod ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/annotations/ podAnnotations: {} + + resources: + requests: {} + # memory: 64Mi + # cpu: 200m + limits: {} + # memory: 128Mi + # cpu: 250m + database: # OTK database type - mysql/oracle/cassandra type: mysql - # connectionName: OAuth - # existingSecretName: otkdb-secret - username: root - password: 7layer - # properties: {"maximumPoolSize":15, "minimumPoolSize":3} + connectionName: OAuth + dbUpgrade: true + useDemoDb: true + + # OTK database user name and password used to create Gateway Database/cassandra connection. + username: otk_user + password: mypassword + + # existingSecretName: otkDbSecret + + # Database connection properties + properties: {"maximumPoolSize":15, "minimumPoolSize":3} + + # For Cassandra driverConfig is supported from GW 11.0. Either otk.database.cassandra.driverConfig or otk.database.properties should be provided # properties: {"localDataCenterName" : "DC1"} + + # Update database connection properties during helm upgrade. + updateConnection: true + + # If using existing non liquibase OTK DB then perform manual OTK DB upgrade and set 'changeLogSync' to true. + # This is a onetime activity to initialize liquibase related tables on OTK DB. Set to false for successive helm upgrade. + changeLogSync: false + sql: + + # If provided, used to create OTK schema and tables. + # ddlUsername: + # ddlPassword: + # jdbcURL: jdbc:mysql://:/ jdbcURL: - jdbcDriverClass: com.l7tech.jdbc.mysql.MySQLDriver + jdbcDriverClass: com.mysql.jdbc.Driver + # Oracle database name or MySQL demo db name + databaseName: otk_db + + # c3p0 connection properties. + # connectionProperties: {"c3p0.maxConnectionAge":"100","c3p0.maxIdleTime":"1000"} + + # For mysql & oracle setup test clients + createTestClients: false + # Test clients redirect Url prefix. Required if createTestClients is true. + testClientsRedirectUrlPrefix: + + cassandra: + # connectionPoints: + # port: + # keyspace: + # For Cassandra driverConfig is supported from GW 11.0. Either otk.database.cassandra.driverConfig or otk.database.properties should be provided + # driverConfig: {"localDataCenterName" : "DC1"} + + # Optionally configure read only database connection for MySQL/Oracle. + readOnlyConnection: + enabled: false + # connectionName: OAuth_ReadOnly + # existingSecretName: otkReadOnlyDbSecret + # username: root + # password: 7layer + # properties: {"maximumPoolSize":15, "minimumPoolSize":3} + # connectionProperties: {"c3p0.maxConnectionAge":"100","c3p0.maxIdleTime":"1000"} + + jdbcURL: jdbc:mysql://:/ + jdbcDriverClass: com.mysql.jdbc.Driver # Oracle database name - # databaseName: - # cassandra: - # connectionPoints: localhost - # port: - # keyspace: - # For Cassandra driverConfig is supported from GW 11.0. Either otk.database.cassandra.driverConfig or otk.database.properties should be provided - # driverConfig: {"localDataCenterName" : "DC1"} + databaseName: # Install OTK Health check bundle on gateway. Uses config map. # Alternatively the bundle can be loaded using config map external to helm (useExisting: true) # The bundle content can be found at https://github.com/CAAPIM/apim-charts/blob/stable/charts/gateway/bundles/otk-healthcheck.bundle healthCheckBundle: - enabled: true + enabled: false useExisting: false name: otk-health-check-bundle-config # OTK Specific configuration: # - The liveliness probe is not supported for OTK 4.6 & below versions. # - Only valid for SINGLE and INTERNAL OTK types. Not be enabled for a DMZ OTK type. - # - In a dual gateway OTK setup, it is recomended enable liveness probe after the pods restart. - # - Should be enabled after otk installation. + # - In a dual gateway OTK setup, it is recommended enable liveness probe after the pods restart. + # - Should be enabled after OTK installation. # - otk.livenessProbe.type as httpGet # - otk.livenessProbe.path /auth/oauth/health # - otk.livenessProbe.port 8443 @@ -568,13 +755,14 @@ otk: enabled: false type: httpGet httpGet: - path: - port: + path: /auth/oauth/health + port: 8443 + # OTK Specific configuration: # - The readinessProbe probe is not supported for OTK 4.6 & below versions. # - Only valid for SINGLE and INTERNAL OTK types. Not be enabled for a DMZ OTK type. - # - In a dual gateway OTK setup, it is recomended enable readiness probe after the pods restart. - # - Should be enabled after otk installation. + # - In a dual gateway OTK setup, it is recommended enable readiness probe after the pods restart. + # - Should be enabled after OTK installation. # - otk.readinessProbe.type as httpGet # - otk.readinessProbe.path /auth/oauth/health # - otk.readinessProbe.port 8443 @@ -583,8 +771,8 @@ otk: enabled: false type: httpGet httpGet: - path: - port: + path: /auth/oauth/health + port: 8443 # This project does not currently support Google's GCE controller. # The default way to expose the Gateway is via L4 Load Balancer because it goes far beyond the HTTP(S) limitation ingress currently imposes @@ -620,10 +808,11 @@ ingress: # number: # - host: dev1.ca.com # path: "/" + # backend: management # service: # port: - # name: anotherport - # #number: + # name: management + # #number: # Additional Environment variables to be added to the Gateway Configmap additionalEnv: {} @@ -826,6 +1015,70 @@ installSolutionKits: ## Subchart Configuration ## +# Settings for Redis - https://github.com/bitnami/charts/tree/master/bitnami/redis +redis: + auth: + # The Gateway supports Redis master auth in sentinel mode only, set this value to true to enable auth. + enabled: false + # Sentinel auth which enables password authentication on sentinels too is not supported by the Gateway and should remain false + sentinel: false + password: "mypassword" + tls: + enabled: true + authClients: false + # this only applies if redis.subChart.enabled is true + autoGenerated: true + image: + registry: docker.io + repository: bitnami/redis + tag: 7.2.1-debian-11-r0 + pullPolicy: IfNotPresent + # replication or standalone + architecture: replication + master: + count: 1 + configuration: "" + disableCommands: + - FLUSHDB + - FLUSHALL + persistence: + enabled: false + size: 20Gi + service: + type: LoadBalancer + replica: + replicaCount: 3 + containerPorts: + redis: 6379 + resources: + limits: {} + requests: {} + persistence: + enabled: false + sizeLimit: "" + accessModes: + - ReadWriteOnce + size: 20Gi + # service: + # type: LoadBalancer + # externalTrafficPolicy: Local + sentinel: + enabled: true + # service: + # type: LoadBalancer + # externalTrafficPolicy: Local + image: + registry: docker.io + repository: bitnami/redis-sentinel + tag: 7.2.1-debian-11-r0 + digest: "" + pullPolicy: IfNotPresent + masterSet: mymaster + quorum: 2 + resources: + limits: {} + requests: {} + # MySQL Bitnami chart - https://github.com/bitnami/charts/tree/master/bitnami/mysql (DO NOT USE IN PRODUCTION!!) mysql: image: @@ -840,6 +1093,7 @@ mysql: password: mypassword database: ssg rootPassword: mypassword + initdbScriptsConfigMap: otk-db-scripts-cm primary: # persistence: # enabled: true @@ -874,6 +1128,13 @@ mysql: port=3306 socket=/opt/bitnami/mysql/tmp/mysql.sock pid-file=/opt/bitnami/mysql/tmp/mysqld.pid + persistence: + annotations: + helm.sh/hook: pre-install,post-upgrade + helm.sh/hook-weight: "-10" + commonAnnotations: + helm.sh/hook: pre-install,post-upgrade + helm.sh/hook-weight: "-10" # Settings for Hazelcast - https://github.com/hazelcast/charts/blob/master/stable/hazelcast/values.yaml # The Gateway currently supports Hazelcast 4.x & 5.x servers diff --git a/charts/portal/Chart.lock b/charts/portal/Chart.lock index bcf0cd5e..27c176b2 100644 --- a/charts/portal/Chart.lock +++ b/charts/portal/Chart.lock @@ -12,4 +12,4 @@ dependencies: repository: https://kubernetes.github.io/ingress-nginx/ version: 4.7.2 digest: sha256:52ddb3e04c6f6b75b023041b9cca016beb93590982f57379950b0ee18b6691c1 -generated: "2024-01-23T15:57:52.7895836+05:30" +generated: "2024-01-23T15:57:52.7895836+05:30" \ No newline at end of file diff --git a/examples/otk/README.md b/examples/otk/README.md new file mode 100644 index 00000000..58ee526c --- /dev/null +++ b/examples/otk/README.md @@ -0,0 +1,214 @@ +# OTK Gateway Deployment Examples +These examples cover different ways in which OTK can be deployed on Gateway using Gateway Helm Chart. + +At a high level the deployment can be categorized based on Gateway type (database backed/Ephemeral) and OTK Type (SINGLE/INTERNAL/DMZ). It determines how the OTK is installed or upgraded on the gateway. + +OTK installation involves +1. Installation or upgrade of OTK solution kit. +2. Installation or upgrade of OTK Database. +3. Installation or upgrade of OTK customizations. + +| OTK Type | Database backed Gateway
    (database.enabled=true) | Ephemeral Gateway
    (database.enabled=false) | +| ------------------------ | ---------------------- | --------------------- | +| Solution Kit Install/Upgrade |

    |
    • Uses kubernetes init-container to bootstrap Gateway with OTK solution kits
    • Runs before start of Gateway
    • OTK Dual Gateway (DMZ/INTERNAL) configuration is not supported.
    | +| OTK Database Install/upgrade
    ***(Not applicable for OTK type DMZ and OTK DB type - Cassandra)*** |
    • Uses pre-install kubernetes Job (Liqiubase scripts)
    • Runs before Gateway startup
    |
    • Uses pre-install kubernetes Job (Liqiubase scripts)
    • Runs before Gateway startup
    | +| Customizations |
    • Restman bundles applied using restman calls after Gateway startup which can be Kubernetes Config Maps and/or Secrets
    • Init containers - Bootstrapped on to Gateway
    |
    • Restman bundles bootstrapped on to gateway which can be Kubernetes Config Maps and/or Secrets
    • Init Containers - Bootstrapped on to Gateway
    | + +* [Quick Start](#quick-start) +* [OTK with MySQL/Oracle database](#otk-with-mysql-or-oracle-database) +* [OTK With Cassandra database](#otk-with-cassandra-database) +* [Customizations (optional)](#customizations) +* [Health checks (optional)](#health-checks) +* [Miscellaneous configurations (optional)](#miscellaneous-configurations) + +### Quick Start + +OTK can be installed by otk.enabled=true. This will create OTK database using MySQL subchart and then bootstraps the OTK bundles on to the gateway (type SINGLE). The usage of MySQL subchart for OTK database do not represent production configuration. + +Add the layer7 repository: + + helm repo add layer7 https://caapim.github.io/apim-charts/ + helm repo update + +Then, you can install OTK on ephemeral gateway: + + helm install otk layer7/gateway --set-file "license.value=path/license.xml" \ + --set "license.accept=true,database.enabled=false,otk.enabled=true" + +Or, install OTK on db backed gateway: + + helm install otk layer7/gateway --set-file "license.value=path/license.xml" \ + --set "license.accept=true,management.restman.enabled=true,otk.enabled=true" + +# High Level + +![image](https://github.com/APIM-KiranVaddadi/apim-charts/assets/59958248/0ea19c0d-5aee-4083-aacc-7f8c9c537592) + +## OTK Solution Kits +The sub solution kits that are used in the installation or upgrade process are determined based on `otk.type` and the `otk.database.type`. This also determines additional configuration needed in case of `DMZ` and `INTERNAL` otk type installation. Optional configurations that also determine the sub solutions that are installed. +- `enablePortalIntegration` +- `skipInternalServerTools` + +| OTK Type
    `otk.type` | Installed Sub solution Kits | Additional Configuration Neeed | +| ---------------------- | --------------------- | ------------------ | +| `SINGLE` |

    2|2RK+l9SN8)>0K%?OyvJC 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 From 62e5d7809f8f9fb3b49adfa3ce0e8b294e6bf08e Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 16:28:50 +0530 Subject: [PATCH 49/62] Updating production-values.yaml --- charts/portal/values-production.yaml | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index 8cba60de..a2957b4f 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -554,9 +554,8 @@ druid: # consider changing to mode... standalone/distributed. # Once Portal is installed, minio can not be scaled up or down. replicaCount: 4 - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} image: @@ -622,9 +621,8 @@ druid: create: false maxUnavailable: "" minAvailable: "" - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} resources: @@ -684,9 +682,8 @@ druid: create: false maxUnavailable: "" minAvailable: "" - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} resources: @@ -747,9 +744,8 @@ druid: create: false maxUnavailable: "" minAvailable: "" - podSecurityContext: - fsGroup: 1001 - runAsNonRoot: true + # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod + podSecurityContext: {} # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} resources: From c23dee598d7f3fa8d98a0334734aeedc230a5632 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 16:43:28 +0530 Subject: [PATCH 50/62] druid changes --- .../templates/kafka/kafka-statefulset.yaml | 6 +++--- .../templates/minio/minio-statefulset.yaml | 10 +++++----- charts/portal/charts/druid-1.0.13.tgz | Bin 9480 -> 9453 bytes 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/charts/druid/templates/kafka/kafka-statefulset.yaml b/charts/druid/templates/kafka/kafka-statefulset.yaml index d74bbef4..23bc2940 100644 --- a/charts/druid/templates/kafka/kafka-statefulset.yaml +++ b/charts/druid/templates/kafka/kafka-statefulset.yaml @@ -45,6 +45,9 @@ spec: securityContext: {{- toYaml .Values.kafka.podSecurityContext | nindent 12 }} {{- else if .Values.global.podSecurityContext }} securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} + {{- else }} + securityContext: + fsGroup: 1010 {{- end }} containers: - name: kafka @@ -54,9 +57,6 @@ spec: securityContext: {{- toYaml .Values.kafka.containerSecurityContext | nindent 12 }} {{- else if .Values.global.containerSecurityContext }} securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} - {{- else }} - securityContext: - fsGroup: 1010 {{- end }} envFrom: - configMapRef: diff --git a/charts/druid/templates/minio/minio-statefulset.yaml b/charts/druid/templates/minio/minio-statefulset.yaml index ce479647..b2a2ba36 100644 --- a/charts/druid/templates/minio/minio-statefulset.yaml +++ b/charts/druid/templates/minio/minio-statefulset.yaml @@ -46,11 +46,6 @@ spec: securityContext: {{- toYaml .Values.minio.podSecurityContext | nindent 12 }} {{- else if .Values.global.podSecurityContext }} securityContext: {{- toYaml .Values.global.podSecurityContext | nindent 12 }} - {{- end }} - {{- if .Values.minio.containerSecurityContext }} - securityContext: {{- toYaml .Values.minio.containerSecurityContext | nindent 12 }} - {{- else if .Values.global.containerSecurityContext }} - securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} {{- else }} securityContext: fsGroup: 1010 @@ -68,6 +63,11 @@ spec: name: minio image: "{{ .Values.global.portalRepository }}{{ .Values.image.minio }}" imagePullPolicy: "{{ .Values.minio.image.pullPolicy }}" + {{- if .Values.minio.containerSecurityContext }} + securityContext: {{- toYaml .Values.minio.containerSecurityContext | nindent 12 }} + {{- else if .Values.global.containerSecurityContext }} + securityContext: {{- toYaml .Values.global.containerSecurityContext | nindent 12 }} + {{- end }} env: - name: MINIO_ACCESS_KEY valueFrom: diff --git a/charts/portal/charts/druid-1.0.13.tgz b/charts/portal/charts/druid-1.0.13.tgz index 0f3dba76216f6986c952a2efbe47aba7aeb3fe95..8c4c8b945e19d2027cc5cffd7e3c2b7641c728ea 100644 GIT binary patch delta 9189 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 From 23f36bbd0a958f4cd91fc67480a00e7113c1818b Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 16:51:58 +0530 Subject: [PATCH 51/62] Removing redundant comments --- charts/portal/values.yaml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index c43b5bd2..0e4f6fec 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -822,13 +822,6 @@ mysql: elevate-admin.sql: | GRANT ALL PRIVILEGES ON *.* TO 'portal'@'%'; FLUSH PRIVILEGES; primary: - # primary: - # podSecurityContext: - # enabled: true - # fsGroup: 100 - # containerSecurityContext: - # enabled: true - # runAsUser: 1001 configuration: |- [client] port=3306 From c7fa9f47c0920d7bec6419a7120d81bca34a3685 Mon Sep 17 00:00:00 2001 From: Kiran Saladi Date: Tue, 23 Jan 2024 19:58:34 +0530 Subject: [PATCH 52/62] Global values commented --- charts/portal/values-production.yaml | 5 +++++ charts/portal/values.yaml | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/charts/portal/values-production.yaml b/charts/portal/values-production.yaml index a2957b4f..e482c8d9 100644 --- a/charts/portal/values-production.yaml +++ b/charts/portal/values-production.yaml @@ -25,8 +25,13 @@ global: subdomainPrefix: dev-portal # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: {} + # podSecurityContext: + # fsGroup: 1001 + # runAsNonRoot: true # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} + # containerSecurityContext: + # runAsUser: 1001 helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: diff --git a/charts/portal/values.yaml b/charts/portal/values.yaml index 0e4f6fec..63b113ba 100644 --- a/charts/portal/values.yaml +++ b/charts/portal/values.yaml @@ -25,8 +25,13 @@ global: subdomainPrefix: dev-portal # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod podSecurityContext: {} + # podSecurityContext: + # fsGroup: 1001 + # runAsNonRoot: true # ref:https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container containerSecurityContext: {} + # containerSecurityContext: + # runAsUser: 1001 helpPage: https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-developer-portal/5-2/ # storageClass: "_" # schedulerName: From 2488a8423a515b0fc35114bd41f2b83b2fb36498 Mon Sep 17 00:00:00 2001 From: ksaladi <69457674+ksaladi@users.noreply.github.com> Date: Tue, 23 Jan 2024 20:48:27 +0530 Subject: [PATCH 53/62] Update README.md to add the Openshift installation steps --- charts/portal/README.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/charts/portal/README.md b/charts/portal/README.md index 827f31f5..991741bd 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -925,6 +925,19 @@ Resulting hostnames: | TSSG sync | `dev-portal-sync.example.com` | `sync.example.com` | | API analytics | `dev-portal-analytics.example.com` | `analytics.example.com` | +## Installting in OpenShift +Fetch the OC namespace openshift.io/sa.scc.uid-range values(/) and openshift.io/sa.scc.supplemental-groups(/) annotation values. +[Refer to OpenShift documentation](https://docs.openshift.com/dedicated/authentication/managing-security-context-constraints.html#security-context-constraints-pre-allocated-values_configuring-internal-oauth) + +Set the following global values in the override-values.yaml and do the helm install. +``` +global: + podSecurityContext: + fsGroup: + runAsNonRoot: true + containerSecurityContext: + runAsUser: +``` ## Persistent Volumes With the deployment of API Portal, PersistentVolumeClaims (PVC) are created for components as below: From 9fec3ee98fa3ffaa60bc830b4e1bd1be4a091a40 Mon Sep 17 00:00:00 2001 From: ksaladi <69457674+ksaladi@users.noreply.github.com> Date: Tue, 23 Jan 2024 20:52:45 +0530 Subject: [PATCH 54/62] Update README.md to update the OpenShift steps --- charts/portal/README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index 991741bd..f09cce95 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -926,7 +926,7 @@ Resulting hostnames: | API analytics | `dev-portal-analytics.example.com` | `analytics.example.com` | ## Installting in OpenShift -Fetch the OC namespace openshift.io/sa.scc.uid-range values(/) and openshift.io/sa.scc.supplemental-groups(/) annotation values. +Fetch the OC namespace openshift.io/sa.scc.uid-range values(`/`) and openshift.io/sa.scc.supplemental-groups(`/`) annotation values. [Refer to OpenShift documentation](https://docs.openshift.com/dedicated/authentication/managing-security-context-constraints.html#security-context-constraints-pre-allocated-values_configuring-internal-oauth) Set the following global values in the override-values.yaml and do the helm install. @@ -937,6 +937,10 @@ global: runAsNonRoot: true containerSecurityContext: runAsUser: +ingress: + type: + kubernetes: false + openshift: true ``` ## Persistent Volumes With the deployment of API Portal, PersistentVolumeClaims (PVC) are created for components as below: From 7a54e19947db4b9c689aac958ea0747564b8615a Mon Sep 17 00:00:00 2001 From: ksaladi <69457674+ksaladi@users.noreply.github.com> Date: Tue, 23 Jan 2024 20:54:08 +0530 Subject: [PATCH 55/62] Update README.md updating spell check --- charts/portal/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/charts/portal/README.md b/charts/portal/README.md index f09cce95..6174789d 100644 --- a/charts/portal/README.md +++ b/charts/portal/README.md @@ -925,7 +925,7 @@ Resulting hostnames: | TSSG sync | `dev-portal-sync.example.com` | `sync.example.com` | | API analytics | `dev-portal-analytics.example.com` | `analytics.example.com` | -## Installting in OpenShift +## Installing in OpenShift Fetch the OC namespace openshift.io/sa.scc.uid-range values(`/`) and openshift.io/sa.scc.supplemental-groups(`/`) annotation values. [Refer to OpenShift documentation](https://docs.openshift.com/dedicated/authentication/managing-security-context-constraints.html#security-context-constraints-pre-allocated-values_configuring-internal-oauth) From 2767dad609e850badee118bff1243d54920c566d Mon Sep 17 00:00:00 2001 From: ksaladi <69457674+ksaladi@users.noreply.github.com> Date: Wed, 7 Feb 2024 10:28:54 +0530 Subject: [PATCH 56/62] [charts/portal] Merging stable to develop/portal (#289) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Support for readonly db connection * update values file * readme * image * mysql url change * add lables * remove spaces * remove spaces * Ro DB secret * Chart version * US896244: DB upgrade job * Resolve merge conflicts * Fix read only connection check * Update readme with new parameters * modify production values * Address review comments * Change chart version * Fixed lint error * Update production values as per the values yaml file * Add ddl user name and password to values and production values files * merge * add changeLogSync * add changeLogSync * fix condition * add password field * adding init container for OTK to stage bundles in GW bootstrap * addressing code review comments * fix conditions * adding trusted certificate to be read by otk init container * adding missed changes during merge. * create otk_db in demo db * values * init otk db * db scripts * adding read me updates to the chart for otk on ephemeral gw * configmap * change config map gen * adding fields OTK_TEST_CLIENTS_REDIRECT_URL & OTK_CREATE_TEST_CLIENTS * move customizations to top * addressing review comments * fixing lint findings * resetting formatting of GW param table * remove hooks * Fix annotations * remove hooks * doc * Database Properties are required for cassandra connection also * undo changes * undo changes * update readme * fix lint issues * Release updates * Release updates * Update README.md * adding skipInternalServerTools * Cron jobs * add cass condition * add dmz condition * updating connection properties to indicate that the values should be of string type * Fix name * update service name * remove tailing spaces * otk README * Update README.md * Update README.md * Update README.md * fix readme * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * updating documentation * replace find command * updated readme, updated gateway chart version * update doc * update doc * update doc * Update deprecation note in obsoleted OTK chart README.md * preinstall hooks for otk db install * autoscale-off * add resources support for OTK job * increment chart version * Update values.yaml * [charts/portal] Changes to support Portal 5.2.2 version (#271) * US855843 Add env var for audit log cleanup * cast & use integer values for replicaCounts * 1.0.9 tarball bump * bump chart version * new Chart.lock/tarball from newer version of helm * US857194 add README for portalData.additionalEnv.AUDIT_LOG_TRUNCATE_BATCH_SIZE and portalData.additionalEnv.AUDIT_LOG_TRUNCATE_FREQ_MIN (#189) Co-authored-by: Mark Chen * charts/portal: For Portal 5.2 changes (#188) * 0000000 : For Portal 5.2 changes * 0000000: For Portal 5.2 changes * 0000000: For Portal 5.2 changes * 0000000: For Portal 5.2 changes * 0000000: For Portal 5.2 changes * Updating mysql image tag from 8.0.26-debian-10-r78 to 8.0.31-debian-1… (#195) * Updating mysql image tag from 8.0.26-debian-10-r78 to 8.0.31-debian-10-r78 * US840140: Adding ip/range property PROBE_IP_RANGE to support CIDR in dispatcher additionalEnv * [charts/portal] Rabbit upgrade (#210) * Update rabbitmq-load-definition-secret.yaml * added vhosts declaration * Update Chart.yaml * bring over portal/druid changes from previous PR * US880884 dispatcher portal health check enhancement (#217) Co-authored-by: MarkChen * US880924 Remove Postgres refs (#216) Co-authored-by: ac658123 * update chart dep * more accurate doc values, use bitnami options for mysql chart * missed minavailable in minio template * forgot to update tarball * Re-adjusting the duplicates from stable branch * Changes to support Portal version 5.2.1 * Removing redundant version * doc better reflects values * post-merge helm dep update * [charts/portal] Adding provision to configure liveness and readiness probe of historical container (#225) * Adding provision to configure the liveness and readies probe threshold to provide additional time for SaaS deployment * Addig provision to configure historal probe values and allowing a max of 32M upload file size to support custompages and gw bundles --------- Co-authored-by: Kiran Saladi * Upgrading RMQ chart to simplify the volume permissions conf * bring minavailable/maxunavailable in line with gw/otk values ("") * Adding the doc for mountpath * Adding the doc for mountpath-corrections adjusted * Changes to use existing DB secret that contains the DB password * Moved the useExistingDatabaseSecret to global section from portal section in values yaml * Moved the useExistingDatabaseSecret to global section from portal section in values yaml * Comments correction * Comments correction * [charts/portal] - Added support for configuring db node pool properties for portal container (#231) * US898231 - Added support for configuring db properties * US899914 upgraded ingress-ngnix to 4.7.2 * Update Chart.lock * [Charts/Portal]- Adding tag changes for 5.2.2 release (#264) Co-authored-by: Prem Chander Vodela * Changes to chart version for portal 5.2.2 version * Updating the doc links * updated Chart.lock and druid tar as lint failures occured when pushing the existing ones to stable branch * updated druid chart version --------- Co-authored-by: ac658123 Co-authored-by: Andrew Cheuk Co-authored-by: Justin Maurer Co-authored-by: markgxchen Co-authored-by: Mark Chen Co-authored-by: premchandervodela <72003681+premchandervodela@users.noreply.github.com> Co-authored-by: jmmAVGO <63122263+jmmAVGO@users.noreply.github.com> Co-authored-by: sm895441 <125248373+sm895441@users.noreply.github.com> Co-authored-by: Ilya Melnikov <70610034+melil02@users.noreply.github.com> Co-authored-by: Kiran Saladi Co-authored-by: Meet Patel Co-authored-by: im683661 Co-authored-by: kiran vaddadi Co-authored-by: Prem Chander Vodela * restman host and port * trim tailing spaces * fix issue * Update README.md * review comments * review comments * review comments * ScheduleJOB Start IP and Network mask * ScheduleJOB Start IP and Network mask * ScheduleJOB Start IP and Network mask * schedule tasks * update resources * resources * Adding lint-tests to GW and Portal. Removing schema-validation for develop/gateway and develop/portal * Update README.md * image pull secret * fix changeLogSync level * hooks for ro secret * post-upgrade * Update README.md updating release info in the Read Me * formatting release information * Revert health check bundle path as it is causing gateway reboot * increase chart version * Update README.md * Update deployment.yaml * Update README.md * Update README.md * charts/gateway redis support, ingress update, restart on config change * updated production-values.yaml * added redis commandTimeout * updated values, additional redis config refs * charts/gateway update to Gateway image to v11.0.00_CR2 * charts/gateway updated readme, values, added graphman bundle support for bootstrap script * updated documentation for redis authentication * updated redis configuration in value files * Removing the unwanted druid file package --------- Co-authored-by: kiran vaddadi Co-authored-by: U-BRCMLTD\su671781 Co-authored-by: uppoju Co-authored-by: APIM-KiranVaddadi <59958248+APIM-KiranVaddadi@users.noreply.github.com> Co-authored-by: as673366 Co-authored-by: ab-sub <42832209+ab-sub@users.noreply.github.com> Co-authored-by: Emily Zhang Co-authored-by: Gazza7205 Co-authored-by: Ben Urbanski Co-authored-by: volol01 <43284319+volol01@users.noreply.github.com> Co-authored-by: ac658123 Co-authored-by: Andrew Cheuk Co-authored-by: Justin Maurer Co-authored-by: markgxchen Co-authored-by: Mark Chen Co-authored-by: premchandervodela <72003681+premchandervodela@users.noreply.github.com> Co-authored-by: jmmAVGO <63122263+jmmAVGO@users.noreply.github.com> Co-authored-by: sm895441 <125248373+sm895441@users.noreply.github.com> Co-authored-by: Ilya Melnikov <70610034+melil02@users.noreply.github.com> Co-authored-by: Kiran Saladi Co-authored-by: Meet Patel Co-authored-by: im683661 Co-authored-by: Prem Chander Vodela --- .github/workflows/lint-test.yaml | 2 + .github/workflows/schema-validation.yaml | 3 +- charts/gateway-otk/Chart.yaml | 2 +- charts/gateway-otk/README.md | 4 +- charts/gateway/Chart.lock | 11 +- charts/gateway/Chart.yaml | 12 +- charts/gateway/README.md | 306 ++++++++++++++-- charts/gateway/bundles/otk-healthcheck.bundle | 4 +- charts/gateway/charts/grafana-8.0.11.tgz | Bin 47064 -> 0 bytes charts/gateway/charts/grafana-9.5.2.tgz | Bin 0 -> 45401 bytes charts/gateway/charts/mysql-9.14.2.tgz | Bin 0 -> 46709 bytes charts/gateway/charts/mysql-9.2.6.tgz | Bin 44690 -> 0 bytes charts/gateway/charts/redis-18.2.1.tgz | Bin 0 -> 96253 bytes charts/gateway/production-values.yaml | 327 +++++++++++++++-- charts/gateway/templates/_helpers.tpl | 101 +++++- charts/gateway/templates/configmap.yaml | 7 +- charts/gateway/templates/deployment.yaml | 124 ++++++- .../gateway/templates/image-pull-secret.yaml | 6 +- charts/gateway/templates/ingress.yaml | 8 + .../templates/otk-db-scripts-configmap.yaml | 32 ++ charts/gateway/templates/otk-db-secret.yaml | 18 +- .../gateway/templates/otk-db-upgrade-job.yaml | 98 ++++++ .../otk-healthcheck-bundle-configmap.yaml | 6 +- .../templates/otk-image-pull-secret.yaml | 25 ++ .../templates/otk-install-configmap.yaml | 101 ++++++ charts/gateway/templates/otk-install-job.yaml | 142 ++++---- .../gateway/templates/otk-ro-db-secret.yaml | 26 ++ .../templates/otk-scheduled-task-jobs.yaml | 76 ++++ .../templates/redis-config-secret.yaml | 62 ++++ .../gateway/templates/redis-tls-secret.yaml | 23 ++ charts/gateway/templates/secret.yaml | 4 +- charts/gateway/values.yaml | 331 ++++++++++++++++-- charts/portal/Chart.lock | 2 +- examples/otk/README.md | 214 +++++++++++ 34 files changed, 1854 insertions(+), 223 deletions(-) delete mode 100644 charts/gateway/charts/grafana-8.0.11.tgz create mode 100644 charts/gateway/charts/grafana-9.5.2.tgz create mode 100644 charts/gateway/charts/mysql-9.14.2.tgz delete mode 100644 charts/gateway/charts/mysql-9.2.6.tgz create mode 100644 charts/gateway/charts/redis-18.2.1.tgz create mode 100644 charts/gateway/templates/otk-db-scripts-configmap.yaml create mode 100755 charts/gateway/templates/otk-db-upgrade-job.yaml create mode 100755 charts/gateway/templates/otk-image-pull-secret.yaml create mode 100644 charts/gateway/templates/otk-install-configmap.yaml create mode 100644 charts/gateway/templates/otk-ro-db-secret.yaml create mode 100644 charts/gateway/templates/otk-scheduled-task-jobs.yaml create mode 100644 charts/gateway/templates/redis-config-secret.yaml create mode 100644 charts/gateway/templates/redis-tls-secret.yaml create mode 100644 examples/otk/README.md diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/lint-test.yaml index 6dc54a30..156134c0 100644 --- a/.github/workflows/lint-test.yaml +++ b/.github/workflows/lint-test.yaml @@ -4,6 +4,8 @@ on: pull_request: branches: - stable + - develop/gateway + - develop/portal jobs: lint-test: diff --git a/.github/workflows/schema-validation.yaml b/.github/workflows/schema-validation.yaml index 449e650e..d1f4af52 100644 --- a/.github/workflows/schema-validation.yaml +++ b/.github/workflows/schema-validation.yaml @@ -5,8 +5,7 @@ on: branches: - stable - unstable - - develop/gateway - - develop/portal + jobs: kubeval-chart: diff --git a/charts/gateway-otk/Chart.yaml b/charts/gateway-otk/Chart.yaml index e8eb999c..30cadf72 100755 --- a/charts/gateway-otk/Chart.yaml +++ b/charts/gateway-otk/Chart.yaml @@ -1,6 +1,6 @@ apiVersion: v2 name: gateway-otk -version: 2.0.2 +version: 2.0.3 appVersion: "10.1.00" description: This alpha Helm Chart deploys the Layer7 Gateway with OTK in Kubernetes. maintainers: diff --git a/charts/gateway-otk/README.md b/charts/gateway-otk/README.md index 4b84757d..efa0a475 100755 --- a/charts/gateway-otk/README.md +++ b/charts/gateway-otk/README.md @@ -1,6 +1,6 @@ -# Layer7 API Gateway - OAUTH TOOLKIT (NOTE: In Development) +# Layer7 API Gateway - OAuth Toolkit (DEPRECATED) -###Note:This Chart is deprecated. The OTK is integrated with Gateway into a single chart. Refer to gateway directory +**Note: This Chart is deprecated. The OTK is integrated with Gateway into a single chart. Refer to gateway directory** This Chart deploys the API Gateway - OAUTH TOOLKIT with the following `optional` subcharts: hazelcast, mysql, influxdb, grafana. diff --git a/charts/gateway/Chart.lock b/charts/gateway/Chart.lock index 3c31f8cc..21e86b01 100644 --- a/charts/gateway/Chart.lock +++ b/charts/gateway/Chart.lock @@ -7,9 +7,12 @@ dependencies: version: 4.12.0 - name: grafana repository: https://charts.bitnami.com/bitnami - version: 8.0.11 + version: 9.5.2 - name: mysql repository: https://charts.bitnami.com/bitnami - version: 9.2.6 -digest: sha256:0db027a0602128156cbcb7b23f694bde96686411367a8cb640a081978112a418 -generated: "2022-08-11T11:15:13.621619+01:00" + version: 9.14.2 +- name: redis + repository: https://charts.bitnami.com/bitnami + version: 18.2.1 +digest: sha256:ad87dbcf8a73e3780500b3bda4157820b4a214bcbdf07db4ccdb3e5063f32ccb +generated: "2023-12-12T13:13:58.809885Z" diff --git a/charts/gateway/Chart.yaml b/charts/gateway/Chart.yaml index ec7a1e7a..ba737b38 100644 --- a/charts/gateway/Chart.yaml +++ b/charts/gateway/Chart.yaml @@ -1,8 +1,8 @@ apiVersion: v2 -appVersion: "11.0.00" +appVersion: "11.0.00_CR2" description: This Helm Chart deploys the Layer7 Gateway in Kubernetes. name: gateway -version: 3.0.14 +version: 3.0.21 type: application home: https://github.com/CAAPIM/apim-charts maintainers: @@ -19,10 +19,14 @@ dependencies: repository: "https://helm.influxdata.com/" condition: influxdb.enabled - name: grafana - version: 8.0.11 + version: 9.5.2 repository: "https://charts.bitnami.com/bitnami" condition: grafana.enabled - name: mysql - version: 9.2.6 + version: 9.14.2 repository: "https://charts.bitnami.com/bitnami" condition: database.create + - name: redis + version: 18.2.1 + repository: "https://charts.bitnami.com/bitnami" + condition: config.redis.subChart.enabled diff --git a/charts/gateway/README.md b/charts/gateway/README.md index aafd2fd9..dde6d294 100644 --- a/charts/gateway/README.md +++ b/charts/gateway/README.md @@ -5,10 +5,39 @@ This Chart deploys the API Gateway v10.x onward with the following `optional` su The included MySQL subChart is enabled by default to make trying this chart out easier. ***It is not supported or recommended for production.*** Layer7 assumes that you are deploying a Gateway solution to a Kubernetes environment with an external MySQL database. ## Prerequisites -- Kubernetes 1.24.x - - [Refer to techdocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-gateway/congw-10-1/release-notes_cgw/container-gateway-platform-support.html#concept.dita_3277fc35fde9c5232f0d64d7a360181d5d18fd6c) for the latest version support -- Helm v3.7.x -- Gateway v10.x License +- Kubernetes + - [Refer to techdocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-gateway/congw-11-0/release-notes_cgw/requirements-and-compatibility.html#concept.dita_req_comp_refresh_gw10cr2_platforms) for the latest version support +- Helm v3.x + - Refer to the [Helm Documentation](https://helm.sh/docs/topics/version_skew/#supported-version-skew) for their compatibility matrix +- Gateway v10.x or v11.x License + +#### Note +It's important that your Kubernetes Client and Server versions are compatible. + +You can verify this by running the following +``` +kubectl version +``` +output +``` +Client Version: v1.29.1 +Kustomize Version: v5.0.4-0.20230601165947-6ce0bf390ce3 +Server Version: v1.27.6+b49f9d1 +WARNING: version difference between client (1.29) and server (1.27) exceeds the supported minor version skew of +/-1 +``` +The above message indicates that the client version (kubectl) is greater than the server version by more than 1 minor version. This may cause unforseen errors when using Kubectl or Helm. + +Please also check your Helm version against [this](https://helm.sh/docs/topics/version_skew/#supported-version-skew) compatibility matrix +``` +helm version +``` +output +``` +version.BuildInfo{Version:"v3.13.3", GitCommit:"c8b948945e52abba22ff885446a1486cb5fd3474", GitTreeState:"clean", GoVersion:"go1.21.5"} + +Helm Version Supported Kubernetes Versions +3.13.x 1.28.x - 1.25.x +``` ## Optional - Persistent Volume Provisioner (if using PVC for the Demo MySQL Database or Service Metrics example with Grafana or InfluxDb) @@ -37,6 +66,78 @@ The Layer7 API Gateway is now running with Java 11 with the release of the v10.1 Things to note and be aware of are the deprecation of TLSv1.0/TLSv1.1 and the JAVA_HOME dir has gone through some changes as well. +## 3.0.21 General Updates +- Updated [Redis Configuration](#redis-configuration) + - More context added for creating your own redis properties file + - More context added for Redis auth + - note: the Gateway only supports Redis master auth + - Removed comments from values.yaml +- Added Graphman Bundle support to the bootstrap script + - files that end in .json will be copied into the bootstrap folder + + +## 3.0.20 General Updates +- Updated image + - Updated to Gateway 11.0.00_CR2 + - this will cause a restart if you are not overriding the default image + +## 3.0.19 General Updates +- Updated image + - Updated to Gateway 11.0.00_CR1 + - this will cause a restart if you are not overriding the default image +- Redis Integration + - [Redis Configuration](#redis-configuration) options for the Gateway (future use) + - Added Redis SubChart +- Ingress + - Backend service is now more configurable allowing the management service to be exposed via ingress controller + - ***this should only be done in environments where the ingress controller does not have a Public Address*** + - ingress.rules[n]backend can be set to "management" +- Restart on config change + - A new flag has been added to facilitate auto redeploy of Gateways when there is a config change + - Applies to the default config map only + - does not include config.cwp, config.listenPorts or the Gateway Secret +- MySQL subChart updated +- Grafana subChart updated + + +## 3.0.18 General Updates +- OTK documentation updates. + +## 3.0.17 OTK 4.6.2 Released + - The default image tag in values.yaml and production-values.yaml for OTK updated to **4.6.2**. + - otk.job.image.tag: 4.6.2 + - OTK DB install/upgrade using Liquibase scripts for MySql and Oracle. + - otk.database.dbupgrade + - OTK DB install/upgrade on the gateways MySQL container (MySQL subchart) - ***This is not supported or recommended for production use.*** + - otk.database.useDemodb + - Install/upgrade OTK of type SINGLE on Ephemeral gateways using initContainer is now supported. + - database.enabled: false + - otk.type: SINGLE + - Added OTK Connection properties to support c3p0 settings. + - otk.database.connectionProperties + - Added support OTK read-only connections for MySQL and Oracle. + - otk.database.readOnlyConnection.* + - Added support for OTK policies customization through config maps and secrets. + - otk.customizations.existingBundle.enabled + - OTK DMZ/Internal gateway certs can now be configured using values file. + - otk.cert +> [!Important] +> - To upgrade OTK to 4.6.2 installed over gateway with demo db as database, update helm repo, perform helm delete and install. +> - When upgrading OTK 4.6.2 on a db backed gateway, the gateway will restart as there is a change related to OTK health check bundle in gateway deployment. This can lead to failure of OTK upgrade. To circumvent this, please perform a helm upgrade `otk.healthCheckBundle.enabled` set to `false` and then upgrade to the 3.0.17. +> ``` +> helm upgrade my-ssg --set-file "license.value=license.value=path/to/license.xml" --set "license.accept=true,otk.healthCheckBundle.enabled=false" layer7/gateway --version 3.0.16 -f ./values-production.yaml +> helm upgrade my-ssg --set-file "license.value=license.value=path/to/license.xml" --set "license.accept=true" layer7/gateway --version 3.0.17 -f ./values-production.yaml +> ``` + + +## 3.0.16 General Updates +- Added resources to otk install job + - otk.job.resources + +## 3.0.15 General Updates +- Updated [bootstrap script](#bootstrap-script) + - 'find' replaced with 'du' + ## 3.0.14 General Updates - Added pod labels and annotations to the otk-install job. - otk.job.podLabels @@ -44,7 +145,7 @@ Things to note and be aware of are the deprecation of TLSv1.0/TLSv1.1 and the JA ## 3.0.13 General Updates - The OTK Install job now uses podSecurity and containerSecurity contexts if set. -- Updated how pod labels and annotations are templated in deployment.yaml +- Updated how pod labels and annotations are templated in deployment.yaml ## 3.0.12 General Updates Traffic Policies for Gateway Services are now configurable. The Kubernetes default for these options is `Cluster` if left unset. @@ -111,7 +212,7 @@ The bootstrap script has been updated to reflect changes to the Container Gatewa The PM Tagger image default version tag been updated to 1.0.1. ## 3.0.6 General Updates -The default image tag in values.yaml and production-values.yaml for OTK updated to **4.6.1**. Support for liveness and readiness probes using OTK health check service. +The default image tag in values.yaml and production-values.yaml for OTK updated to **4.6.1**. Support for liveness and readiness probes using OTK health check service. ## 3.0.5 General Updates The default image tag in values.yaml and production-values.yaml, and the appVersion in Chart.yaml have been updated to **11.0.00**. @@ -142,7 +243,7 @@ The following configuration options have been added - SubCharts now show image repository and tags ### Upgrading to Chart v3.0.0 -Please see the 3.0.0 updates, this release brings significant updates and ***breaking changes*** if you are using an external Hazelcast 3.x server. Services and Ingress configuration have also changed. Read the 3.0.0 Updates below and check out the [additional guides](#additional-guides) for more info. +Please see the 3.0.0 updates, this release brings significant updates and ***breaking changes*** if you are using an external Hazelcast 3.x server. Services and Ingress configuration have also changed. Read the 3.0.0 Updates below and check out the [additional guides](#additional-guides) for more info. ## 3.0.0 Updates to Hazelcast ***Hazelcast 4.x/5.x servers are now supported*** this represents a breaking change if you have configured an external Hazelcast 3.x server. @@ -193,7 +294,7 @@ Ingress configuration has been updated to include multiple hosts, please see [In ## 2.0.4 General Updates - Added support for sidecars and initContainers - - volumeMounts are automatically configured with emptyDir + - volumeMounts are automatically configured with emptyDir - Updated default values update to reflect empty objects/arrays for optional fields. - Load the Gateway Deployment's ServiceAccountToken as a stored password for querying the Kubernetes API. - management.kubernetes.loadServiceAccountToken @@ -257,6 +358,7 @@ database: * [Gateway Application Ports](#gateway-application-ports) * [Ingress Configuration](#ingress-configuration) * [PM Tagger Configuration](#pm-tagger-configuration) +* [Redis Configuration](#redis-configuration) * [OTK Install or Upgrade](#otk-install-or-upgrade) * [Database Configuration](#database-configuration) * [Cluster-Wide Properties](#cluster-wide-properties) @@ -374,7 +476,7 @@ There are two types of port configuration available in the Gateway Helm Chart th ### Container/Service Level Ports ### Default Gateway Service -Sample entry that exposes 8443 which is one of the default TLS port on the API Gateway using service type LoadBalancer. +Sample entry that exposes 8443 which is one of the default TLS port on the API Gateway using service type LoadBalancer. ``` service: type: LoadBalancer @@ -419,13 +521,16 @@ management: protocol: TCP ``` ### OTK install or upgrade -OTK job is used to install or upgrade otk on gateway. It supports Single, Internal and DMZ type of OTK installations. +OTK can be install or upgrade gateway. Supports SINGLE, INTERNAL and DMZ types of OTK installations on db backed gateway. On ephermal gateway only SINGLE mode is supported. + +- On a database backed gateway, once gateway is healthy, k8s kind/job is used to install OTK using Restman ([OTK Headless installation](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-management-oauth-toolkit/4-6/installation-workflow/install-the-oauth-solution-kit/headless-installation-of-otk-solution-kit.html)) +- On a Ephemeral gateway, before the start of gateway, initContainer is used to bootstrap gateway with OTK sub-solution kits. +- On a Ephemeral or database backed gateway, before the start of gateway, k8s job to used to install/update the OTK database (Cassandra database is not supported and should be upgraded [manually](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-management-oauth-toolkit/4-6/installation-workflow/create-or-upgrade-the-otk-database.html)) ***NOTE: In dual gateway installation, restart the pods after OTK install or upgrade is required.*** Prerequisites: -* Create or upgrade the OTK Database https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-management-oauth-toolkit/4-6/installation-workflow/create-or-upgrade-the-otk-database.html -* Configure cluster wide property for otk.port pointing to gateway ingress port. +* Configure cluster wide property for otk.port pointing to gateway ingress port and OTK database type. ``` config: cwp: @@ -433,34 +538,47 @@ config: properties: - name: otk.port value: 443 + - name: otk.dbsystem + value: mysql ``` * Restman is enabled. Can be disabled once the install/upgrage is complete. + * This is not applicable for ephemeral GW ``` management: restman: enabled: true ``` -* Management is enabled with restman (management.enabled: true, management.restman.enabled: true) Limitations: * OTK Instance modifiers are not supported. -* OTK not supported on ephemeral gateway. -``` -database: - # DB Backed or ephemeral - enabled: true -``` +* Install/Upgrade of OTK schema on cassandra database using kubernetes job is not supported. +* Dual gateway OTK set-up (otk.type: DMZ or INTERNAL) is not supported with ephemeral gateway. + +OTK Deployment examples can be found [here](/examples/otk) + | Parameter | Description | Default | | ----------------------------- | ----------------------------------- | ----------------------------------------------------------- | | `otk.enabled` | Enable/Disable OTK installation or upgrade | `false` | | `otk.type` | OTK installation type - SINGLE, DMZ or INTERNAL | `SINGLE` | `otk.forceInstallOrUpgrade` | Force install or upgrade by uninstalling existing otk soluction kit and install. | false -| `otk.enablePortalIngeration` | Not applicable for DMZ and INTERNAL OTK types | `false` -| `otk.skipPostInstallationTasks` | Skip post installation tasks for OTK type INTERNAL and DMZ
    Intrenal Gateway:
    - #OTK Client Context Variables
    - #OTK id_token configuration
    - Import SSL Certificate of DMZ gateway
    DMZ Gareway:
    - #OTK OVP Configuration
    - #OTK Storage Configuration
    - Import SSL Certificate of Internal gateway | `false` -| `otk.internalGatewayHost` | Internal gateway host for OTK type DMZ| +| `otk.enablePortalIntegration` | Not applicable for DMZ and INTERNAL OTK types | `false` +| `otk.skipPostInstallationTasks` | Skip post installation tasks for OTK type INTERNAL and DMZ
    Internal Gateway:
    - #OTK Client Context Variables
    - #OTK id_token configuration
    DMZ Gateway:
    - #OTK OVP Configuration
    - #OTK Storage Configuration | `false` +| `otk.skipInternalServerTools` | Skip installation of the optional sub soluction Kit: Internal, Server Tools.
    The Oauth Manager & Oauth Test Client will not be installed | `false` +| `otk.internalGatewayHost` | Internal gateway host for OTK type DMZ| | `otk.internalGatewayPort` | Internal gateway post for OTK type DMZ| | `otk.dmzGatewayHost` | DMZ gateway host for OTK type INTERNAL| +| `otk.networkMask` | Network mask used in the 'Restrict Access to IP Address Range Assertion' to protect the schedule jobs and health checks.| `16` | +| `otk.startIP` | Start IP used in the 'Restrict Access to IP Address Range Assertion' to protect the schedule jobs and health checks.| `240.224.2.1` | +| `otk.cert.dmzGatewayCert` | DMZ gateway certificate (encoded) for OTK type DMZ | +| `otk.cert.internalGatewayIssuer` | DMZ gateway certificate issuer for OTK type DMZ | +| `otk.cert.dmzGatewaySerial` | DMZ gateway certificate serial for OTK type DMZ | +| `otk.cert.dmzGatewaySubject` | DMZ gateway certificate subject for OTK type DMZ | +| `otk.cert.internalGatewayCert` | INTERNAL gateway certificate (encoded) for OTK type INTERNAL | +| `otk.cert.internalGatewayIssuer` | INTERNAL gateway certificate issuer for OTK type INTERNAL | +| `otk.cert.internalGatewaySerial` | INTERNAL gateway certificate serial for OTK type INTERNAL | +| `otk.cert.internalGatewaySubject` | INTERNAL gateway certificate subject for OTK type INTERNAL | +| `otk.customizations.existingBundle.enabled` | Enable mounting existing configMaps/Secrets that contain OTK Bundles - see values.yaml for more info | `false` | | `otk.dmzGatewayPort` | DMZ gateway port for OTK type INTERNAL| | `otk.subSolutionKitNames` | List of comma seperated sub soluction Kits to install or upgrade. | | `otk.job.image.repository` | Image Repositor | `caapim/otk-install` @@ -469,23 +587,44 @@ database: | `otk.job.image.labels` | Job lables | {} | `otk.job.image.nodeSelector` | Job Node selector | {} | `otk.job.image.tolerations` | Job tolerations | [] -| `otk.job.podLabels` | OTK Job podLabels | {} -| `otk.job.podAnnotations` | OTK Job podAnnotations | {} +| `otk.job.podLabels` | OTK Job podLabels | {} +| `otk.job.podAnnotations` | OTK Job podAnnotations | {} +| `otk.job.resources` | OTK Job resources | {} | `otk.database.type` | OTK database type - mysql/oracle/cassandra | `mysql` +| `otk.database.waitTimeout` | OTK database connection wait timeout in seconds | `60`| +| `otk.database.dbUpgrade` | Enable/Disable OTK DB Upgrade| `true` | +| `otk.database.useDemoDb` | Enable/Disable OTK Demo DB | `true` | +| `otk.database.sql.createTestClients` | Enable/Disable creation of demo test clients | `false` | +| `otk.database.sql.testClientsRedirectUrlPrefix` | The value of redirect_uri prefix (Example: https://test.com:8443) Required if createTestClients is `true` | | +| `otk.database.changeLogSync` | If using existing non liquibase OTK DB then perform manual OTK DB upgrade and set 'changeLogSync' to true.
    This is a onetime activity to initialize liquibase related tables on OTK DB. Set to false for successive helm upgrade. | `false`| +| `otk.database.updateConnection` | Update database connection properties during helm upgrade | `true`| | `otk.database.connectionName` | OTK database connection name | `OAuth` | `otk.database.existingSecretName` | Point to an existing OTK database Secret | -| `otk.database.username` | OTK database user name | +| `otk.database.username` | OTK database user name | | `otk.database.password` | OTK database password | | `otk.database.properties` | OTK database additional properties | `{}` +| `otk.database.sql.ddlUsername` | OTK database user name used for OTK DB creation | +| `otk.database.sql.ddlPassword` | OTK database password used for OTK DB creation | | `otk.database.sql.type` | OTK database type (mysql/oracle/cassandra) | `mysql` -| `otk.database.sql.jdbcURL` | OTK database sql jdbc URL (oracle/mysql) | -| `otk.database.sql.jdbcDriverClass`| OTK database sql driver class name (oracle/mysql) | -| `otk.database.sql.databaseName` | OTK database Oracle database name | -| `otk.database.cassandra.connectionPoints` | OTK database cassandra connection points (comma seperated) | +| `otk.database.sql.jdbcURL` | OTK database sql jdbc URL (oracle/mysql) | +| `otk.database.sql.jdbcDriverClass`| OTK database sql driver class name (oracle/mysql) | +| `otk.database.sql.databaseName` | OTK database Oracle database name or Demo db name | +| `otk.database.sql.connectionProperties`| OTK database mysql connection properties (oracle/mysql) | `{}` +| `otk.database.readOnlyConnection.enabled` | Enable/Disable OTK read only database connection | `false` | +| `otk.database.readOnlyConnection.connectionName` | OTK read only database connection name | `OAuth_ReadOnly` | +| `otk.database.readOnlyConnection.existingSecretName` | Point to an existing OTK read only database Secret | +| `otk.database.readOnlyConnection.username` | OTK read only database user name| +| `otk.database.readOnlyConnection.password` | OTK read only database password | +| `otk.database.readOnlyConnection.properties` | OTK read only database additional properties | `{}` | +| `otk.database.readOnlyConnection.jdbcURL` | OTK read only database sql jdbc URL (oracle/mysql) | +| `otk.database.readOnlyConnection.jdbcDriverClass` | OTK read only database sql driver class name (oracle/mysql) | +| `otk.database.readOnlyConnection.connectionProperties`| OTK read only database mysql connection properties (oracle/mysql) | `{}` +| `otk.database.readOnlyConnection.databaseName` | OTK read only Oracle database name | +| `otk.database.cassandra.connectionPoints` | OTK database cassandra connection points (comma seperated) | | `otk.database.cassandra.port` | OTK database cassandra connection port | | `otk.database.cassandra.keyspace` | OTK database cassandra keyspace | | `otk.database.cassandra.driverConfig` | OTK database cassandra driver config (Gateway 11+) | `{}` -| `otk.healthCheckBundle.enabled` | Enable/Disable installation of OTK health check service bundle | `true` +| `otk.healthCheckBundle.enabled` | Enable/Disable installation of OTK health check service bundle | `false` | `otk.healthCheckBundle.useExisting` | Use exising OTK health check service bundle | `false` | `otk.healthCheckBundle.name` | OTK health check service bundle name | `otk-health-check-bundle-config` | `otk.livenessProbe.enabled` | Enable/Disable. Requires otk.healthCheckBundle.enabled set to true and OTK version >= 4.6.1. Valid only for SINGLE and INTERNAL OTK type installation. | `true` @@ -497,6 +636,9 @@ database: | `otk.readinessProbe.httpGet.path` | | `/auth/oauth/health` | `otk.readinessProbe.httpGet.port` | | `8443` +#### Note: +* In case of ephemeral GW instances where there only updates to OTK, it should be done using Helm --force option + ### Gateway Application Ports Once you have decided on which container ports you would like to expose, you need to create the corresponding ports on the API Gateway. *These will need match the corresponding service and management service ports above.* @@ -523,7 +665,7 @@ config: ports: - name: Default HTTPS (8443) port: 8443 - + enabled: true protocol: HTTPS managementFeatures: @@ -625,13 +767,13 @@ ingress: # By default clusterHostname is used, only set this if you want to use a different host ## Enable TLS configuration for the hostname defined at ingress.hostname/clusterHostname parameter tls: - - hosts: + - hosts: - dev.ca.com secretName: tls-secret-1 # - hosts: # - dev1.ca.com # secretName: tls-secret-2 - + rules: - host: dev.ca.com path: "/" @@ -669,6 +811,95 @@ ingress: | `pmtagger.podSecurityContext` | [Pod Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-pod) | `[]` | | `pmtagger.containerSecurityContext` | [Container Security Context](https://kubernetes.io/docs/tasks/configure-pod-container/security-context/#set-the-security-context-for-a-container) | `{}` | +### Redis Configuration +This enables integration with [Redis](https://redis.io/). The following sections configure a redis configuration file on the Gateway. The following properties in config.systemProperties will need to be updated + +Comment out the following +``` +# com.l7tech.server.extension.sharedKeyValueStoreProvider=embeddedhazelcast +# com.l7tech.server.extension.sharedCounterProvider=ssgdb +``` +Uncomment the following +``` +# com.l7tech.server.extension.sharedKeyValueStoreProvider=redis +# com.l7tech.server.extension.sharedCounterProvider=redis +# com.l7tech.server.extension.sharedRateLimiterProvider=redis +``` + +| Parameter | Description | Default | +| ----------------------------- | ----------------------------------- | ----------------------------------------------------------- | +| `config.redis.enabled` | Enable redis configuration | `false` | +| `config.redis.existingConfigSecret` | Use an existing config secret - must contain a key called redis.properties | `redis-config-secret` | +| `config.redis.subChart.enabled` | Deploy the redis subChart | `true` | +| `config.redis.groupName` | Redis Group name | `l7GW` | +| `config.redis.commandTimeout` | Redis Command Timeout | `5000` | +| `config.redis.auth.enabled` | Use auth for Redis | `false` | +| `config.redis.auth.username` | Redis username | `` | +| `config.redis.auth.password.encoded` | Password is encoded | `false` | +| `config.redis.auth.password.value` | Redis password | `mypassword` | +| `config.redis.sentinel.enabled` | Enable sentinel configuration | `true` | +| `config.redis.sentinel.masterSet` | Redis Master set | `mymaster` | +| `config.redis.sentinel.nodes` | Array of sentinel nodes and ports | `[]` | +| `config.redis.standalone.host` | Redis host if sentinel is not enabled | `redis-standalone` | +| `config.redis.standalone.port` | Redis port if sentinel is not enabled | `6379` | +| `config.redis.tls.enabled` | Enable SSL/TLS | `false` | +| `config.redis.tls.existingSecret` | Use an existing secret - must contain a key called tls.crt | `` | +| `config.redis.tls.verifyPeer` | Verify Peer | `true` | +| `config.redis.tls.redisCrt` | Redis Public Cert | `` | + +#### Creating your own Redis Configuration +Please refer to [Techdocs](https://techdocs.broadcom.com/us/en/ca-enterprise-software/layer7-api-management/api-gateway/congw-11-0/install-configure-upgrade/connect-to-an-external-redis-datastore.html) for more context on the available configuration options + +#### Note +The Gateway supports Redis master auth only. The Gateway will not be able to connect to Redis if your Sentinel nodes have passwords. Please refer to the notes in values.yaml for details on config.redis.auth and redis.auth (subChart) + +##### Redis Sentinel +redis.properties +``` +# Redis type can be sentinel or standalone +# standalone does not support SSL or Auth + redis.type=sentinel + redis.sentinel.nodes=node1:26379,node2:26379,node3:26379 +## Credentials are optional + redis.sentinel.username=redisuser +# Password can be plaintext or encoded + redis.sentinel.password=redispassword + redis.sentinel.encodedPassword=redisencodedpassword +# SSL is optional + redis.ssl=true + redis.ssl.cert=redis.crt + redis.ssl.verifypeer=true +# Additional Config + redis.key.prefix.grpname=l7GW + redis.commandTimeout=5000 + ``` + +##### Redis Standalone (11.0.00_CR2 and later) +The Gateway does not support SSL or Authentication when connecting to a standalone Redis instance. This configuration should only be used for development purposes + +redis.properties +``` +# Redis type can be sentinel or standalone +# standalone does not support SSL or Auth + redis.type=standalone + redis.hostname=redis-standalone + redis.port=6379 + redis.key.prefix.grpname=l7GW + redis.commandTimeout=5000 + ``` + +##### Create a secret from this configuration +``` +kubectl create secret generic redis-config-secret --from-file=redis.properties=/path/to/redis.properties +``` +my-values.yaml +``` +redis: + enabled: true + existingConfigSecret: redis-config-secret +``` + + ### Database Configuration You can configure the deployment to use an external database (this is the recommended approach - the included MySQL SubChart is not supported). In the values.yaml file, set the create field in the database section to false, and set jdbcURL to use your own database server: ``` @@ -1062,7 +1293,8 @@ The following table lists the configured parameters of the Grafana Subchart - se | `grafana.datasources.secretName` | Configures an InfluxDb Datasource. | `see values.yaml` | ### Subcharts -* Hazelcast (default: disabled) ==> https://github.com/helm/charts/tree/master/stable/hazelcast -* MySQL (default: enabled) ==> https://github.com/bitnami/charts/tree/master/bitnami/mysql -* InfluxDb (default: disabled) ==> https://github.com/influxdata/helm-charts/tree/master/charts/influxdb -* Grafana (default: disabled) ==> https://github.com/bitnami/charts/tree/master/bitnami/grafana +* Hazelcast (default: disabled) ==> https://github.com/helm/charts/tree/master/stable/hazelcast +* MySQL (default: enabled) ==> https://github.com/bitnami/charts/tree/master/bitnami/mysql +* InfluxDb (default: disabled) ==> https://github.com/influxdata/helm-charts/tree/master/charts/influxdb +* Grafana (default: disabled) ==> https://github.com/bitnami/charts/tree/master/bitnami/grafana +* Redis (default: disabled) ==>https://github.com/bitnami/charts/tree/master/bitnami/redis diff --git a/charts/gateway/bundles/otk-healthcheck.bundle b/charts/gateway/bundles/otk-healthcheck.bundle index f80ddae7..2242d52c 100644 --- a/charts/gateway/bundles/otk-healthcheck.bundle +++ b/charts/gateway/bundles/otk-healthcheck.bundle @@ -43,8 +43,8 @@ <wsp:All wsp:Usage="Required"> <L7p:SslAssertion/> <L7p:RemoteIpAddressRange> - <L7p:NetworkMask stringValue="16"/> - <L7p:StartIp stringValue="240.224.2.1"/> + <L7p:NetworkMask stringValue="{{ default "16" .Values.otk.networkMask}}"/> + <L7p:StartIp stringValue="{{ default "240.224.2.1" .Values.otk.startIP }}"/> </L7p:RemoteIpAddressRange> <L7p:SetVariable> <L7p:Base64Expression stringValue="YWR2YW5jZWQ="/> diff --git a/charts/gateway/charts/grafana-8.0.11.tgz b/charts/gateway/charts/grafana-8.0.11.tgz deleted file mode 100644 index 73590fa71a61b43ac55e5ead8fab7bbaa0d10a0c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 47064 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 E0OKpkWB>pF diff --git a/charts/gateway/charts/grafana-9.5.2.tgz b/charts/gateway/charts/grafana-9.5.2.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8658ef39cb230e38d6a10a3ac3ebee2ea7d844fe GIT binary patch literal 45401 zcmV)QK(xOfiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POw$d)qd$FpBTb`YZ6t-4i>tB-{Dc>YVK7quNgDr%s~Ra9d1_rw4oc&kp{!w}0^L`HR1yz0IRi zeo`SZ|J&Z3+bR=p0Xp=%bq!LI`zG zjOV0}jOf5SQ>KqX7F-hErK~rmGRAY-GsXJ*d)Y#;_B>SmxYK0^raY*8T z647s2gaS67v$%y2CkYc&0$W%>`@J3~Qz|51boRR?1Oqja6xSr40#7^0eCcEmuPg!w z-A~<5t&oU-(?r6n*P3653WQ_C5)vc9QXUXACz8_uVcRnZ$053+BE=E?1Nsn&luCjo zjH^b>7aC8Iq;rA<;gkpzVu_KQVTnYVB#cXet}v%86-X`;A`qMCGP+sOZOxeC$4tsZ z^m~@hZouX(8Yq-2zVxsVM2en}IJgv62zqorwSRZuQ|I7d@6*APr`;r;wl2xyn(+|& zAfvL?L30)>_S1N(egGHL>xfN7YmR9wF^vg#y6(f9Ys|?mI*EgB3!#)pIg(QuR1q5t=uJUuAs z|7Qo^^#4OV_oMn8{kH$4`=k}pDG{=d#0(!id*1&M|M+76`42yac(9@p1rX(gDOA_`` z`(W?jNoRkrbMWkZf4~3iMgQ3k-5;Lszj*rN(`QfqulApA#QnJ*JN~b5loD}24&c)9 zzrVk~|Kvqs{6E<{_~!pT$g_nGS+d}CI+MQD+(M(_(f{e3YLBXO5|UWb2_?Lb2E)PO z&&S|fwYIj<|6h;*oR8NL8{-HinBzH-gbVf6ygUM3p}o37iD5*rAiF4Ll4!p~&Zt1w zG>QrXW*AnK~&!<2IpON6g5 zjqo_iO4K0R*Kf{@2He#@hiMdzNWh8I4w;aQ<0(0eun?L*0KvfSdLSyfV>N6|UAH~I zx~+%=dmo)aiwLAy24ufMgB$7N{Hlf*-?U#^@v zq+h0EVrBs76;qD2#C%F5`XwC`9urA~HDG8v6-v5(Cea)PIKg8YQK_70I#Ke91d+fB z2PR;Xw?;lmj*mzZu>~5aPEhVOyhLpLZxTqML^RX|uBn`XsB!{>LVCa{u z!=QLHh_3NMJW`Cx`;7|pNNETmAMGL%38I(?#ZM-0nH+K=NGu;|aGrEuW~xEWPC^!l zUMdLhOj8Xj(h$E4CVW7yAPJ}?OI8z-9KWt6sdp!UUG^p(k7yG5Uo-&yq2v?fRbP^cR zD|lr=;_W?UkK|Nl3n|n=sN11(ll8$Juf&7apJ2K7^a3xszMavf@)H4imK`KXfX6@u2xI{21gOQ z9?@z1K0yQZx6q&joyI6lsz5qbYQg#x*`88kNA;=#3dJOwM@8ysM2cF;E73#2V}Y7yz%eurH&S`BJU<1mcT z(Ob&^90V+lrIHk_G6?3u%sRMwqyYF#Vl;?)@X2+qV-?3tlcpgLOmbZV1`86#=qEKv zJ9>)}EN4oAaZ&)LwVgrP8h>RFMBWU5s*?#-aUdn9<5Uv#ijpYII5EdEnB|fImJe1# zwo@AJB7x@vjfLvCT@=K-h{#~4i_X=I5>_rV2i0`Anln9entnwiN%$ir5+XM{1+@C8 zozk!teGNk!QOgNS0BjZ5k6iuzK)pK_L}p{8j4s5z{(@b-Uf>m?yr-h8R%0yJ7Is zSZVbq$|)CnV|E7UUK+unVuhl3 zR989o$wx}IaJ&Hd0_mZFmhf$5sIg%!2iemfiP)(I>lS&V2H;RBzJG$^gAULI;5)30 z%~c^1)?n#^Gj`53cMe2drUuO6;1!JsXg+i}aBF~7R3Ex%G-GKL7Io&~0FhYo1^C*= zq%1*i2^|>8;__h+X_{oiQox+ZhuY$}yhs1H2AQ8dQEWdXc>T?FeC&$jf2*(Qgg*IPO_ z+XmUr5{)Sgg08A}B4MeIkWf2bdXW`j(^qqxDE)~m)+b=6xC&&p!=nInQ$b88pTtzj ziJb^ah9ZVTgwcfq=0Z==N?@iLjC|fxJsT>ZxE}C|MafYm<&|Jt8eU&7zWHS5B340) zk&hxCb~qjCP6@FXGt5J~D$6q-hFHwtlh{Q#>u?qm)wy=vyj)nphP8-xrMk!qx|@vo z+o3_DI3kV5t{8|jRghK7uwM?ddg6<#I~t=vuS8b1(kg@R*Npv>xthmY*VW7@!4r_I z0hhGbv+tJDJ%jnaXYBduh#*M@((Gcl)!lDp@Q_@&(F-p|l zGB00oHdlj2j3iG3nR3#H$wgbQmcc5X#x%pv3}x{4^l$;+nO(;f)O3r>ZB=}S4+wRN z9X4NNrCY|G)@bX`6UMUFG$N%s-G2+c&s+(b$r<5G;g2z|g6~(fjkGEWGdodQ*dd15 z1o3KZfMYcaARM;tI&&Q3DG7}Q*!9doNG3F8i5SDZ`7R+?gG)d zk#G?3C5X6Uo(+BrQA>Nb!5U8)i=&*Tb1lu1#4;Oj4&A=u@!Ia9cX71P%NcZ1N2?l5 z^F%HbPh)1lW>X4(8eT*$o1MF1`}_7~nd|uhf+1&fB4;FZ=96-fkiHror7u}bc)!=n zzjvHJ-Mt?5;2?mFn1r)Wi~KbeM>c*z4Q0P?9J*{AhcS9F)8TYhHuE84lv!Q^cnaIb zMm9hlWs1*61KHy1nHX!wa(qhLeA%adrIxP@PC3eVBiuL@dlTOxts|KadIXlwyU^-(EG4URXm@nLY zmkmrb$Dc+ipOQX0c=mVq?fW>3xy-*Q@3PeHl2!}7J!3)+B8mkOXb^_(ei-a-VEs+k zZNfq`I}x3jNX1SXPkT5FJ8Du)iRefMu@*!I9o2y7C{F?Y?3lKC?iR4Y&BQO3@fX32 zglVMBAsR$rA0)jZDEqQbKnTPLD8b|%6a41Hh|JSS(j+3C40MjGheye-SZpQXa~i`K zdChS^hJ;fVj!3}bP$;)Z=s$P$W+Y6i=oN`!Idw+z4NVrpEDc721qu_efItM{t>s<~ zB=w)(mV;}DO;o34YGf%HwZtc!GEU_JmS>^6hUN_lAZj+-iEoa$r*#$H9otGL;Y68J z^*)PaC}L2LD+^6rqgfr-KU{^EF{C-RY9f9`$#u^R3@!U6jZku z=t8iGyigv~#SHWCVohSrs8wW=D+;!_hlQZi7?hNPFn0~e<4oElFl>vu~Rh`913w1j2i-CSIK z>su1k6>0&!Wl~Kuiz;)sT3hTwuvAgHe{Z<=l;)JsQ+b0Kq7DwV@+DcqA~s!&5>9Y<$YM2B zqOnw1>n}*aC#9#eZ=6IB`xiS5mkd#Ta89p7TFB<0%C^|ivqge~neHhn5RKO)zwGmN zY(pK5Xvaa+4g0R8)C~g1pGKGD+F67_Sv?3_oM0NMNrk4VJ0=o$eRTg|u@m;7g!+9f zu%u!_^%U@ky=8J_CLVcL)gf2caS6EYDLBR~mgJKxF5wIRGxE3VisrEa{E2|T45a@n zS$^~oC2DRVL?+^Tc|bUhL;+Y~*VL>gA!ORcaRhk?$R3DjeX9@&)vgj1eg~tuWsP1C7L|r#{0UZu2`zFbc;$-21T#hh;)S1@ z7*HGuhG-mc0xO-t499`~SIzZ!8Y`Pd;w#D-xKcuIU`ABRC|i><$m}AK1~Y}g8yZu^ z1voCXU?~b&9_eUkajNB8o3InXRQJ<(s=-GzR%LMb?^H(}%~cCA35XDwFSPf|$(&v3 zb-^Iz(E^P*2KG!O;pkD;R{v4;j43P7)x8QkCOMbQOV_sN^05M7CNml&{2-wNdH#IZgy=quR^oqnp2&Iw64Hr0<`xp6p3%jGV4TZm;717&rD#M$~{$f&8U3k%^cGXkO*~{Q+m&tY6 zGv6kgwhNYeoyL8DD_S2pU25BQyLqjaU0}8CMsz}gMG%pn8M_qO%(vvOz?wOnaA9*S zN#X3pm`oTa5X%V@NrQ9l!nuvq;v#5B0?Y*(NQu=1ISi>z`GU+R$9<}ZXsHURvM@_w ziwl-=lc6OK8*wrq=idvThE9?ioj)fpkl1}=^E+=&eev6YS)#k)tUS>tPqWc&5wBZy zS3~wNXU8B6U52Tz%el2}kFMP|$VWAid!2T9CO-)8BWSs@ivRWOU&Vcs0iln6eI#a& zcG06wp#DpO8AI(Ei6Vxs8IQvDqu(r(3n&lK2W;DOKYxDtVEvKJeNo9Jg3qGM4g@pW7f&lZ>Sb5p%?& zzCmxp%u9ptDnDoLcDeyv9K^3*eLOmTHF$q|{_*7P=zQ?@@EB6aWxWp}1t1m>-W%tq z&OES7d-%{E9kX;vriIE-<(ySno30#og(zod)>aF1NCf31>?n6DFD=rsE<2%-R&$CX z66+k7%;YoM$t&0;e?O+Zh-n?SYzmkxE2MP|@@OYpWIGjPl14hxK_7WEClB<2#+`iE z!z$I9pb$P4%Nm65jayTtp(!u8JxhcdkYe^lGl@!^5*mIfc`7=LFrAB1M#klv5P6un z(Q96EMyJ{0w9ffdQ^ARZti#re!mNP;e)Ss`k_sRLJ(W;jS5~h=!l_@^zL&|?q_8#7 zxaMqDc93iM;joT(MpJ5{PyCDzoTU0(Sf)<{Rcsdu1z2Zs%TBV{W0u1Yhei_Iq)@tn zE6gDPqK+i`2SFqCA8Qt)K-k;4DwzWPU2!z8rA}0y>$XG&UHZZD(?@qg->-P@G25E{a*HG1zfJ zG;^pRWGa|3ma)-0C8t^@yo=EGG&w*lMuUHj6a_dAF%MCmlH>I+$Ghqy`VaIjA@NA! z;BqIQ#1;|?BUk8+=i_ysEtN@bAE`OkKRK1;oi;FzRNK78^bew@uCJ-DTF!nN9M@hTn}*|4z^!boI!Oo0(zXm!yR_m7(K*MH2@MeWlrT6@ zR1hcw$IriRkt`%~)Gu|Uf|F_4f>7_XKrPsvKh&p8PKK3m0{b=dFDQb5^U!b;zg^`2y$q*HO(n*P{ASqO!3zy)F z+`HUGLB!I~gcH!9;iTX3fh^62K!wuSw399HcxW~vPJ0aHH-7~ZU2C?wiJ@aFeOg@Z%!r+PBDT5)p5*iewq<1X~(wV(*nu80gZSH;i>^7O6us) zoDNN#DQ%gM%$U{DUOr}{It$M;+~&;$~#=igKCa zs6!J0G5h92C*kZ9%@?2wd~qCt6&%#d74EvDAX548`I2LyhFPz#0+Z>Pz%bHTVlVDP zJuyy18F>TCTpW>ya>E@r@f6ZQXAz9B(SmhqAvMud-ml%5BW_MA@7TIM=dM7$KRaD> zvB4nGgY;GU??U1#{W4o?7&&>IXT==a@Iua~r=SuCK7?gEt9LLACCHm-OogzBIagQa zW8V(+PCTXYr`|YXu(Q_`VAq)OrVzdLSb{$=i! zZBj2jIK7a0@ zgwt3~Q2XzqBO}p9-48k|QmO4PhPZ#3^-+5dn=NSWr13??EGK~sIXFOwP=w)xoi}ju zDm0twN;kn|h1F7S*w4&{c-ztC`1Y0rd*&lxR|L*u>Lp}2r03c;Gi2W=%^J~55-t25 z!ee%oCvGM&OQ*A4G)}YYgvgb0z#u;ih(K6RIB|q{YO<)$a2!Uk%{e+noM`7Y&*78Plkv+i<*{Yb7zdXm4jre?IF)({ zT!^S+;g*W%z=>24NAvi8KQz6R+vky%NLjo*2k5)IdESY-EQ zLCcq9p_jTH>uwg;A;3uUy`!F=j$fa=MTf^{=O?dDlp70g5i|PNDRVX&pyAochr#(V z`sMgv@WruIpf^k-kQ^{I7b0LK9%d(B+0{wPVfo)gIXV0=8=RhLwYnsYt#-izQFHP< z)4jy1T_tyF){$jNG=8arXkE8JaX77%xh+l});L5Or!x0hDuwctVHbi5G=s|*XV@%d z+Kbi%A?WOQaP;Q5JJ+#^pgw6lVSMf!0?bW*rGm_4&g3$1ExbXgpU>mmD=4dIk0v8J zRkrxh=9_hFm^R#{!D;$QRqhB~+v7*RjWS+98p0eM+uSm1Xa3E1*G`-lT6bH+=K6;&Ggs?79KJ+W_@31zbGm>s-AM| zTO;KwG^7&==06K_4gHj@i(@_tZ|%;Iy#_~I1;ql&&n?xm^%OpyCe^f*A{yT4%k+yI zMR_X4?7ID}t(N)IUkWfUt8(R%Pp~q^CROm3ECD#B-z7@)8MpgRZ&*y#&+>I*MSQAO za(~sypMLYU6XAy25`I-FuT3|h;@kmxBZHvCPy`&qiB(AMT3H0T54E4{?d{bR010aM z3_|T33B!c!lwURFrc~B3bb>AvIv2Y}2`eY60jsw`hi8u0MWMql%+S@acic2C6;a?T zvCVEjgy=Q>7mdvVyMrx-v#uuMAZszJ?WUwz-XN@nU*QOy*gup))a&_H6taDE-LGLc zKX6$+#SR!JOt^VPnc=QC$v$F1nyn=Da6-HDaErttEY8?Aj8cNXEwX*Izb9P6^AAnw z)}+|O2=-qcHLb}9HvmfM1*8yGg}w^i9cw30BG2_25HsK!!NI}ErOZasNE>^ac+$XQH`1w2KCRX3ons{aEd=J0W`o2d2leK&g zm{eZWU;j=m@4-q3(oX$KeIb{+o5yQwJLaKF4)gN?5yj<6tF4{Cr6HLCNh(h zI-BDORzx`8^%Zs=HeUEy)iWfEEiRG!s*Wf&oy`HWp!q5rh&l*IM7hmox2SW(u45;! zMaeI>bE7#C0#5Th@^(v=p{D|c>^gqrl^5xJj`^aG>WVw1$)|+(5grQ?%k4Dz{BJgX z*)~fI?Jwx%OSHe^6gPUpZ;o6M4!hddm^(hLKSMcyHbI%r5PxMS6wVRU+ zPG;rl!-oD8@R1HPALbPv70z<`VT9;#relbdgtP0|1iQhVaaOgJbEWH8ORy~vVx6Tb zvU$~XD#(^uo>hWtG^4$!reDsZcG1f|*5yjNxF}%%1~06hu>k_hn&`U;lt2w>C9<{E zD)G&qFPAw#P3ZO`ND@I#T27bQ+!ESqt^8==vRL=pNPy_Ynia)F#9Z=PGD ze43C2mvEKMyvH*Smx+#0FnSVCMQ;Vo0KIE(qDQ}m_6miw7Czd5kt0W z!*&uTl-2cH8onEyoWC<|W%w^`)WR{%>RYpGT9tTO4@!O9rt^6!^>PWG>OG$Ot`SkXkiJy!XS%R(X${{w%&zKrYvn2;hIot;_ zCTNahorBC?hh=&?b0ex3E7s2CqUbTlWD`!WFeF6NOzc$|Yp0jI48ZfnnW^>*S&Xus zAlHPsRkNk`6HhHZ5)YH(tyUD9=O5D>pf2)_K{v`oRs+ABiL8)7teo=8XYrpcvuIQH zHOvP}i}JK8DX6}e8%_@9kf^Yyne2A74*qZBRI>JN(U^lGRR&MFx-)hSL)EU~hgf2B zBbLo@& zNKfTXlXM-(=mk_wq}HjFVBJOgr+A%mT+dNJNAr z%i4q^vI9O9w`vWJ%$lZXY(i=O_U-v|KQ{S+J&q@OO3#hD@{`LdH&?!Z~IT59UMG8*xP@0@VCAFrw1>d{0;4G41*<4DkSEA+q-jHMdJP<&*9I5 zvvZ^-Kz;Q2GwL4BFqhr8CVWqS{cwCXI(hfjEnp*QRx#|GC{r>faK9&L7ZRe!k6W$%E_!X^N8MwW@6S%rcwu(|)n`F+lh|r~ z{@hU$m|}FI)%0Jq7xeivf&(CYf!g59wDrH`utpgP^yN#x*Hbjshdfq%g;3}(UjQQ# z3AjGaXjFmP_BdePqIdSv;A!^K-@ZFK{y2PhcK-6aZRK(WGD1@#QKyryOeze_5@R=C zrTp>*br|}$V6j5yW&3kixd8g4^UGL}^G+TXB}fdI7X+Pw}=< z7k&A%Q^N3MSildGiQEcHD#;uW6cWo+ba5CerV@B(etc;g6oMJEcRGG&5b1xH@vNo; z+(TH)JHhyXCpy|u;!A=snviQWr*SGBf80CQbuzRuk@n8JZp#VSu+g#CaCZ!Bx&WnW z7U;b7>JO?=_k&v1?wDAx}`5|bOS5K&!3`BxYITU zp}=;t-Y&Z42Fr6ibu>S$BpHEOt7gs8m4;QO;|fPK#FFUR8vh4!oy-2;#~Fzd!bMjm z(Pr9M?*AP;eX{?g;Qu|_fBwz?dywbz=icMiAxjpVPG=H*cyo<8*+nOD&~1%|NB^gD zN&^xL(mB!h7*VA$2E)PO&&QpE?q2J0PiY(l1zpj3Uq>Xtl24rw4!8-ATJCW}M6J&o8H zNBL|0dnW_0G-_uF<~hb_yLv6oEKqg4jW<j^3u?~JBN!C9~=kxZ9&vU!zzP^^u%WfCo~`JF?M za?YwDb)aq=ZLf5o%KTY_SBY^a&?Q+k;*#foILyLvxSZ@|A042#XRHgP36EdD`Zzj1 ze1CRw{;!XNqcyNma{SU0{&2*yC%=ma`5y zlmRj&y4RMB(VO$(T7yW;WwK%nsUk}-ukGlndJPAVs(O#(2eW)A`}i9Rw@h~D^iiDuw@bhBF6I!@e0m06{NdF+C5;o0=2w# zm1t#xL|fRb^4hkWD83rN`Jr}=f+yI8X4>YD(qd9AuvH>|dNddoP6g*D1L4qq6yn6l z4BTW`&s9_!zy7MICtUpYTWbrQDm?WIos4ALM!?L|NYW&-hv4;skRS;LDtB5?`lViO3dtu` zF`^PKYi#%1IR!gt58a^OQzn7OTX|LzrnecM{P3d^$mdU!s{)JztkF)< zi2$C<$lKeVoPDs>BCf0BFq9#pw_jA~3sipF8@QOynj-Razkr~lRXC%|-zd2(P9S*!x+l-r=7t`2OQ<$5( zPHmiaOV#`s;E$@NMl?5ry}yfg87KF^?i-t$dnxLUcsdi&I+_)HpXxy>XUY*ZyJ2{W z6|-Gw6DFWlXDWsbHy6#8ez$odJzO0!O?#JQahK*CRpgcYg)Fj0smL?UK)_BlZdBOR zDK)J-Fn5-8*pj{*(>M%cs~0d2X4*Ga?@<`H)W09YxMDPzn$5*TRYsFZf{vQ|JiQ0H8~mNYNC?s z8lqZ|JxIAbfc%6;5QI9(Q-h%Pb`Zb(yV%hQ?zY9?jpH9UA5t2^FEvi0h+U(IO=+yH zB$;CxsbY#ds%v*0@HZ7Ow^hL*r*S|N9ND)!?aE%z$iD*ILA}E7kD8bYj(FvZd@*}e z6%__jaym|R*1G!>h<7|&$aH4fcLeXab%tB_1YJ>JCQTcLuQN(*3}%QWR)V%k zn0kGk#3A7jFi-t-|>gR>HFgm z`Y<>>IU1awynEaK?^s#WtkMl!g|>R)iHbvr<+*@6XyDvo11SPv(hXMB2BPciJDJ60 z7$&FK9;9?`i-L(KYB(yZ$4t#sU6<{qf*90KVyY~-KW#Uqrdbg?bzfd8D2ZH#dnIWKk9m+kR* zY(lZrV>U#=!&I{m3%OcWDn!F=*Q5Jo`_rdSPD=xw94~@UK1r`gekqGhJ!y|vyZ5)` zI<4H2Vdu;CVzFrNAamGTpEC7;n8D>j$T|PA{l_1Fw0EqNJ+;?hRI;FZmm&Brjur^t zSxpx@VXw2ly=FH5QuOMT~e?jMI zBymhwDx$?*IvGaA`RNE5_A3>zRu_SL)udZ$myD`?z~*-R7@{EbHLn#Jx#b zcj~@cEL;MYP=u-$a;n!BGSR9)sH~2K3%jCS>fc0_9~fMCt6LMZL|9l)yo1o}Z z#4@``3$&lf>~9_H#$uRzX!J7seDoytP>eZQ;SZyDR) z!|5r=7AR*pMl2?_V4iD2AF-+=RrSCObD~ddjfuP_Brc^25P6jEPm64o*p^BK0h^Uw z@*sYXs3cDigcaFr1IoLzhAh8N&_(LaV)VaHm98H$A*Y;-{`YC#?$G2+Au-$rq##+t zkBbRLsgw94zpbnp>4tgYP6n(>((G3oUZm$-jb*JcQ>)Q?Ua4HqDc$8O7{8!iWPN{j zTJrP!asiH_F%B+O$$}!PZn>rzz_}Lmau?4B;#Bi){48+UcgU#B<;wUvHHf}!o0w>Q zT9}&xos>sC{lof>wbW!F469V#{*%4Eyr<|DCJ-BDaZe2UR-y9=NpLtUUB~G z;Q9VuG5+`I^QYh9e;?ve185Tw!0!DNSNp9?8i)PdA8yUfwS4{T&bx+ZAUY(zy24zv zyu?V=CkLG6b0;5HMIfgB*0one=ApCZntu4)c28BHRX6P~z+j z*q$qg2EHF1pVgfp@w%fxZnfoulCNKVJUf1SbbNO5_Vvfn@!5ytvybo3PQ6y@Or+PO z2k3BcdivAg@Rt>!T+>*>-*BTuOcJG2YJ2SUD}4j?>FLMe>HF6wZ%1Bpwrm-ABuG63 zNGjst@cPxq;o$t|kyEDfR&&*NJ=1Di*BiV)|M{buCwx49JNW7J_^4mnma;ukWN2RX z@ZH;2C$B%gIypVAYg$>7UN&7WH9j~!efQ6gqm$QfKfWK9QGkR3BRY-WCnYot1+{G#f+k{VU1#0et9mpzA1vd!SNQbZ>)H;A*i^K?n)6b&{~;E$ zF~dCU7!Q)))e%^A{(JBF^Md_<@nrA$H~aq(&!+5u#k?vLBr&vtR2fBCQLeC#{^iU4 z`4?8mzd0Cx0tdsalK7gZk8V1K@LUG=^*L5sFw4Wfh5k!OPUGo65ROqA)8Er<&6}fa z_03)d@u=A1qZ|&6Sjr3{2S)-fYBPfHHh~#?4w7ImLZ?9R4x)y z!dBl1J)sfFVT>7z{$aD`I0T0zB3Tk;WD6Xbw{CV;2aLIHEr&uvDsAFS1iw^)?4E76 zOK0pFv59n+?0{J!!1|sYooq2IvpP*eEQ!q%pI!90zh^r=@va1@b z)o6>Wz>1iTpFbsWP(=BgJ*(FLS!TaYZ2&CS z|4*Mhd9hzy|9`Q6@J;_e#B(3({}tmpzzH7Hh{CxvN5b-IChLv11V?#x$y-~4Zx-My zS^zb#>_ZA-9U0&)@7Be1Xb9gWEHs>hSdcpG=Y+diPp(W1|2Faxf!MZkpp|{J*nrPJAm{vULr$aWD*&@DD4!sx$Ys&paa#^%B)Ammyr+E` zuVc0$+8=$_JvaR7{)7dA!*K1MGec|dpf0*G>HS4IN8ZU~hwqJ$bq~hZ;X0Q|XKjS@ zO1Hr}Yg{i8H*ePuYgpE5)64b42EMZii7pq%s8EP0XV?quhiUo0~cV0I3 z3zjm%ZDlnVO5In^@6fMIBUzOPqPvm>BAAgdjR=41q**}7dtK?1_!T|>u#${A8RV2f z();Yz<*Y{OQzaf{0Jp{kPjoVN$D=TBHX{fb{DxAH1v+@B{e82Fk^A%w%Il(a6gC|y3h>C@{F)VZ-)?5ec^Uzt zgS^|yCUH+##HNc;!U+x!S*#{0G?pGEHAOZ>R~-hMqq2OHTrnZNvW)(PDFBPjY2~E0 z01dSbxHh^$lKl(MqdRsBTt5T7{hH%|3<;;uDvLw6YnBzOG;j?8m+(}BKD(KyJomEA z)L*mbs6876P|nfnBxu*ShIzh8ZKBq$3mxT`c-f1<96mI-F|B0r)#F|2k`vM!)3`Ur zV&=ThZ)C~Kbx2TnbL0I+Xnq+|jyee{ZZ;RnO=ujJ%An3%$yy?3XdiXv_*3?`nvX#4 zZ`AIJ7$;)JWZQckF(JR7urvnY{RFqsbhx=EsdH8(L=EnG`tqe;%m_|BRY&lG_3@VS=3O!axs=bExD(R|aV!3j(R;cE6%wYW} zT4oFzNn&wZyZY9!N(FrNFJ0kOM}`x&czn)q5*Efcd&MwWI7n24R9Rb zY#3D!_FWiF;;UDj&5K$#TM9fQlYT+b-u?v7N(}+&o{rh;ivBhcWnHjyO0s>!>eZYzZ_cxGH&y)TqqgKJX|HSwa-pth=jV5$^Xf+2TZQVN zHIr?qKH+RW(3f$o!s*r7yEh*PM@MJJqfs;5mH=N9MSmrB34U(}Z;qQIR|R$r%>3l4 z%Wxb0ax(n*;rQ(2)xTc z0ObMUca_;{Sk3fp%yj6aD2P@K;#u)Kqg@TD8PZ<(Ne!l|%x#d&&V|>>Rds>oh?in# z+{9iDQkE?vvLmAwj;Kir2{9ycM{kwQlj+sNMqavUSWMtt30Gg1@6sZ`?kpeSZH+vBhbgSdI%QixziXdw720wSb%=FQCI-BkzrUQ|BmCZ z0B!>VvB<$qjKl)WO%KJ9#9XFH#XuC!mrV{suf+`vLKn}P?O~UaI}Jdutql)95BA*# zp9g9qL(eDtjswpFwt->ib8ZuZ&V#tQAs5jJ2^K*_erD`a6kRp*Z8Kx7(9{Mu*mK2n zpYcNFR&Gy1UEn_rNl;kJ-UP}S+*?KJ=%wq5Fdc8Xwm_0|2Y9s#%nC?7Z#|4KEo@l? z>Q(8Gfd|>#V*r(%$$gW1GK(aa79!yU(Glf+^mz$)8m~LmtT}zouY_)Jtf>(AV!ruo zi;EnqxICcNmNmGipcLuEi}ornT*f2+R)fU4(4E_%VWmqE+U$zxCZlwDUpL#3Xto(q z)0?YXT)HNEhi!zWEv^i{s955^b(*`|bl7^^FAuZzvTE$!ThmR1x@tG0TA-_T71q!Q ztDCCwvsdNk*%+F)$lKGD$qlwtmTjjrRs9W`S&eIxE$QXk(bWK_8MOTFnOhmSrtqqS zsqVh9+Zwq>@YXUmo7@*#vM02zAz$5CBX!(hXK4AZ&`KdGR%z~!JKHK7_sKoj>pJFN zJMqq+kLTv2zmzCrH`N2Uc|J(kHXWz#ELp+-t|L*-BMu@DB z)hXosT$Liu*00GAccMRkOAeQv@+;+|s_78rZoa`Wo{}uVfe&3qqJx9Ee-5GG@8$7( zMeq(91$rw|@+dIhxivPB?`=IqD$~9-c251(1CNsBS=kDZu9_4ZE3 z;mY7E*I_HPU*V_k`FaxfGZT4GT_?v`l(9##woM-;Ot%w8L9Tn@|2(4HJ-ZJ*4O z2(Ih|y*JXgNdyL=KbK^F*F-X_1hd-sRd)87Qh;k(k)@L9KwZP6coFth21Q0frxUDW zwc{q7k>67yWNz;qJ6A^7HG(@krO$#ylM$W9B&_%d#GXfnfim(<$)A-De{6euycHTd zQ#GZLU%w|OqY4CzmUIm%%~*U(Pp1~>N@untqvprAIsMmq%JctXQqH@#vFiTUz5U|- zAJ1MKe7pbkL7olI|NlzKYuCPm!AqfkGrs?yf6Deh;cQOijHCjVb2i`utg`?6 zPm1gR&tE+Mw*LPh&pq1zIgy+Oz`nuxlI@hI$1h@n6ZJ8yc!6jWy)qFoZZU92o>QF_&!G*7{S-zlxJ$_W`Dyr3ow} zED58mkzl(7e=mK(i_1{u3v0f)5`VR)!v0?c8{GT za2D|m3-w-i{pll*-n`OI4%y!~tSO&wFem|Cvi)8>DblGs^OXZ%wwa%u`O}Vt-ag6p zH-u!|CX}vfL(o4;&?}PKX($j}V1}ecqVvs(cz~yD|2Mky56=qwzyIWUDgJkF|J(Zi zgFG9y|7%=*ct2NwL-yYPsb>8zF^{dh{JTCUH1v-oJjQ&1wmFW&L6pq!+jNfh_wtQ* z=+|yyGM^SLt^d_qRnL0)+uXG3snY)tBlCdq-}~kBANwz!eAE9A@oY-}*JyJPrEl}I ziuu|0I!ontOgb7qSB(`P*Rd2e5#6_ddOx$q^$__pM0D2#t=*!NHxWv>4E)+Lg@viG zECwdqMr0QH=`doO{9awKeadk76OM2k5ZK`CJSCNwyWdw5;1*s^M-fU8r9wiF)l+zA%d`!iS*1$Ea*(x{ zCsOXsvGn6!D`CJ00{5~Fyc>WEFDu)x ztaytS^=b6Vb`P@)+;6Yjmbcn?WzWmj+cDYRD!7tVXWf;UPl+5>=7_7x#H(GPnUslt z@BxPLQps}!s;PJ`AMmjOm{GOk1peEPmAoj`ES#4xIU*X2*{TNPG>Ym^UsT9lIf3ye z$fiE;Nm*X;#4xYaKs<-=j@WiRc>Y`eM{a~jv%z7&P z|G9kF{15w2o)!K7XD^<=_~!pV#PdM$pXJqr`w9OvD-M5&1;GE2?qhBA=bQ84$M>V- zGk=w5E|YF52(OITM5TNB%ayZ;&~G81w|dI@Uq)iH>VK8~fAZ{UDgW>D{cridALO~G z{hwm~Uo#jhN|;4@TcSFXqEl#XyWw13;G2c-9>6Yq_Yj8RyL-0`OIldhG?cOpXI27k z!?4jN&b1i1Y6pm_*d;MxOP6Hfeb!m#t5VxkEKs^x1nU$0*~;HJJ2?H9Yvt#I>H${O zrX)TbWZqFHz-{#8`Lnzb;nEb-tsklvwXkCvq3z22$F|50fLD#*X6$@d+_n1VSbbf` zs@do%B52fSH)8BEO`QCx+97v)xqV3%ZPYf<+Nf>T!9N&9pairFLRrq0>yFILprHS% zLg5#(sK6k=8{~loR?$ALWMVHM2`3Z!iG=8y${G4!J6-fHjuwc;P*b6V62ehL zW72JPk47Iyl5x`7LWeM*(TBqk3Mm(@?v%W=^5J@~JEF`M?(f9y|j758#L zV;o$j37XJ|h}Pq-xK3J+yJLLWdfb)sr1kj!X>Fkom{XPtbaHeoTHS=Rf0IDAx-=xX zr^|8n??3xkuX^nGKRX^Ay*cjA!+U6B>G(g`+uuKUS{(oT``_089_0D2|JCVql)u!` zPM^7+5Oq5LXtlPopGF6SXuLo_QRP|ER?B{*0^u03gv3b48kv0tgku~nBn*9%Ut1HnPI4$A%WOLm$4yJt=6yat_Z)P z4`mlQI$gUN2jcWb@umt98zCNamPdioVfnY$Da<7dF}zHdIs*-bLp#f;bTg z2|&@w3=o>DDKb;D1{xzdBZy5VgezDIF1wC3B z^CVgz94`=_OlU+k7a3Q62IB&f@ON9Stu1tZ`kzNLJJq#0AR$)gm4lEL_uA!l%t;&-oXrW zi8z^3A^8G8aFQ@VCF6@OdZk$K3D1*=>{_M=SaZ;H*sg+>;j6gok)&N;0nh|Ij&KpkMXc6*|Z9A1N9nNkjuZOb)Tc5u4`d8I}U? zNh}FZI2B}P7Z{VjKt#ufIKor~SBt@r6Hb0lsi2aGR;z>ZUP1fagD2m&I-1NU-5euiCf_s_OjGS<*=ByN_YAzWqKoP|gj)mlDAX83S9dt%;_)ktHd80Ifxn91=Wf9?k*=+8{PB0kyVYzYa0SbD{>>Z`)f*_G1SL0%HoSpwL{;zG{1H6o7?F zLKLQ4%PB~KZbo(JuPVvI<7jZIYS41E?9$d!S^&^3>5GB{KHV7Ihyz4Lzxagu|9L$hlQ3_NC>`F;cXb6!oW<=)k zs9`0v$fL&v(2osSx`UN9Rl*aw)*u%=BU#w(z9YwCj@8@^ZA&&Kaz?oBL=#6UcG2*| zq1Z+F#rC_1$e_EUM~#+uG$s+dMqD`HBpYJ=~^L@p~?<*_bEc>Z{-Lx#_=s)bOisqYTEkfV_m*4*I!y&q9{a2^_ zeBY?WYE+#rDpXvD#+4lWz7CT6{NKwUG^l^G^hGt2wasb9I`?|7u3w4J$ZVqBwtoI& z{rUy|Y1Mlo1&Zi|1dAXdYO~Oe-;!a)-&AHmq(DFecP{?2+2tKBwD_#^1&Izr`)U=Y~ z2%Y^jI7A7jS2QA1qNcY<>S?Y~$k!~5LNuXL85H9+%o&HNshYnl3+L!iSI5>V>dXd| zHFn7aHP_i)v`qP0z?u1RCmKx^Z)wD7K`jkrXD}42KU`$DPj;hi-_MxKq~@zrewtlW{yMBti6 z5v1ENevl(pgW*Z;w>ervTkbx3Y`XCAZuaL0h?G>G>3z>l}yf?n(q1YOeD=mv1RIk}=N711JhFy46-N_?ptCl2$GT+dkl z)u@WlRU@uz11(w42WF2vjbl9!Jy2zgIx=+t5dL=zqV~&<7AJhyD#}GW2gylcAp>T{ZMGP=)_2 zL9p(5oy7&zRIe12TRz{{H**`@>z*adSkg?B8OH{iX)-@4H&fXQ|FHPnayC9(CAsx%x3M4^^)BgpqZgch6olk^E1&rjU-Kq>ua#~2z!-WFLulNrMfN}2(#pA zydg6WrvZ+#hD7B8p4j!~b(uevuuy2fH=6?&X29C9cjmm3A(MMXugwa{HF;Dj@|VQ*vfDJ1%tV zhQK4(_drl0-)yPG_oCgtKxMeYG>VMAxhTQSAnG7K9i@sege73k@j}7<^|u0C_wI=c z6yMd{%fugF zWZ1r9YU-y`D7xe8N*6@i&SGGI6FjC7m6Qm3=ZYY5XPG4Ve7Jy&e%gV`aTtJ%unB^% z*|ajBsF$`xoA!m4x&jVLJl|ar&S^+4Y{`-2W|up`TvAYy%oMU4e%Wa^WRL5hZP15v zOkqj1v~9an#|I0^!NbKteQwl#Q$AGTU{vT4Q|Q|fcx1LLD>gMlDA0$InH+K= zNL<}J1qw4)wgjqzLVNo0>pf*hrlO3ZP+!E83c~A3=M+L&*dK{k8=3olEbhyQbSSjP z&Z~7P+;)X*nJzk+Ae{X~R0s4zO}z*xCMIK3fYo&_GPx`VIRh0#3ra%iv3+E92z8lAq((@?Qe8R7IsIgNa=$=H|S!S zetLd|zl+IY4Lj#}=;W#i-rC=pSjYCxr3Bs?wR?jxpG(h2mv-uzlIT2-p zk8X6_0M_5{59KwV^(j;)p+-u9!asqL_n!4A6qhvlKscRLO`kGds!E|ND0XjnH-FaC zrOOPyWAT?*du>TLfjl8N5@;KAF9ghGS2J#!!ZrHPr|`WXTpN1>O1=0~S$nj$wOHoT z{N;Tb9ductLLE@qB9< zUk#U)wQpEs&5ZTVK@qP(nl}=#hiTD;i0{A0aA`sPhPw zUrOs8wn_>$+=?}C@VspgL7`pfDRc4`wYP)#<=@3l8!?XB+hXv>q0#wpQ}GGrAVW^$ zfF?M~D{QzAA#&ib#_ZpqV+brzC5vZqzv8nVg)$QLzNz&~Lv(&R`ty*up4TRIJ~}SX zqpF>m_ky6&`QYqak*KB=1c%CgDC;o#T2$VG!n&1=8#KD4i9T00I@QY8j-l{eczzNflCuO)v8<%6f0d+_EXE;aN(Ie zCu^|fb`<_X7G)wc3V$JsKLKTH_o0b&jYGl-uQZC;I*mQo%E_Ebf^>pVz1*e`sz_#D zqT$=ude{H{b^#jeQlCQ2`1fb0o=@}s?9@)5YN>nh=azjK;3yj7;L@ehqtF)kdX(j8 zHKb5`Vck>^v)phJQ#BUdaX82h07MLj2%`%d>PcgI@oTun zl_+P|0MN7C4uyG6grN?IDJj%Umzw#mqBTFCoYl7hH4n8V z+*nF0C@id==6#5(WfUWw75ibSy+t49XUmJL7&^v2^UBOrLQ!neJ+g^=GTkBG$(jK< zS~p8!v$(eEn|v=kQ0Im$pely!13bo2wCLD_^5reltXnO3P2%SK^fmgh{_f!mheESw zk@X!=6hcv7P(6xFa$i`)q7zheF)|g1%oDj#Q_Pqdu&btI<$(4Y3S*{kuMoAH7c0l1 zRXQ1{2ML^N)`wmYzjH)*?Rfqrcsx{~e?{zmvrzpz1JOvph*u^`K$2nrwvVd%yTKp+~{KyHg?9r8t6) zUsQ=*9jc)mhbg@xu|0g8g?q5jWD`^$Oj~elEgQ zhe+=&`fVlhEc8ydH3Dh2EA%lqcbLKv?2RH{wB1GIy<>5WKw4afEOhT~*&y1@k)MDI zwSbc$4V3+jM%vUu2~_K%lYF1sx zmUJBg4Dzw0oqML>#+Il-K1&cdWL%1F=|EK_^5yJ;kc@fb&keeGvbVQai#+Tk0^*HF ztR1jANxnN?!$Q`m4IsbNNGYepmzk9=!VP-MLQ)iZNb$d6xmhLi706$b%Hxtn#hWFsayOl!z=T*oj;QyxJ zSn7+!mWTejE1|-#s8HUl*1tg)lBcBBNL3&|5wAH*DE1fmXo|@4LMJ6_%4nXig~YS zM8rZ!GQViZ`O3-jFcAnw73^wsI9_hm@ zs${a6BjMV@wg;!D?c7o|Ltc;|VDn_i87%KRPJRQ<|5Mfo-ddw!JH z60upmzzt#p#qJSn2l>6m16HY2mdfSW-=K3{?B21zK^M=K?MeB_PcV&APR?hXh#8CO zGAF#!#gMe+?g{-Hbn(17@*;(_p{tM|>0%Fo{L~D3`f5FYAK0(b^9AIaDEc}*zj^dm>G|S-ZJ_Au^!&Xbzf{k|si-tr!<~25DxJEU zz_kkbr4w)u`9|*ipGePp$TxE5|3rG;L%xwazf{j}R+3ifd0%XrxbxL|{$AvNm7e#I zZ{*I`==uA=ewCj0kZ_#|rNJBa#PAj# zQX2RQn_NHi%K?AttoRZ}Ck=dwPHqA5OPKp~Rk)uSyI9su%cNqc*(KpdmD#$T)#{vN zz&Jt76xG#}zdrDS#w5ag1^+m7g%0u@MVr3-VqBJa{^(avIBGAAmQ2yJhchis+jF4>9IT%%A~y6?I;pLg9pV zd%(X)r*APAhp(0-n_33I#t;crLW87JG{wAp^RT4H`XWy!7x>0xg-ZcnkCeMP$YmRgEzit=L1z;A%hnId%!x)bSjSHSBc|0}S0bcIZL6nlmi8&mfO zNiGMI1YM4ZDPyc-pj0sTQmk{KgB%~OazHHvUiP;h$lHL2aHM0W;P&!yNOxIKWa)BA zbHaOW?blXF$*E)B8Z7J9I=?mCRSoPl=y2J4|EgX{3mqnyj&H$Hzopnt2|CcaUNK#U zsR_CRrI^V!Yl6!{CpDFKoaW?B8jufo`qw4K0PMT<9v*)2>X-G#&4fGYHkT z@xI4z57!A@Q#q;9uF%Ik5Z5`nLPrBMV-s|V(_E$8kkCPtu9gQP*>VdSMOf7=uz|`Z zx?WB~@kuvxt|H(m<`g#G63_|y?{e7bDg8IGGT`yswPC6ecfIX@($by}#TO*COa^BVgbaIC ziiMmd2_#`Gf3!Tz`U*yKlQWJ70~#UnF=GN8y}!b$a&s!kEyrrUfWmQeKq%4IoG`5` zw-%$RuP&S4HvU}@&JR`b#-rmV`?Z-w)Y1q!@qLEGb%*Ha`0ggrmd2qpiL5nfu|A30 z2~nK$YlvR7uiQzbEGEs-mqq$>5U+GQotf6KrI(H{?jy74QOn_S`O4uYuLLKMPiZ<5kOv0&kT$_X{c6`V4 zxXvU_!KwKKr$YjjQrq6$*<9vi5h_ihUEa7tIyDqzUv+Hru3CIKqS44yCf60v*O#tz zP8yxkBurW(eZo7X8tdH2v_-iV2X4DoV{uN@4}i)fT4Jo-P->`)F9jHaSX!IhZBAk- zauNgr=ML(zvsdU;y(`DaI>)%~V+(ZMK0*F#mJ*dkTczeaI$k10_WVi6E*G8?l}RYO zuqG$xwnUIzs@laxN#(m6!8&gebN2*Ihn$ExX|Z)MjMN(V1af_%h@@c@j9Il?wAk57r!h zaD0T`n)34cnwdsWaXltEiEt)+1%Vl&Cr&eIlC^Ymzc^nLsXS`DBb~ z3P@OPVk=FesX~HYi9D%hMU=F3N9(feBt%R7ZDg+s9&(~{tV&J_TajI+rEL0gvqA~= ziO?0)jg@dz+T#LYu}Tr|wM-(HCj(9dLm3l-LjGK4460J2Ry?H+E1Tp(o|0gwr2>se zGDgt|uV`pkeiF&xln&FT;Q2!hE$}CuYE&_%8j)x-ui0XS;Guxb%Fp~huBEwOM2fsEC5lyun z&6xrfh)+^*th@DJ4HenjUJ-Ge-FgwDYVuPeLBIwnz1>~>Y6omAvFjR-OgP1>-#`7O7xIRT((S~wA2 zp%e8`S=^N9nq>)iY6>X3CycK>tj#U%j^b>eHwpFl#GT5OKJ=HL3QdPZ+{*dB+$2UU zWxSk^_X@qViRR#S#n(XZ43frR*I7H@l}RkYVv~A4;gW=?ok*SRhK|pKIUjCy5=-of zKUg2|UfS4IFBO#)v!YfhqRPc*Ju<--biR{blS_V4QFvRF|0 zv=^+KL=u9TY(x|~UPtkZ&!QO4aXz|9F^tcmAkH0BQKSloIxbdnwPZ5o7&g7lM#>F9 z@&tC765bs`0#fVDt0Pj>v6?e zd$Vvdr*jP5^Cz={)qSPOv{wylnanb|DCZ=fR5v^&9=E>9w3p9XIGOg`l=G8O-qL)o zGnr))Dl0dRGQh2wh;N=o*-oa>&r(kYB%tRM4^t*`8mSPaCFPyllW1yU%REu#_JomI z&uaB!i!O<+Ld39gM9~0^B|bN?_2}$N0<*M>gtT4bGWV4#l+4-^b_NVd;}ZN zmgk+HpGPbeEFqrT4vl94*Gl7W9ztp~9FJ)lP6Xlm@XtX06S0Wyb-N{zsausfw112o z&hvgiuUSs^(7)Kk-rb8yU*t5O=xWvA@-bpbED>83$3V}njBu_l+%V!~KsbbW=1kpD z|6JVGTA@*PQ3zdSq?m<_uqv$jqpCr#0^tn26G19)?VHYnUKq3Jg7A>CW?=VqS$hCV zoQIw#4+h+4(_-fcc}BbW4*=r`FfLcMSOEF`59sxqvln~l4NP1LRcgXiXnG{^7NYQX z%JTC4H|PY_2$+WgsbEVKaRRj-a3Z#lm_#Fl1%RRJm2wCSyktBUTbe*6#=*I#=v!3c zYl=>_-MiQ}TPP+8$(7@8Rs?vO+!mY1Z$(F$3i`@pUd>glX`nhnG~bf2DL;hj)cO;e zZ6S>Qb@1w?Dj5t)m9VjAav)ta#+>NI z)vK{_=qj}_x*SnZ(_q7yeGOB&#wHC0dgO41$I1Pky!oE|0X=$jMzcqc6jJ2s8DcWY z1Kv9*|9#W>qa#HTozcO#{K!Gwl8z`QIi`tFQpM)Rf1WwD2=P6GZk#m*~lNmTBjK}Jd zNu!aLK#TXaS1L^Cd3x!UXko}7qm*1~f`T3-Dy632p3ei_Y^ohywbcWh!fd-O zBM)FMhC6(>7LW0bPX5@)cX>jl(uv@K&Fj~M4fWGn^Gwt{Ex*>dv} zLH=ng&i_OcvhUdZ+l%h+o9VzI&kXZ-3wQ%3u=^#a5-gi!2MTy%x4A8HZbWV8T|OdX zL6RvEp?6@pl>LGV>+Vbkg^M)f6~eNfefG;5jcuX+Bu67Wh1;Dm1z2#dkGy(ta};%pxk!8=)KgM~p*j27$})s#rUjtjQjKlK5e4={+~V36 z0)q;evzngvr&FvaN%RcLb;#v>Ww%GEmb0)Ru4v`%j6R95Ju`}aB5+O690v)K3JTH( zO$UsRRlQ#ip&gif!tk7RE>U^I-jqlH9fGCA&6Wfz#2`|6_PTo%hhAhABLPMS0W!)T8SGWH<{hZ+eLswc8#wugRkj{UkXlaTO$Os88c8p|EEJT@>i|0DP(|Xy#k?J`cS-W$;#^VMu_L_Li`|aPu$ovK0l^4AA zBZ-BE_KG$eKkCgLX{Yt0=8@c8@JhMm447R0_qKu|izYVKt56DVL=^>$9WB4Ue133T zm0OD_9e9f;`AF*ST9r2^aYTf`96XGSl;fU6_Rui%sgI;sDsXh;L$>F6j~-c`qISun zn~0Z5jI*F3VajJ=&c=zAFA;kGUJx!7h2MYIPd3oY7-vX5R#9b}LYwJ~APpn&DK{oj?C0s6BThERV3ug*vEJue2r64uNQ9>lEoTU0Q$t`uYKjVL6dzL+Xi0}u1 zYajVt*?%`@U8l=1;(0+92jyLchgj|jwQDqKYR4p%s*6hP!Hw^*J*jsML&Nj(sJiV1 znKd=NAT!@{hz0X#q%4wsd2Yo9&+@MiaVoorQe`UMilcoaCdJV{<3qo_BV$msEsh3y zQPguI$qKX~*Wn+|xy8^W$C+eGis5kBmVZuIE;Z^GACd3-8>XLs_`dIgZ2R9w4*}|j z#cbgUODISOG=badK_UAge=|z=zY!f3F}^7dUgz;QqeJ`hSophv=aFj0yS? z98Wr%V>0d&{;LAs!C*sAA0$dX;5_HFKgo&gI993YCRB__ERodGL3LX2QpgGDleJ+k z=DJ3k#I>iS9G!P4#1$Uapl z`@jbBvHIi9z`Rt1wvUhx|MHdeaaiau#p!J|JDpBQ=`l+Da}RZ}>mDjITrDf0)1Oi4 znk37zxCn=HNkD`rWzow$)!{W1GCifk^w&&%1XGg&&QW1+H$WeObHoWrW5NkX$H`Ty%MKE7(AZkrR3~JFxK)*S zR;l5V#f{0B@tK=`BV)1H(x_DS)SP6(>XE&$h#G7G-7!EZbzk}O7EAcccLI%ZN(V&B zH;#r1QrL#mL0FT^aF&U#70#a9mJQNbGk)}IkgE2~*(&8Wa3I|SYQ|X>7M9YGvhIQ& zn?A8p=W3rtY@D%_r1>5yw+}K!O3j~TnCAf-*ugw0P0HDD0(Vtn5A{4L2uUGwI8*b? zXBpW;`m*3xu$9X;I?_V58RI+}y>yUsE%aO)LDxi)$xx{0;LwKrC8g=rv2_#&Fg$fImtrq=H)1!Z}M@UNH5nwEkr#{6%9Hq@iAje$^VeN~@x; z6NJ^s>9Xz1{We7HB0#m8`uuE#Kj56Z3g& zs;%1{7n=Oqm^V9ls7v+Ye%pSzg>Vel7V2`^2wg^GKDUTFM}J4>&YaJU^9hb3#^v%Q zGi}y8RT>#M=NzETpXqRf4wR1zI0$#Z%BS@<*~AEn00`WGfK^&2uaoQt)Wl23$|G{d z-CGl|9CHOSgKW%>8;|@pl%o~VGD=CP_FY&J>sG?*UDkX1l~DGiIR;X90lTHHyBnsP zj$?(@S8|dNCV8Rh9H94d@^c2tCpqI3C!#yT9|XxKS+}E?L*;Hm$1Hv*5Z3(3^Uey- zEzn@p{T}Gy`dU^S*UcxcMWSC8A?I zyUrMj84_&EUaFpFEH+0J1Ow#fTk2t&)7lHh(Yc&K<%Od^!aNVcD}{l{1_O?F_#Qx9tqa_z$QxtE4HGCNtEZjI;7SF=)soc0Pva zHPhcIR03_2kD1E97*Dvtk-kX@k)h5>CUQ>jSUapGY`FZrv4$~7Sx!Xxui(Fe?O?n6 z12ETdaV-htsFy?K6;7jM5|dah6Wj-0>Zw$`?Hos3i??U3c;iHwR0Wwz3N!+a8KrRi z#c?bU1hAw-G$1&ia3a8M)Y3^`LZ8soDZ#>tPLU_T-CEO_VU&8?I6kSKcS@CqH8Iud zw3jr5MnKglx5`kFi4rm_SIXPCz}dU8as&ZfZqX#MK0btkJY{a?&rgUcjbZFWlI3Uz zY6$a8V%Iv?=vJbeJL7&|{5y~<@Pl$ZHc)VXe7G2=?5*nY{)hpgu&5}WRlgT(JVwD z0GA{{yYck~pXlhq$mH4?ut^%%X_-62+}Py#uo$$b==~-xCJym z#D%V9=S7ReC*&iECd%_KomrOZtOPKn_is}4noZ&A1od{e(9ZVG_Ld^4>5f&IE-^@; zV{mJhl9?EhxDf{u+Zq8IBFFhe1Z)uGBNAks{XwFB6cQ_sAx*Dbh)b;Ushc}8bA%RX6ne=ICGEt7+YJ8JF~m*JtZ^V0yHcji zaUyYBs;hHs-SEI+Q!k8(CeVbe*tkj%mOjkU07oj;NC{ob4_O2|q3MpM8xfHdbIOc6 zu;vdEg`)g*%!rV~TceBK9yp!JRW86NW}%he679QFQ#35W7W3dPBO^1CmMb)~!GJ~- zC#qSC8K8-lr#l~}yC24MXe=uBpTR_sK%S_gqp4QEk^-AtJTr%!q3N!smS0sl&V;5H zLK4IGtvX6!Y~e((WJ*9Y*@6G=1{o81P=KOVy8DCM<1({p{Ggw(VOO;w%E=XUqUlbM zGyTuq?hp1{*;VICaSy6fD%oslQbD!hH!3)e=4dDdRP9;1WiE^($hC-kz0!UNx7Ob; zK6$fAl5}^TJ=^`EDsh&95yeSUI9GGx@)DEkbst_O| zteTMywZ{IEMkE!)^A1@y<8(O6(cdGM&Hf<;gI)CY)g|U+3mv6V=y|$v?4+PR$Z#|w zrkgFBb$=(^Mw_yMuV49{e|U1bkl~u;g_;W-ntY5%mK)S26cX;)!&r9_djHZLus*~Z zU?f2`YpPozoO|B)+FE{jc^P5=F=Tw$O;i)neR*{F;`Ql^U?<%E!SjAi6P3|ciy!@& z(d#75CioI!kcM0@5>3%1rxN>;atFCYkrzu*89ZKG^ca|^KyCwwpF{q^DLOj!(T@kG zN2gofyQ8z8-~4)p-W{Br9K1d|dU1;0oS?%uub&^C9ld#dir)N$4qpEY{c`mB`Iga~ z$j1z_@yd-h24ShN@tDDFMGak10VOycPVkVRA)68oR%bWE5>8_eGE?Y7tu~$TZ}-2i z=4Z?!npG+tq+7^H>lkBudwcuo?EbCy_{q-B)j{c|Vm?S{KvTqGLVLkH-k*4!PHLoy)nJA?yES$PvSq>+u0>X&R(p@+~} zDe7OI80u6vYKhXxLT|*(owXDZ91+T+kp!sWO*dwjX~J+Ux(ORHVcrE}%rC+$9eNjJ z1{nbMygPbS9?*scZ(3Qg&rOo|zdQUj^MA+JVGUy};Q!k@PoGx#|I_W=d;WhHzYSD~ z_9Zs7fliN~|3872>4GE3U^1YD@1cX^gTtReItC@7Y|fNVRLTWcU_LzR9zNF@N2J=G zaTXCFhzMo-{{^8e+8_=2qr8m`&;8r*Ii=*>v#7QGn)kms!$kK(ajPHZ+4Z=={QckC zdGchty#IH$ANQW#@Bh2_{q39$PJfzMpMU4HiL~b-9 zd#GsUosfLOrFJfrW8`{wsF-}nnC$)am$_y|z9P!dp+xzW2xSL8+Kg$GBmaWTeB}T1 z=8cbhb$t0~6RLvwKOUU;^1uJb?{rY`>5~HbufGDF1Ypq!@{Jue~6%J@nUKD7+vu^y!o1Ld$f< zZYh;}74O}Oo35M{hvYM%zCJGXB*&3Mpeq$7R(&f!CuwXRUlK_bd#LA`7eRd;N0`Sq zT1VNz?XII5L4INmrRA4V_He2#glB}0tuO6Yw3c&L?*yvm*X0t(;-O&Dfg=AWtCpl7o}b`zUSaRXBkV_aP|vX0rk#D#R9m` z0Lx3GxAduk7r777mCdc=mt7%E9Y253G=b4Oet+GHyWjG2&sbbx`_>R|NlrP9s)!&T zg>RKAld)Kr+3=yx*{dRKsAyDu(}Y<4{c$lJU<#E^s;?!W5CY<(2TL!FGh2h<2gSw1 z-hQz#J_?H$MOz0GZgW6g2Zg2g_Ny8a8osQxDSus?z1xN41g48x!|NZl<(^8BRHvm_ z1yl(dgUz~GB{~&15{_Lm*+iP=N)%Q`bFt2${ukb3Ys*Ee6GIiE2kL->!%lwz zHZaN0*LWP&26lE9e0&p*=eFq7WtY+no9Pa|`4XwncGrtNMJ$-FNQxU7AVVoJBP-sB4~bOEag+khjd3 zmOarv8$GlfTweu2%ssEZV1iiU2wL0eb2rMr8fgu>zoSd7PxW`srA3&n^$qqpW9yr49-m zyvA9^DI`;}em*AjIHrP6z^$i0iH9T)ms>McT`Vm6E3KR$<0;{XY@A_EkpF!z-020| zeqBCkr-QI#I|Pvd`D)1SwAUv&?)hc3wzaJrHLr`Sl;oF;U+9T1hb8^Z@ruZLc4J(T zk2y)6USi#SXFVErYLW?J7RZS|#$xE!iX)AgYz#$?P=vGm?6 z+Aocw-s3wbDV;%Wjc9TLLYKo+@xgx-qC}2!GMFUGQEVnPWWN&XTE1K#)((!3 zbgscAafdT%K3E=w+v`A~&bY8T{k49(J~aL;Nt>lPPS7!n(ZM8VBEkvbOJa4D;S~h; z-Br=4ZPA_52`e$TQ^S>poTkI>bO)L&KyK}WHncAMczw(9mT*XST(bu4JP;H~Am- zuS0p)p8dj8q3_gI{N* zv$oIga;-BK2PQFfL3^Kf;g^JIDGTmWJza;pL+&|2Vx7FB$W^o(?tUA32ap&BicFK} zqNVjER^h5n>YquP)5JE|4R^zBmE53gHB0m0@rSDU2m4;RN}Aefs1> zE`1fe8=6$B5-cj*u^|r@CqwcPZo47<3c)dA1Gu6dw8MZteX=DVp=U^KqH_sc5EbET z+R_w#zZ>rAgigA|u20jPa7aiaF#_qde3joZ^d3DrgX~M3jM)_GM-!8#EXN5OJ`|9) zay&_!R^!p5CGA(bT9gB8Y5zHx@&DSKzTXc1>-Wy1_y70P?~guxdf=nY5_-@T%GqfS zi3^=u`Gp6~=e+-0c>k;NZC*R}>u-zWKX-Q?KdZ!lK6~1Ge1HFY7r(o_|An#6RCOh_ z&#M`+RFWy>3S?71_6`c#N_NpFs$J-LzY07gd$6S*6lKs}$N{#u(cXT|g`;RB zbYx8^2Tn)`U0T-`c&9ubGn|jYoP`Fe?QI|Vsy3tj2b3*BKI9#PPgK)jd)qG#yc&eP z+k&vS0)#yaVGR_`08Gk2yDW7`+-X_2pN18wqo7lE3zZ~wVxos_oia#6ER>sLbu<(p z&3FT3z6{YzsxqDyt>vLe)1lD0{WzTPTawkQ%8rWkXpSyf`Y?x5V3+1dlH(emwg4U4 ze-+~$V@N!w8@0=Xi%?o9DOFT~2k9S-rr_#Y$Aar9h10m!-;@AQGH@+YD2m@GBZyvbharc zk-tuW8$lZGwSfK8ghP%dH^E_qQ#rm$U?t(o(R%V!cQ=a32a5axC<7hXb-2+L3O`+kIR@S_11X~iPvq32fae4AnT*oP)uMmCK)FY z&PlunX*J7qu8KVzPm)A^C5#EEGiNhqMf1v*v|@kjuIz2KzuW1w?b&6vYzZnygm#|G zEd=06oK|;+OD8(*g1Z4+90fMaLw9jO)A&dre~hyt7NBTRf?*%wER!o+dKyAK+j7Sx z;##GzYClC3ic3}Hze+(x8mA@7)^D<}8xKwFs}T`&fHvL8B&XvJkYkl9_9~bvfpUc= zDgDz#WvSGCki4S;P6?XzaRD;L$wZ}}Hf7U<%~UAnZ1oy{So?;rDE_F)x4M37 zly`ZKntzwp+q7s8AkZt@*zQi)MD3O(&k}7Q(xm}QrXgSNCkM;s_Pw*FO}08jOF^^B zR{h*O>wZzbYW}IT1#^S6Nz)?u32^7h zPg8T%w3<2tL-;6EX>*t1mecB;)&qEPhKI{26WvGZ0xVN0>KpRPzQRI@u(9Z>d*NLfc7G5(-s$fSp6xz~p6&LwpY@+@Z+A6-;gD^-eB29O zK7Nesl*;#S=l^#TuHU}xZ2lJNfBm=n&j8*Z1pfyI|Nbrb{agL6c+h#&kzahfRJ#Y~ z4z5btiJ_CdeSH<)($FdbaR~qK+fTz+kbl4Ulcw&U$1vad3I+;QZMXwVZ}atsR{ejm z{YN{O-@pL0!2a|2$+MdM=h@Ty_|H4}-F^J$Kf!LD6C_!uBv6t{aTN^sRM_GfiLUT~ zlf(@WJvctHg^=80+)(W$p;kC{*dI4iH@5tkH-_o}|S^Bz{V z%Hj39qSSpuhpL|Yo@>~XTTRNZYAOBN7zj1==e~5kyCkYihcwO0y>*IrgM{Jy>Er5q zGaQg=eZVV8VhtkOe7o1N^6bjF6jZezmgECcL^_*gL{<7KJD@IR49558Soh*9VR8}4 z)<1IyZL`7k|GSl)<7(b<1Dpsl-|bBy=XySEdTNIW76Q11{>4)<2)?4|xsr z-a2+IawEd?V2o2dgd1t?(BPEZ0PcDA@)T+?k=T65z&(~h&jB318 z6ssCx@e7%uQrCVJ5m7RcYKpoF=aS7Y_1S{v}8 zi}$~edylL2f1W+ry}$pxli%IT|Bf&(a-7DP$0|!%qZwM0pJ`d7J8VpDs6MLaBAcIY zsy2pm;@~tc_J3vAPU(#v%<=Ryxmx!24X3Q-E>kC5?f8N^;GsS}twigaB8=J))bg1z z6BXap#|7u8G;+GP{$L&)<-hKz=tnxNjij*VH}N-HTlDy`w1Ps}Q!#_`Ph zDG|H0bdBwc#Vdbd)~&Q`wdHE;(w2>?=AfVF7*H0MH1Z)zf~8I&P+huLOrjCOLTB&@ zMMk2~6zg(;Yf9+*_t-c zYuCrIDLZT76i{WK<_{tL)eI%{f+WTuVsv{>@P(7fL~I%TUu+?gN1^vKyChS>w^T=T zEX6zxmjvmOQ(gVK!gQU$7VfE*%Ab;q<(iC1j$@o-jXJ$D?V5cPhS$MP5$t8OnbGLt z8n+t@l9qPR71+4{g~v%Fzf>D|9wY6TA#cj$S7+88Fx^Yo*UG6@lKilqA<^SDh&+g^_yZGI?|L2R3nLGsKk&|izIfV6r%+Y$RxXdXin&?!B z@GY<*b8gF)Z>EHE8WYJK`6P|d(_Q!{9iL7H1Nss9L0jpPLnuA2?{oo73A4HR!&+qN z&kE4hX}V|vTBs{om%vvr_(u5UiKu@Y3G51Sk|j7I$p6+y{s;g1lfo8pgGrLi(4P~W z$aRgSoTAE^OVI{;hxWM~LqaZWz^7ni;@-*>RzqdBg8Icob$I=H9B1qa|Af>tH)8ru0dmkn!%L_;U$rKJ_qrnSLRcy~>R4^r&| zyfnQ!a9VVzUdm^#g|+l_WdN&GSn5rUy9%+*7x@M z1(Cz(tH`3Aj?2*!DE#qOYqExVs*RU+s+$9oyIGt;=j@odt=6z@EPBdAExUCZMdt$e zrnfiVN{zj)drKW83A=Qo>VOnQCQl0$=ExL!Vxp2*j3-G>gQAh6RwA0Bh>iOYeP+sS zFFur^pN5m!owpjxWq9!9=BG4nJ;)#_f{r+J!vPfmZc;_a15v$Wttntue?J{Z2aaQ6On7< zqeXrPKI!A=;u7?7xdbjO&c-EvXz4KsT+F5tAb z9BvGMfk#zKT$_lKnLODq2^!(4oWzuHoK!I?BKPu76Tj!ZI*7-QhHfeyvSiKno0*={JiC zRjzYEW=k=h3#S6lb$E^{hjT$7^v}O%EO)_JF37Ao9ms3P-Xt3tegU5@-rg5Qh1@`u zfZE$v1)fXWwqe(lD_zz0P5FyX$=kc$qa5)S&NAbt@5F^jSoRT3WAbs{R}U=E?SUK% zH=F5V@m{kDTo^~34S)@x*x0;S?Zz}a-ug9)ML~&VAF7pn zXwzk*%Msz~QqSU;3M6tS$$j2lsPx>h8C3at7f~pHd^+E&&VDHOR%J>i%ZG_KY+y=T zh=jvEDT0YV6N_O#MDJ*lAh_onP%d(n_lM+!Ylm>XKV#LI0#&UE3c$a#;Fc0*^+wNh zsA)4s9H%iGTg0hu)N-N#{m58Ca9Zx_-H1TOmYhk&5{cQk&k|v#yrApCdeI=}RMtZo zaey&H?i_)s*2d-fD$&N+p2VcDZRd;f6QQ7%ph$i)z%+T2z9yG#(|)cG136DVAt5>% zfS8{%MfO`rT+mEqNfJioPRXStE5J_mgbF=LE{w;J{YK|91l!zTl12~=&$XK>t}+q1 zXL|BXQhdX9UE3UrFK!+U5N_Bxax6AUV>C%66!td4ki1#cheCf@5TUUnT3FR}2F@FX zDH1fo9s~L<#==6_+(YQ$1)0qqCN~)n)rJC6p`wc1f)f}sr9vf%J03ziAv(6{w9Hhe z6j%3Vfjr5l3oaoH&;~ta7BLro2sZ$}U^xYLIgcx^NR*DS{$N73s`DnAHCUwThK-Zn z4bchg$Ykbh(h9otj1Pct^#-nER4`3tBAO*s9v2(kv8sZHYFNB7jSF^FEw5`|n5G5_&1s$Xy=@d~T-nB& zUtr^W6%c^#x5oq@~2Y7FxtcthC$n}CXP-R%PyU?C(b~w*s0xW+}EKh zVOoSWT3Rv!WUY0n#HkxI@}NXM)%eGT#BpbZqVSvljrh$+F(WE3uI89lEK%=&OMNqG z1IxUmVFs?|Rd><_6mxEA>%_!fq5jjyB#mmWZn`?3lTW0Q9)P5{pOCnm0LSdneRr?5 z#Zo^o!2`$6j<05bY^F;i6dUxJPlyW{NT6kW@s-WN^6|D?E^9-A5WCK!9kL|q&ZmG{NH|i=ima;HeE^a zQ{)^yS+;XGJ(6!RQM4#+I5C)z+aiDTDZXqTWic2aW(nlbg>uk45Ix^>|R&;vwybT zyCQWjB5pI=3LUSPhU>!gSCYs7y1&Ku|2gA$NNzFzM{noZPVN5x@%H`w|6Tk(SN>Nw z|I(=3YuT z406>Q9i1?)_E{;*SLyBk{Ey~dk^(cUf2Ch-l0V@hxYVSY`OBPsZX1>K;y3>{-_612 zO5}^aRVqL;WUaILnz`+l_gl#Si_ofTp8yN^|IU*qmH3aH?cMwOFL(3%4E#Th3Ad(w zb#r3xNvz*ZM)(M4LMcxoVwufWqW=(5losIM(=I7D#08>qU|_?kQPX;n77K5ydmpCc zqX#(4<|oFe4_H_AYVHM7qxle?Vm>nuHj5Wb#XUCoPWylT<)h7<{cpii{b8qMS`O86 zlo)=VC1^9kx%^uD0zC*%NP=@ZC8y9n`1HxDQGQ`{@jGZ!2YMS@Ark>S zuZ7}%+2YE=^Iu(v-DdpflkIx_kH`1=-`)J~{QOtR+-Rz*Q$i}GoS`Af3ttayA#G<~ ziYB$OcSv%*qvzYfOwlv_6ut?}!zJUTS_XCwVQ##Bn_-6W&e)4|`WADO(1d)<7|)U9 zAf|&)pY|VYUQGHV$`e42vD7(XJ9A_BD;6&2nnNe$)3z-XF!YCDspR7O{$F6j4P^_J z1MZVNr>{^S3-a_a3ZN=P^(g#tLX#Mgbc&{!E7um~Z;DkI-ok~fAVsaBS())HuvYfP zOH=8}u?NE&@QKb63P+2O|9}#4QvKBvcD{i7wnHq)Pqk0sYz(Ri$g5+x%6V&VMgH!# z7Mn=j{Dr8~pdZ7Z#U)^CFDs)8O2C77hb2IpuyuIQ&D)FOes-;d6IQYW z=;1fwp|P`TLHG*=`AFl7pHUhL1ivamNBQ@MVHtIq>1?gyVfp*eRO z>blF|(DBGBU3ekJbxVDt09yz=fD@FmG|;V=A-Q&+po%N+1)25AbO;W-t5RZVys87Z zo<2Co*>{{w2^ZuS`EYL^=|6R=GL^YatBZU+|D}SbFaenrfZ^* z!x4!t#AJ-HqY3Hd@r{-w)gg=?DbJ8c#r@KzDvbU2-Ra3M!!p1aL9s6#AWdDMuaIR_;`Gv-Eg~SN&Jb5aY z?Ca28?teG^E!6)mF_(MvCMw{<`@h~!)&AS--RJ+jli!`|fA17MA>3z^To?T2EJ=WM z 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 literal 0 HcmV?d00001 diff --git a/charts/gateway/charts/mysql-9.2.6.tgz b/charts/gateway/charts/mysql-9.2.6.tgz deleted file mode 100644 index 6ccf6a5f3e65e29efaa6c6047560451d42e09312..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 44690 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 diff --git a/charts/gateway/charts/redis-18.2.1.tgz b/charts/gateway/charts/redis-18.2.1.tgz new file mode 100644 index 0000000000000000000000000000000000000000..8d4360f2c74cd170687f0ce6caeae40e462cd984 GIT binary patch literal 96253 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