From de093a20f7e4a8e384f5eac7cd836cae8aa5caec Mon Sep 17 00:00:00 2001 From: runzexia Date: Tue, 17 Dec 2019 16:48:54 +0800 Subject: [PATCH 1/4] devops dev guides Signed-off-by: runzexia --- docs/en/concepts-and-designs/README.md | 2 +- .../devops-pipeline-overview.md | 68 ++++++++++++++++++ docs/en/guides/README.md | 4 +- docs/images/devops-api.png | Bin 0 -> 87563 bytes 4 files changed, 72 insertions(+), 2 deletions(-) create mode 100644 docs/en/concepts-and-designs/devops-pipeline-overview.md create mode 100644 docs/images/devops-api.png diff --git a/docs/en/concepts-and-designs/README.md b/docs/en/concepts-and-designs/README.md index d1f40885c..b638bf7a4 100644 --- a/docs/en/concepts-and-designs/README.md +++ b/docs/en/concepts-and-designs/README.md @@ -36,7 +36,7 @@ TODO ### KubeSphere DevOps -TODO(@runzexia) +Read [DevOps Pipeline Overview](devops-pipeline-overview.md). ### KubeSphere S2I/B2I diff --git a/docs/en/concepts-and-designs/devops-pipeline-overview.md b/docs/en/concepts-and-designs/devops-pipeline-overview.md new file mode 100644 index 000000000..1be0eeed2 --- /dev/null +++ b/docs/en/concepts-and-designs/devops-pipeline-overview.md @@ -0,0 +1,68 @@ +# DevOps Pipeline Overview + +KubeSphere Pipeline DevOps aims to complex CI / CD requirements on Kubernetes. + +With the KubeSphere DevOps Pipeline, you can complete the construction of the CI / CD process by interacting with the KubeSphere console. + + +## DevOps Pipeline Capabilities + +* Multi-tenant isolation +* Build, Deploy, Launch things in kubernetes +* Use kubernetes dynamic agent to release the ability of kubernetes to dynamically expand +* In SCM Pipeline and Out of SCM Pipeline +* Easy-to-use pipeline graphical editing + + +### DevOps Pipeline API + +The KubeSphere DevOps Pipeline API will encapsulate the following APIs (Jenkins Core API / Jenkins BlueOcean API / Sonarqube API / Other Plugins API) to provide a standardized REST API. + +KubeSphere apiserver will provide multi-tenant API, pipeline API, credential API, code quality analysis API, etc. + +![ks-devops-api](../../images/devops-api.png) + + +### Multi-tenant isolation + +In the current version (v2.1.0), multi-tenancy in the DevOps part is done with the ability of the [role-strategy-plugin](https://github.com/jenkinsci/role-strategy-plugin) plugin. KubeSphere will automatically synchronize permission rules in this plugin. + +In the future, kubesphere devops will authentication based on [OPA](https://www.openpolicyagent.org/). + +### Integration with Jenkins + +KubeSphere integrates with standard Jenkins, customizing plugins and configurations. + +#### Distribution of plugins + +To meet the needs of users in private cloud environments, KubeSphere uses the built-in nginx as a jenkins update center. The jenkins update center is provided as a Docker image + [Helm Chart](https://github.com/kubesphere/ks-installer/tree/master/roles/ks-devops/jenkins-update-center). + +#### Jenkins configuration + +KubeSphere uses Docker Image + Jenkins update Center + Helm Chart to distribute Jenkins。 + +The list of plugins and configuration required by Jenkins will be provided by [Helm Chart](https://github.com/kubesphere/ks-installer/tree/master/roles/ks-devops/jenkins). + +We use [Groovy Script](https://wiki.jenkins.io/display/JENKINS/Groovy+Hook+Script) and [JCasC](https://github.com/jenkinsci/configuration-as-code-plugin) to initialize Jenkins. + + +### Pipeline Builder Image And Jenkins PodTemplate + +Jenkins does not include any agent configuration by default, KubeSphere will provide some default agents (including docker image and podTemplate configuration). + +The default agent image will be built based on the [builder base](https://github.com/kubesphere/builder-base), you can search `builder xxx` repositories in kubesphere github. + +### In SCM Pipeline and Out of SCM Pipeline + +KubeSphere's pipeline syntax will be fully compatible with Jenkins' pipeline syntax. Jenkinsfile found in SCM will be supported with Jenkins plugin. + +We will provide a plug-in SCM API, allowing users to graphically edit Jenkinsfile, Dockerfile and other configurations in SCM on KubeSphere. + +### Sonarqube integration + +KubeSphere will retrieve Jenkins pipelines that have performed Sonarqube code analysis. And provide API to access analysis report. + + +### More + +If you have more questions, you can create an issue on [github](https://github.com/kubesphere/kubesphere) diff --git a/docs/en/guides/README.md b/docs/en/guides/README.md index 356835a87..95ea1e3df 100644 --- a/docs/en/guides/README.md +++ b/docs/en/guides/README.md @@ -56,7 +56,9 @@ TODO(@magicsong) ### KubeSphere DevOps developer -TODO(@runzexia) +Users who are interested in DevOps Pipeline, you can read the documentation according to the [guidelines above](README.md#for-code-developer). + +The function of KubeSphere DevOps is mainly provided by KubeSphere apiserver. ### KubeSphere S2I/B2I developer diff --git a/docs/images/devops-api.png b/docs/images/devops-api.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e36f708384617dc9ae1343f0e1090f61800189 GIT binary patch literal 87563 zcmeFZXIxWT(+3JD3L-^85UEP<3J6jHNK=Y*fzUhBJE2zr5v5llAksStHB=Rm-a8?o zgVfM_xtsI8=bZQPoO?grkI#qXx5;L&GHce%fBrLThpQ;PAiVY978Vv3q1;PpH7u;_ ziC9=TdU!X0UyAs-Q?anHUsy>=smMu5(W^K+SXkMbV_~tzm>L<~mE&Y>H#RmhYVYA- zyX6c~d-v{xnvs9^*B1KruU+(C=~I&R^k(jp%v{s>j+LeQt;Xi|2l^8@cYATfuFs<% z93t@s@y+3=184=cI_TDnyd0O(jY0o_XCTDq{I`LDPjK5cxp~;IU?KswF^@iH1*{9v zy9>W<#QvcaR2~&D^7gvWwF$uh+rWhn(w`|m@C4XG85y@-83l$7NM_ue_P15>h#vC_ zRBqAF7{or8vzEbs=ibYc&)KQi$ExahJyfkQ$kG6w9vKu9n8|eQ8f*8%Lh)&=Fs7{g zHzhgeS+51N^+$cUiwCRhxP2Sh{NyoSHT{oa8_N4{r|#b;Qe=I}DgRa^V4F(8=@abE z+nz>fV4&ON5E;m+MB~PVUXu0+M}Zt}SQr z>J=6{aE*tB9cG1f9k{{7;^%9BUgPLp-5iizx5L7cz><@GuHk{b zj>7lRTlBp=%^+8(Zor&I+BFzgPz6tnm1heg2<0AHU0hPVi7=I;eG$o zRDgsmARbB>jPxHf1t$LOZpObfg%$YWI$k2Li7Cs!ECqHDli0Q2g?1%FN_-Md^B+Hz z{_P&HKsWwv5&pYC^#4CEP`k#=#H+RiLo`>PE977|Mj|t6Rr2*eWdE50S4ki};Ysk# zg~}WE+$kYy!$Od2k$;;r3XxX$_Iv1Wm29w_lqQlGvMcs-2C15mt05XlIrs&AB}6d%7((KKMC37>+IMa zey%nC=&#jSID-*>ixr;?)cMVn(9aNHugUGLrn4Wq6gM#$Lw9y}7A$C(52s6$8Tnoi z%Gc_%JJ^bfwl9fw?wdePCY>t{3?}rMny04* zP)wVdh8rIqJh0s523^38C2QlOo5rRAiS9Fh{)dHdB`=p)MwYE(&Scv@-3h+cx&-?4 z)GOLM%`VFHM#pDt1U__>IzMsRz9_zic;rXP&}Z!9o#Ue1c9tZicc*@Z9Hy8DmT{iQ zY&1D9>_|DlsKeh*^5gHy=qNRC;qEqP#CB)kC{xCHw)UHI0TENZS*HqxFw>+!+`fRu zCX1JrAi<|OE%KQuZSpL5#jA5rIP3Z|Zo zW!b>I2x9WDA+D18Piy=u4`rX@>^ zeZb}NqKkzmogPKWZV7>(UTqoF?4(jy24AkUpT}X^2QRrh+-`GwJ-33GrulL2J^xS9 zNYIPmR9WgQHV*2X7sL^oS2;I`Ri(f3^g6P!_!xib-pZI#MjBvQcV@4ga5hgB*1CEJ zF|JaLS))O752dTEaKmO}QCypr89I!b%nBI5r|hSLUdaB|$>$f>Z7;G2AMl_1Vb~^I zE5&k54MaWjeU{*IaNCou`06NBe%(s3&)VYo&P7b!c+EnDaKT|74|LqhSBt}>g{fX4 zEkuE{kwv0>*!zH*@^|sjQk0_=cs7LDcsBE0clq632MRqv`#2qIAb5iV3eMBom8ZFq z{C&&x_N<1TkqrYoH8tI_K|X6N2`6{GYidQ@?(R5P32`02;z3y8rHTT9V^m9 z$l4w!jxhV;bFd?4H7(QId0v#@ePtL`Z;)%8@3t*>jX#u8U90!n-YRU|84XzvC== zN1QT@2$OQD$RmMm$d^TSC}hRK0m{X2BS$cPV}+P~VY{a5%X=C=kAP5xUGtOnK-IOl z#{7JnMCHpi0joDwE~)y0-r1ss5UA;jP+*Y5+Mr9={L9~WA3e$Sz?7^T9dul@EHb#q z@TxD*Cwp6!nz@{_tHB1N;a_>~t3Of?&7;NRO5xY|Nz4`d^rrQ9vb?_PE*tNnAKx=I zmh~R!=&@$qqzDQ70miccC9T^#ae}Tifv=bPcXS*06@OuQv1719YEiQ>7Xj^}pn|^K|d7$UD5J_OB^PpwIU|f}L z+IPb!zHfaXc!9;gK|=n$8bOk66BE^4NU<21&l5)O_k4LgJ1#oHAq>BxS&580wddal zb|OxBVv8(4yz^FaZ>#AOtA8c-OpW63+=ByS@L2Pr?Y)(%0~nLfvqrO^rVlva_GvUP zU&C>#u+Y&@{#6om42u=PV=`_#UiaUZ{`2Ln+tksR(87=RwezvneDe@VIwG5#mQpCS z4Me5K9Ep{cO;XPbs_*4(tGd~6n2csOHKjq)dU#I>nGmDBsb`~)^U7PZ`Yi+U>-TRZ z;Yz>%tp~jHuYLX(E^J&}8yeeIL%AL2httzmAP!*y>i%?@X`M#p^(XEfV+Dy#PP?4P z?PpJ54op7hP%Yy22oYu3#>>N+oNFG&CU)JaZUsPQ#zqsOuvciNPFf0 z>5x=|_9{{*ENeW_0XKTN0~A6lu|^it2sBlw>AAlWc4IE+NuscpOk-GgtDh}LngeF=FXtu|#MY`(HIkb{Al1^QE_lZ(!dx*iy z>l=MBhXatvh?=sR%|P?zux3!rO7b{~P~sF`nnTW1ymG-mc3{8q_02(%2GAE!lvUgV5h88|EM;S{c2Z?I(rPF}-) zDf!KJ+p?a1y4F&2=@)S_+}fX>aeDD?d9<16TL3sV z1p%Y@Cx(0IxKSLl1F7katRE3HK(izeashg!=b3UtgHBhJ+d1LP!>(XB-Rh%GTLk(J zfCOnEk?((7aEWG;KeqTXN3NUj*bV6JFB_iCgwX>RC^|xaJEthG^WF21*%1K4?i?Y_ zXU9ZWKtQC5u2^pWhujDPmGwoRi}|knP+G22534#adzu3sZ7VH*=;ZIYv6nx>QKQwF z-Z`YY<}t7fObX=Cd*}Dy;}-;n*s3fGFgCwj(U*wh+6K4JbwelP_iB2mxFT4H!gbDv zPZ(6oJpbQYNWz&$m{u#&qCFpNG+&~yh16Vf72=u^P8P!gHpHXtrKBIPMo@7zg0-H3 z-|^(H8l2!8WbIL#=^U*g15Q7zpnNNUcZ00(+U(II%r}4KZ=~zJD9d4uruDmniUs*N z5{3OHQ!Jcw1*4z&&v!PE!qaTMUbN@dUE$nM#2||c`F5i;r3t7#o%g&e9TdO_3VL9_ zk3d4AGy|lzsV|%v_d~plBkoh~sL~pPmLi>y%DR$EOjn;EZG=z9E-l$J|FR}pQP!~k zLr#3=!7tXY*F<}*aZS{@6%7v$zqGO{pceJ$ht9RfFf4wF;CAlQD%O5Dl&73zQ;PTr zvgk7EO5`$e^Oy~x_%73Qyp+0m+?~Q_K3Ums*Hl8Q8CJhp$I+l)r)+IwgYtB*nl3kP z`Myk3Uy=Z`9$^PpSbU@w^U*H87#SIv1An~#mcP_jfduvdBzhLxcSOp&JOUz4Df>F78@r&H#fJ^wkXG<7y--vO&{$^5X3i}$-8pLA% z7?JSc6LJAom9x{MYr({I>7u2WI8tBu9obNqCl5HQ0$vM8RSz0vFWIXI805kl8T9x1 zNlf1?dHx`7!?A7Ecq3U}chYif)u8G=GOYsQK!l7MP zF+uWBZT*IHSLiJTCz;&mhP+|zF3PY6Pyq!^Ki)joASMx6=I8Kp?z0y0vtWW{;n$)) z_YNk?g|qK!{^U5}%Q*fZdh#m^Ok6id!vS@h_S_F>sN6Lh=BD_-7UO?8EZNc56`@0S zJa^9Ewv%Isxm5;0KYAX&O%pbDqtT4V^2DOg>u*L2UH{7}OH7lLN7OBLC0Y8YQYagD z#4>Gbw&`1b>$a;wC040)5Sd^nBv_eSx`f|;ydHFh_Qv!)(|~*VE^-*kAtK!yY(+c; zM!nm)S1UFa6C9#4F3*M^M(ir00iPdVHorJK=01{lpK97m zr}Sz*4EKs+5-~j0FYjxv3ib^%tJBtA9bp*afA_BT{AJ%6EII6m!3hZm9_jDrG7RY+@afNY7e+Z=QV|uzfHWa^jB`Yjqi>_ zxv#*WEDf()o`ITLAniK!Cmcv_oqCs9D$EgTMgNX&`pAG}Rw;R^7W0@wX~X)NW~p9E z!m2KbamIx0zI{aTaFqYqe43BJqo~=iWrN2_AE&)-!W3JWsKl&|t;~#43!*|yH4_t7 zlFWa6mOQSwmx-8pw6=$#V$UuC9j}89xoPMS5#xFaoFEPWcUPdP3IB?~=s)9RoGq|a z(6Up?Xnl+Axnl;p4R5|`@JZ*3tp$$JcJoVyHR5E*J`t!CRMVv3% z_RFCLIiG@{9=zIT>)TCIa)9Zxl*3f%m`@`y+$DqThI7d3~md?sPs9~Zv zd1S)z{Fh}7Va;hy9?W~%M-;l#smmYUKj5x8F#4EgZxw<1FeXF>;LC^HGJoUCJwojI z@-CS&;vqTmpz)B6JhA-(d%}kbHMr}KCM7FvIVWz(nXH-Y5;N)AepxUp?KpUK*w{wv z&AHO*Sr`~hGv);`H(g77q>f&q*RoCd;?{O6s=h z4xqQ1m*h6DG|i#=&fh)|hr9oEbj-@i1nwJnz08Eu#-qwS3W5PzzoXf7G270ziW9dH zg`b-yiK~Ms5_YPLs1n_p&LL%SsC5FVy(M>tSB-YRd0}!@4Uy}cAyp8 zAZG$D&W4xdiQ2Vh*l!GVia{orG)w!XJAK`~D8HnQMz^)m4r2eKmh8slV%yYyu?Z7n z{V#oqAu{f1rCy>sx;i4d_sJb#nQr>~brCg&rK9>Fm$%&yeEoVEMI!fgR;@jd03-L} z^~#|)e&QDi=d&OqwzjWiQGYoX5?k#0BL#jkW^~F#t7QW%eIMvBjjHtS#5KkVnaq8S zb~7cW`k6{o@O>k3_va~cjC_2q@gtW;*=8iY^w`Hh_q&T}gF zVJec8-!H~zH0g48Sm@NbkGALgUO}1MiVXlw#fSi)aB4!0_iuAZN1|P2{kqfAxRGrA z3&?<&WbL_W%j@E{VEydLR^x`P7LoD8=1X6Um3$QWfi}YZn^hYezR||bx`8wHJ>HB0 zu}u{F=F7U(kgzhG%Hh&uZM}hOeJ6;AuZuB%wNRhC?$;x&(lM#FAVwaICmG`cJFC_f z7H<+)JisL5$Ov4Kn8252zP3#?r__wXn07l-P)(mZFNHWRS$OZmxc!5A(~LY<3S`^C zt4eKMrjx1h6OR^$4L+-Bh7`_Gzi_{?bkC&}#rNGEVl~|~TybF(FB0@MU1Ues%OZ6s zj!nwZs`e9mvoS?xQs5=XOa%Ko3jJFooNjVIZv1UD&%yLi|Bf0GmV{RBXN_2_=mU4v zlwMTEy2+4aoEb$kc`jpp`$sL}`tqL9g{D#6p9D?a9Ry9qmSH0xl!2tXD*83@%1f16 zsx_4JppRus`MO-WXU0nPsSw_p8M>!BWqbr--5u#|2a z*+mA=!aMiZyw(;?Ge#6CkYmiFN|mD9KS-UX<;nKOE#V>?Z<-0V6Q$cCYV4GYPxo@5 z-drV91}S^}u*O8&yAFxzS3v`%<^KUlBr1V*b#=65o?jw*r0>DLvL;0IlyW=ICuHQm zkZG_ZEvYd25%f{|Tha)MJDGGp_oartR%TL&RY5HyyZFfG{)4_&J#BJ4a36Q-{YfvX zluX>%gDJm9Nz#p7-TWwtC-5ncz73c7H@)e$p)uQ$sJOLt7n^UEkR%76c`AJG=2j|M zs}}b8eNA|^;xZp)8M?X|sReZm!?MVU;IUv;#Ers@8VCGA-j@z zFr!;ASDwvS{qmo2H34m*8aZ|2(G{C}W-s%SLiQi8cC_|(aj%xtM4?93BSkhH#hI9x z=Fa!bd>c$B`U_kqpAJ|uqxuI#{0gH+Nmo)|zwT_wN(bc6(*zdVmP!T&CUX?#+8Bhenn|hA9>f&n? zG5LZr>q6se0H?x%UVXc^UTP(f^r7b(zvqq_xY{=hhrirqA}DwwYjoh-#~*baLpkyQh9ZLbcKGC}<38nt=a(ne zG(2900Eu#l40!N&cIZf(e#n5|-RUTy%tvOaF9YNCEn8S>lNdDeaqtAu0{cCX9KNFb$Dluk@tu@r=V zC{1U%MO0xtFamQq_N!}VC>Ul^O*sHp_T_VhPx3<3 zo^WnQQW_Tbe5EfNaF`gX&dp7cM+I&mhro-g6ZWga)uN_h`c&2G7y7&0@gJ>Qgmq}Tr zkbtJ#>}T6NA`cnt;=xPwLSR1={j2|gOWgIK{>}b`lKz$@WB9SJ2_}66`p|NPJ(pB8 zJ|Q7T*Qdb>Bs%jCVS2_o{`Y^o#Q6$L|QyOcMj^cm1cBlzVK z@W(Ypv=-#TmOC_ej7swhb<1*gCOfz4ax3iM^B%#RpB^(dM6xup06h7B5>#NaUrG)E ziiO6{-|GL`m_n#G9rrl6+q_E)Q8yrtlLo2GjXW93bXnex6oca|O2WeteC%3GwgRjUm@EJm$jVi;RqC z075%s=fDsB7~No);wLZ&>XSA$SYLj2;8xeRLV)yco=-_r(AU2tQsoZk>l+04w-gn) zG7+GV&H?f~*&#E8adL+^XCV{@FV~(` zJJmIU@9w{sJN+tzeh9^{w_`Om1mCSvX3qHN`pUp(yS28Su~5C?W5oa!3#y#o0OZ`* zdrA`pQd)q7^laaAfPH>UrL^5i^u2C?>6+P8^q2g?M9qwFubv3>RRI9VJM!;Zf@t$V z2me!KsWd@?7oQQ_SiDc{v{>5UvAbI#It2EL9@@Lp&DWP*fmoZ3S1LD?+8rdUA1qW! z6i_<+A~KQ*HmEl%_$0)(R9e6JUUw4!oaZ0BDqFcYd*#icddVTGw*40iuzKbwKSa=*FU zQ@-Tavv#*!1a!w|2&lsXa2VcMbg6?Caj$r?q$D@Y-q5G*S4{0+r5ryJL zn{1#^Gt34E3(~ThSUc}&-$S>_R-8DG*(AGK=fzGXWM0K1ty!?Ji#tl zOsRD9wlVVa+b{#HFO>AQ_8GO!~vb{sB1tZW5v zYL`o_n+QWA_FTCY8Nw_k%x1#5zcci;dD}NW-K?FD%$|)MK~~FI!ou5wd7Ta`t%e4L zo{lAUxE}$e62188L|?4kT+tyXmf~It%w2ie1vwH9j*e^p$tj-|H`|Bx zGXq2cuF%AB^GgW$n zvYht0A^hY9gl6$_C%|o(Uf~i>y;>DckMeXyo3YZ5oRc9Uqaw5F87J|g0DGs3Ve-Bs zME#Syn{;17P9ro#f!xm*<2_9<)*<<%C}U(~6>5)3^`K}BkDNxX^>C_|-z~E@xKDv} z>6q*dN|yd6*8o2&?+xmpJDa)bRAjPYpV4OfR)O5sXTQksqc`=gGWmOHzn`WA?XF_1 zB4w`PW3V=*gGoO~-MmF0_zMPm_r0KP|Ky+~$|J(pzC`KVDI94U?wRPbtqRno$ndG) z|4rxF-eO#}@QWm9nWdMZX^Dr|+VL(xW z)XZRFGKc2z7xiDOGnEaX#oPy?anX$6zPR!ElSQ{L52eFbEkSBm;BU-5jz!r$YSg`2 z>|I0%S-2POgyraW83I~9aIs}{$TRX%W}WrOcQGK0NsR)3N3EUZenmg~NUNlJQ4}s0 zLT??yK16Fs&JF^6Cw@^9r>N4X%|H;l$e|u_-z)8H125BJ^u5x2dg1T+wxURds@d`w zoPmD!L1B7hcLOQ807QS+znbU9K&d zflP-a69HD-d1T7#FSKtoRSA-c!%QH|djf5)-y0sQ@Q6`@)$Y6Po$!@hWkE!MISq=q z&E)^RoA8b#XQmJ?s{7>xKlBdYl@oMJQ!EH%*6iaT4$n7MiL|1G#rSDyjvbphl!N7(M%go^O?49G9a#rxm zyI_2R%XGh!mG;-FeO!-W2Nl!d1|VKhX*`8}qpDmyAF+82mA|^<_Sb z9QI-?-k47|rTE?x_~Vce&j}Uz)Fd_o1Umdv6>fk&m-~f#?-gd5dbM$XG?M%b?C|*X z45{2;U`kGsn2>V(DH|8if(5c(3Tl=wOUUzY_mc^d9DPuj{%hpg%l2=5a2q>(b z*yV8_%k5ig&otyywOLKu-b0K(sbPzax8sDGWy;sR-t+p#c*|;#tBj?(#^{Gvea>8T z$K#H1m;9ol2>pbuDqK2pX(oas&aHB<934T9KFRw8iSVj%jDCZc4yz@$dTxYoda<3_ zIZZ`hMTllcL$Q*8^plClt!DdGpF6x>;u=#LP}3Om^Vi^JPWm=Q-VRyYebtTs=+CVD zx$;bZrW9L@PHb9U=ZKy&bYaP?MR5v}{EE=yc% zXVp$c)wrJZfk@)&a)(IiNQff&0oj-DteXsT%i9^2QM`iBXP>0+tLZfR`F2XBsBzT@)>P1M zCTJO~B*q~;9tMDv&9`;Sm`~3pmpPFcDIVkkdC~jDa&AwM8v3LOR?GJ&*_lonS-H4g zX-H4)$1G|ecQ8*x>Pn;~xR;KSuY}4Qs0s}Cdy(oqOW0t7sys%vDb+M&UL*M8E`%Cn z-WXs=&O$HC^x**r^#k9Fzw4ZSJq$E!Oi&|?Zz!D9V+Tmmc)E+NFcVT8h$W0bl1D|} zP3+V7Jeb7%R0mpIys2lVqkNmduwjewK>NABomA<%q!@~p#o}aGU0H~N=Sa7~!%3cc zn>k3ys*T#gEF(pcbFd(hu+0kq1M28jTRuX0u54JJ{W?Z9H}jQkj%gQc_KkakqTjSF z9pvx7Gvjbg#KA>fz@ z!d+Oz%e5ya6b0nYKMaax?Wdv32EN5gni(Ful3?Q7B28Kp^^Y;VGNm+pBWN~(C$7S~ zHRI(u8s5p{LfLcH=3a5^ZM#p1Iog(1!nM-JHVZ1_s@xW0dz-2a*Dqqs&F2v#ZA*{f zeO;Xi9QB-o-)|Phy&|&9$U@rJbFGMxd*u$HHIqj=B-v8;ymps*oVpHIjg1`|1mMv1 zv~?DD1g7b9ZnQ(he*M6`DSYzV>M!5KyZb5?bzX5+y7%LYT2E0m!mX!zFK7jKM82M_ zpAFjOweNVX9m7s6fPzYDwJ?r%tQ{ncSP7AWyMnX0mFQ(Sw!kW6C-!F7`M!mk@O z)9J1TboFsMTG$$z9MZ;k^!+wKD!fs)FYvEtyRVAGT}*j^C(;96y|b5^i{)|`tdx#3 zVnIe7l1R{N1`kA_&7xpJN3!@c=oRLu4|a^k1~q zRrv;-d#jblPt~G3Ii`H-RjNS8e3W?lmMnRonlI#@_) zU4YEm?GT0h7Am|w8h~|f8cIyV|5IFln9BYv9D%SwAoDV`k}RNT4=@+b12PnDUQzde zxz=1yZm4&tVzCVVUlll)2V5ce+R99;@UF?@Zs@O0L0TOgqaf~Tp=gR*QLlV*JS{;V&#$n{kc;A zC-%<(3M!9_pXU?(ImSQT1|B`oT~N;FO0xa`T!ufWARlIl@`Z{UnZp04n?Fab0;oaI zpxQ9$|LNv`2fUSn^)0sV!Q0ipsjt7To&&7$e<%01_^+=1yK?_k%fC$8fA`#f4a$G5 z<$wL$Uk2f?q|ASv_ z3s1da%+y!u{$F71rc1BU)T}>F0KZEUfhbKPktk(dUEL#Cb*`pTdT~4r67q7SfZf+m z?Ew|lqN`Mvx9xCS=+7Hg_V(n+vd^C--bX|*@rWDVxXn78fejqfYY8Pz8pwLll`R)% zKAf-0>-*D{GN-I9l7=Jr24O4?O3d)EXY2(B0}oG>#TC==KL=w=95!5)lr8-?o*cKt zaP16cepGYIZE}Fp{}GoklFXd)VBaqK1Liw(J1%uo0tHynEn!4*o}P%bXMU1}Mamro z>Lbo4u35vQqw>2c7KG8gFV`kCt?caLG|$6kMn^S;ybp>ib?-ARGb&#uWt3s728vlf zGs9N*GiVBZC8MUHk^N9DoQ#+=@tag=y9D9q&|mY8gwR~Ylt)9k%1LbMd7TR#apu4J zGr7$=kHcNC00FuHv59Y~+>l7-rzP3rktVmDUKk2qRxLTXZ>XdVY}ddG`mcwE{%_2C z?*Ibd3Jcg*w6?N}k-ACT8BWS#hDmQ!1B2OKa75Ng6ciT9uUcDY8+bp0T3I_crcC)K z+OT|S_me&_Tt(Y>i^Jno^A6XCMFfa0S(=)-htYD^s@evV2TaY@Yhk<=-P)9berX@5 zpQw31?dhjgA~pZ^Jw#1SZO)7LSSlJgu^Es76qlV%2@4gc;=XjyT93`x^mrw|#<6JY ztxFUoI{+wDfdBQQi(O@171FElm4{$lMUd*droKKG%TsCiLp$9X`veAa^PSnS)P?v^ zIYL6h$>o;}nUM=^2e7=vn-ftWNMMZjz#T@!y@!ZMlq3>jYs#};aDL~wsRTY|H@RD& z8f7E3*4ZhK3YC$$rq`EyOt4h%Sg>lA@FC;zbN`=R`7v2$DjoEpos{$hICwwqwGZ*| zoLZZ#u;6fQl&Fnp@F?4Q%b+=@bNvxN94?;HUD}J^ndQGD@wpjq>wL^mr_MhuPmn_X zOLN<47>;Flz~%LI$Y5vz)J}-wqi~wtVX6Mk=E?rfQmRA8w`(_dVbcWG~sHO6}2|q<745eo;vo{l~S`d2Zu4}dh@nAClA^^xUyz&9bB;( znra^pl(}}{x-7Lve+xDbAS$UiPX1%@Ut)W4%2@BsE+6phg;iM&(nZ=P7-9^0+_>^i zw2<-INB|wU_33vm$5m=O0!MqK61=o3ev&pxV02%AGE|EGr9BA-KXX)WYL$Q~yGD z4I$z=4dHgWZoN5t!Yt}7E6hS!ZNhojap#p2*JpLa*9y#Bcs(=KkCJ6gimIrKlDK+= zFNe^L-YAvEBm)msi#~*eecdrL7;YBcoh&r;io`z7uj0xO0m1SxvDnR5C0skmYnYC; z2kaXop7A=A2cyI~P<0@@CY?Er>chT@btFo0Z8sUIcB*%d6X2GI_7jcXNkqOPE1^wK zSA66)mM5j2$A$`$PqXCD4>Uuto5TP)G7W5) zlP#97KW&=TVY=y)7lrYH8geek2{E7Qv&k7zP-a_f{kAy#+XMe9Y3$jk_&CDb8?lI z)!ECUKTY0X6W3%*cs-)#^hN$!mO8hOa1rFwZeshF4bRkrw}nF@!{EN6tQS%8A&C{6 zP{=~mMO4&^{$j4xucvkDz722>X~0ljF-+jX-& z43O{v6m_n?ocs?(6~WouwC~}1FsjkjN4jQ7^N08y5jU2Ahqe#>7 zY5}v}5LIE@UN7MZ=S3!h9I&@m0<949DRDwq>3Nv>Bu009;DP(aW@!9a!V^0X3wL6uF ze(o-7iAd9n^ojGt@sdhD{W=j(NUHmBiLg2k!~2^Gs$$3Hxf@^o@aUsIVNLrN2*F-Y z-`V2kEwRJ_EYpI)SDYN+%t+UhjhIT)QzB2}MR`yEmKzj6_CnU)*(Q~uV~{qrU1ar; z|IvMT`U|N&dz<;T$k;9(16ByywMy@?OQBLMh?U)Ab#=YLA#mJFdXvIwynUq9p73Md zq6#>KTGU4at=&8TqAe?SmRjn4Gfsw(PK+yCeg+hK9mkz+4$V5%w11%F%aORoMGp8P ze;mE-!x#YvYnzynFtPZN9JYj$RCSlL=7D)%ae!}KdQRCw7dZRij_QM@IbPUv+$ZEz_gXPkG zmx#u#iM*Od+;1vn9JMKS_%(P>Pnf5b@A^psKp)e+*`xt{@=dxk&B%1IMdrf&F1FYF znq8Q#>h{zZHT8}w^A$;m(k8zGx_!VC&k$^#Q=ADb+`gKtIDv+iR@c(2)Wwv%jKttD zBI{^p$p=&q_|JqcqiV0+AX_z?Y=y5En)BL>a;6AEN^cKk8t1vqZRVw)gs+P`enpx0 z;N(9-xevcH-r26VAAD?8t>^LWHf5#@%RQUVW)Gw6ND&^p%rd3BYL9q|;oYp%_rch8 zU*InqLdksIj@m8l$-#ep2TxKJJrC=miLJue z$GTx0Mm#^QK4px+OR3DZpt-0qT_&PY%4=CWpon*<(1UMYe* zfuqlr-^UPWe>Q7$LL1a;y04Evr1Lwq(aR4r9Fyk`-L; z7^s;1_!}<2+y1_@$~7i}%t^N$8-jQ8{0#`R0a3!Z+^#AugJOse6-(9&qOlJzg6YZ> zViN5jZz~+zxlYhRzC2{KA(~<6TOl&blN+iv1D8wHCel(2^#sty^2>=!5i}kMf?Sp7 zV$>+~HW3L;JoAB__I#ui(+(xBE-z5IagR7!ZZg#hbD<_wyvs)eGGNPm=$x6ZZa2wL zbP|v2n7Xi-Waz%j*E8a1M?V{z*U5n6YXA_(0k8DXj`C=sY6ZXgOMN!GXO!>w%A3cl zHE9yVrY};a_|}{e_JfiXkMB($xd1y%f?ftNfog9}{&-VGU?nc+42<@f`*H=bpnZIa zZgqR%>!NH;OreDf6ZpOPv>tlz&E2OHn8Jj;NfSR5+s_a^qMJk_cs2+(WF_V-vri6q{i zh`KneBowdMV%>u?NDNXe_f{b!*p#OsjRm&Q3!chM(D;SUr}SXZ$W49Qh<-kZo_DEo zC2^eCuc%N(QdzrNmbqXZSa<$S?@;PVpXBCj7-Sc4#Lnn zd6X40?NZb21gZ%|Fl^t%!P~O~cyp{O%*v>RXO(M3LoO)3`prwzxRD!nFc%N^J{`|I zlceJ0N{P)BPlVzFQT8`^&wT-G7KVFtv1a@~=K}Zmuv2dql$Q4H^TO*J8ZW}eaw;n| zf^+#EETzRgqA3)3={=+U*>!s`$GPX}So{5r5&)OGJSun{*ZWOF)qvY(tcd|r?EOM1 zU9{k|3IIAxye^ZBi20w3@O8KhuifBvwqg9zmgkY1KHTve9#+b%$4(aqxgjqm2|92X zxG-tGrq)r**O*bVhr}T=0`a{E1L9l^gS=B-1QC)qU32QNAt%Cn=_R)|mJ5yBIw}m5 z>!QrHGu5VqdQ-(TEfgPcxwz&})qNCMs3|KR!0+j6r)(Tb<05|pEi8;(_CKYf;e}}0 zH!W%+oF@{5yUUVAehNJV91jL4|HI9;BOaxJ?6Pi@i7XX)#`7+6l!&wSZTRXMVD8gG z=Hpva$Xfx2)8BR_uzAAnm8-x^jO3ZyYJ3CStLkiw=Te=BMwpRMn6iq{csDVH&!WAR zf+yh~hi3cH_PpCW?QjB{-gLW|oveG#zqX7$HzzDxL;Iip+7eVS3BAo0BjSLN-K;x) zkdoDyU`v~Wvw>?C(M0p!R__z37md!!96iNgWevYobT+AfO^vla|04c|HGU+A)DRt2 z+_F2-#z?98D&L|1c}pYRum?6^W3U7Ez>_H8Kiq#*Ryx6otYlG-xZ#qh4^Gz9)#c#GFl0kk+s8SaqozAVHwMh(QUFvb zF@5zy7$;=)YV&=Kr(+#F?qxBCYvqE6JS1YJ4t1|>Mw&e$1=3@iy$``-5i4C3{u&lU zR9$BZE0S;!j;{)U$i&9;)9wQBY=$pTfH2a!&}N}Wa5}omX7txq4e{bQ?3N&PZ=nwV z=a&|}X>0@(T+tld0POon$C4%caWK;kcTyp50#_xBIH@yoLnK>+E-Dd8GdyYjR%r_4 zaNvqK9kp=_+60?Gbg7<|KdT#yPU2i~(j$K4dmHzqWsZJJp*zi_yHb~PLCn6yAX>uH z?$gw-OR1Jg{?!${g!L-#(r?ibX|}P<6k^~(Q>O9Be(YUN(ZP|;s(Tsso;voKp{60% zA{KrwMwtIxfbFDejdh)-9=@zPID)r&d4OxH0rc#7)+U~a6yLdX{O;m5E$_3=uXf#Z zfab6O=HF-XL&7V!$yCdtV$s^?K!7LZFLzW~I*~uxyUMULQgivrKEoY0C2AMmP4h(c zGTp_0%{^~hlT-Sr5eDCJa9OT;$Ar*t6%wDPTIg-+LQ{4MQ3|+C4w2K zb_9GU`4M}A3g!p673M!bP@1eMXNZ-!Jbv8{gtdFzPGJi(-+~`}ULQ%9&&z)0P4STi zq?TydBwbqP8lzW2>Pk$fb9Xhz4CVQV0+Vy&>1bD5Xl)hpu^?BLzBeoQvDxMBh4+yU z<`L@2-ldAwre~Xqz!+7hB$NJ%7XvsMP})(Zy~3;?{e}JBrMGM3UQ84u2-*)nrqtnm z`M~X2+Wrr(HB`^w@YGxo4^`oqYp$Gt{h5URq}k3whw$sN9!Es>z`-O7uJPdT?gn0jNR;M z)bzD0uTX-pPIOI%A0 zoX_BhI9Kj32LcCji1b||V$EcVJ6f-p(s1i3*F8CWN= zbEv%7Oa-RrJK;mg=bX>y;jn98VDqe`uS6ui*4W9RaX;t4 zQW}vzeLv(%hXxZ5c<{V!B0I(He1Q{R?4+sr)#BU-Ni!Fdrq0^lR*k-{d1otUYl}Ca z{sj^k#c#l&VPAD%@2S-9oR0~LPp93(!8=m;8kD03C0+?h;8+|PGf1e`OvOWfPf>9+ zl|tFqZQnr5b#j=Gm+wOOMcfMI57sAm>Rmmw)YaoI(h}!^5McBEvKO`09gak<1OQt; zbg@txnPDXRH4dpipBCmsJhY(!CD}Iat6013vaZl9?^RKqSx;3n{znrQ>S6{h1nmJ2y= zngr|eEYMs2x3F{>2H6kMUEKAG7e`T-+RRF6Bt#ZU)Z*MC?wg5Rx;3j)3Yo?RzBJR=+I*>QcA zg6s{-?6*Jpkv>5{5bydXO{*!ynA~6jg~d{Us@x~0&b{X0Z+l}wepx8_u(?{ z0^7ob{kDU4o`d2T2Ex~k8l;!N>Bjf^@Wln=<1DaNdyhKLAbwNZ+H@9;f5%Dl$uJ4_ zbrXPiiollJiN!QCK5Ga8QpDL0jlM@<+gE^WA2dV(-vJV05ZHY;+KV{{#AO62eV0x#43G5bPr`IeT8uKjsmq7DQNq)NX>&-YIM zgH)T%EXjbkNr5-)Xh(cBsWfHtXEotL5xd^8E!rL6|dLG3YnAc7cJwGFRBb zGh6fFCUoVj$(Y77CfLGMeJXZ6r?zNp=Id8OR>Qh&^Ze{#Pvm1ADf6i#l0~k(#5cE| zVw!uiqmO@WFv*jpGVPN_SYEX@=Zv=oeyjhg4-r1@DUiD$@5`U1>PWu%Zz8BA< zt{??$0yY!9lUMf#Q;RV$LUObPLQ6}lRE_M?^VmnV((Tf58iE3CAad|0gLphumr|Wh z`@nNb!`*~%KH=JNrOP}o8K3vWlOp41*OK=^^u1bn0<*c?_$?*!Ug~M}d`Ay$s)Mn3 zyTWj@Lln3O-P?>hS42~Yqz&7vEPmH7^2Rb7eCVJ~U2f>3G~hAcu72rGV+EZh8e(RZ_be zfOyVDw4b`fl16Dmpuoio20@G-;yq>qf=(|K9{-u$8}rs ztdqU2-Iu+kZ;RvqPOfqAtNc*yJ_0{h6KL!8!iG2a?Lu@|uY@xAoN3(RPxbLZCl`kS z>APR;@c2Id-wvbCjTf6zUbl3%Y^8Cscs7{Pvh%z^6GOAxyX{XppDeTsh$W2anVg;Y zSZu4pC|P>5%e`?FuhvhMD#C@!d{VC4b0$sSCnVVPP%)d`(YCk7QYGzEOiQ~N{3Y$u zLLPLa9QZt;uGm`+SBmjyp|E-Kd^~B};?&~NC{>ci7#k~Ox4bQmY++4Iy7jB(^N8zP z4OjH`&ORYZ3Y=eYT$C-{ct<0J&g5>;5_qBtNm0F)yG!%)&M_->{KKlW| z(sE(^2#_U!PZGO2@m}cXGl=K${@3eTaR0024C4Y#8)EH~xNrR%tB3AkRlCEO(bLf% zYUlUjopqdOB|x-E16sG8WNa0}`@=LQF%Yl?;GvW8_|813aXH)t4ke-QFtGS-J83$0 zq}p5up(&}FKlJ`2EjG|rhs}m%HA}d-#AGRto|2l}faGw_RXTy<&ao89(rL2j|Lc6R z!sN9QvDmRh|En=l81>Lur7BE{`@Fcm=Ska!CxUAkIi7NxzP(Ov)Rp#i(AGG~NgGp5 zy~Wx3$hArJUh4v`^aGwAcd&h_jgG$NrvPmvX^+Gq{{lCMmoRKpWTeUO^$f=g-j=Zd z;eE&3bh*H4HZ}bU<%u%o>-SLDdiN`%w%y4%iMk(gmz0-a0MY$igc~$eZfhI=aoDAA z1z$YPBbDC+>1a<7`5k6Cr1B1uTg6RCkLxku^=X!SKk~|{@8Smdpr;r>cyb+Ld7!ua z60mqaCryPwT$h?QR<%bx2U+IXTMf)4BqQ!)+Z0mu8+3-`v;TVDXV0Aj8jeQ0#U?F> z+b#Itdx@wRTWYL&#F1YmbkX5>y^d2rM_<1w_1wKSp5?vgq#h6VhM^kdZ)QrD~16@08hECNG4sjrE*+=5TkJ zj&?1yfsR+F^@u0UiWH33nZ~`yZqc+8?)^b%>aiD_{2V8)R4M7Hv4t0R?Ar$R zn0e(F>M<*9ttE$F)ApQM18ZYYxV6Uk8=EJlcMZ@cTDkwSYIu{cVIp;YnS^nyt(Nyg zPe~NQ(ekVn5N3sngM0EhnaigInGTyA<_6809qyI8$ek>>P37`l|LZt~N${T;1r{lSr($MNO2`lgfGjvQCC$l`EY$mO2DJ^8}BXLhqa8lGw2>8XyzEYE=5 zRS^Jfk|vq+I(>RS{oh5gcSQG(F4%ftSw)U^86%33Mf~Tq=cq&%=t}$DX>q~pFYC?v z!4Sz(XNlAh`DP7@T}P}3s_c~!Sap4}C7n7IGI<>A&5>p&?IUEbO)EFwInI>HCa?Z3 zA!G|}S7fSrwnpM$y;U9&I)yRnX@e38uXmK=@~_Xxt5c$)SnrJ|MLUPi7CCUMbH-u+ zs?9`KyEk`2^H!u~tve09s|!3gT^lb`ZSkvuz`6fD<}6+R5ekl#puTbi-YUDW38TUZqwktOigi0^9#Y2FbqG+-!;-L~$_i04aiXyUPH282v=>n2Y=NRgU!m%egjD zUAtm?QQ_gbH=znH*YEqHxLqZ{4vxgq5N-L2X*D(ZQ$(lRz}b3N6;Cky@r=^&MbEstMvGa8as;J?4zRN>4NlrWYob}`b@tNVVv5) zy^CQCU#Q$4HCG%-ZvGX;b6Q-r{QN{4WUXyBDB<7}bGuRYDNDTK*~h-cYR-fD%#TmDKu4DH_U@Q8@Ttx1&SzCYSq{I(~2{^WEfk}`iX z%>?tC#+`E7kEUvVT4ooYR(vmV(CKc{xnC$E210DRzRNf`c3yEUcK5`q`Qu4rIQOL8 zzUeliE62zKjcR35oYi@)?IC{gsc5lfBjs>kH9_2IiaT~ekyjnnZUN}fxa1a_{>z5B zm2(1QCISvXgHhJX1uyQfyOa!=Ph*OF-tyOb(YSnQS%%`eYtGAXE|=jfbT2W&c!37s8#d7Q3Z*?Wb&6+Ru}{G?FW> z%oxwEu9oC0h_e&O8tVKia-wcp!;wub(WotqyXR*QOF%s+rf%n(BI{UuO1_S2DouQM zv)1(~JloW#I^EhL^3!JpPeC`H=#IeQaZvQU*XWPp`+j^YE99CrCsI?bJbmuv!FbeeW<=t`FK!Ek&Pkiw ze>~w;RhKL|W=VuYzq_t!|D7*MvTA9uv?EOmSjNvc)~47AVI$kwY#yx!7>;1VEJcm(q0iV7epaRTW4xf_L@~^MqG*HZ;(Wx3)=wu5 z)*lM4O69Bw-0mX%rG+Wa?temL7j2t?mYQm99vV6@J5gU>VG=A?58TfdqJabx29Q>g zJBLS^o`2=NymA4m{S-1eQR41ZJ1wS5;C*MO!(``gf>KfcUtp$$paaNe(*5JHZJsL6w0K6B3<32a5JK$Y0g|9g1*70V%xO}R<~Y5XO!kA z-sw=y3XGz$56eqOsr-;H-5r)Y5}8%ys{B`k!|%{%Gq-MSILFCZm9HFg&rt7ARYM@Z z>LL;}QG=qVBUL~cBU@gy00}SeR5!s1TL@kBv#>M~meJ2|T<+<~udC8cVXbOAWpbtn z++~kvn}}8i^VbdU{wZgp#ovW$;R#??OozZsc(L+Z;+pt_{dRo!bzi~s%XR^mQnveD z!>$#jWvZK;mu1rl>ul%ou4&(|A0`L$S4u^^-Ow;DLUwO?u*fQ?ELZ9#$48NTks34D&if?TlY3=`vCUUhkK+FVa1k0KI;2ZU#GLx)0=eo+;um>x5pe?0FB(ZGi4T#(uo+a@g8 z)+H@W_?{8A`{t+Q^Xm$vn0ch`%3^Q>oe->(6HL`ypy3cdTA_b6FNDeT2;FACsG|Au z4yV~+n3X-RXMo1AVsxmksF?4hjq7G(X!tp>^#10L7qOP(R?BNaHb7)yxaGF=y+?tnbHsKE1)rZ|%ox+Y)r9mPM<*Q9vqP zPmw@mi3G;Xq%iVJXg~X=g6GG%(?tacBnbG=J}=dmFBd~jz}h(6>&>vcdp&aP=4$Go zUU!@k%tr8Ik)3Fg`8}}0)SX_%e0kTH_Z4-NsTF*me0krin&Wq|4{stl5Aut>>a+Yf zfiLfp**Cv0)DL@e9`7+MRkQPmGma?}Q!^oH$oFmst%}B7+;ioE6tEH|C*i!gSjYb0 z2cE-z6(;CJWH1`d${YGkC+kIAXQC*zeS=Rs*xJ+T+QXw$E4gU2&{C{%9+N*NJ!ALy zC(xsQ9kKRM-+i){_oL5A?+>+bF9IYym;{w#?aSN4rm`;SHHI%?f})ZRk#@6nDtWGV zUvYOp_VMXy5*>n6lgk|z=G^S;3A>`w0RPn}DHGd_Moi2hO>}pJa5*|uv1G|_LH+O$ zMIkNW(}2If@kvwMk(b;v3N{oO9k6ikc9%9&oYJZZpDiG-q!q(|LXR}VqF&DvcbHD4 zvMQ-1pGpulyG6%|uZl=Aos>^Z`)>ps7A*BW{UmR+$Nrd?e?C%Qd~b}>R6m%)dy^4T zSjvH)iO0?zY~3g~4Y=3Q=9E2Bu6sM!s<~fPD|R6zdHqweu~1*4mpGx^Yhq z&7IxmbsAsiM&kT-%|1eJ=c6>Hd_w|9e>X_C`&fUe^`r$kuyJ*?QP-@fH2H2{ds1 z-WWkv=c(DCqN*yb>jOH_mM|0wL5LI~d-bOLLHmW9FJpjr6yY725U*V(BD_6-(L4Pl z6oqbq!_iad*ZzuAnJ$)K5jvt^umw^3(##6=@RUwGVP)cht*9l~6nY*nMTa0&aVa@< zSy8j%?ElU!`#UJ!3LhG6mE-y_sQ~rNe%IW6@@2$S;%V8n> zzF$JH^=sL$f33*L)3Zjepzp0NXXWO?IKK`%)Su7*a^3&S++wv}H__H> zjUTNb4)x5=f`qhe5-xZ1_|24`q@$zb&omY~T3FcYp@bGe4QIlb??nhBF#KEx5dA!a zFa5X@G%qd1A8CJhF0EOBhAXp!WvY2ej=>6?-y5Sm<^ z$JyWSzbUEq&v#Lxwr@6h#JtX?+gwF6Bk-i{f%GZ1&&@&I!}iOk zmmO8aEuN}bq0a~yL_giFAyN0zu7&<9`eeKC!qiu6T!jGw#Gtkpa{0zC;49nB=O1SX zKk1ab#JN*Thuv7?M79Z@cx0uW29%i8YzxU0<=t9z+8tFPARunDP2h<$&5+S})QBQz z5HN{qE;Er7JEKn>7#TJ4VapumUSp3&aPupDoI${Q*G48a|a->$cr8Tjc8BEU~)$WBf^V@ z;tDmp`CO-R@=(qn&yGb^>{|yK`udmEdqSNc8T8Z?6i3jQopA!$vz=98sd61Jp&)XCo%NF{R|zCxhtAFEdit8ud@(O zcSYcz>%!dZW<=}y48XtE<*yw^;aWCb)zSZ`ZESKoE_aOXUFkBdI$Q6Qa%7s*01tWd z;@cd;v$=_Tj`5_+{B}q%;jSwk4A?qy@m~s>nUs`G3`|6ZhK5{RT0=uUDd{NLj7BHQ zZD0dx#SE@KNbwi#)19IM1ilY|!z3~9k7L7)&Y5zj$)tDq{siTcsu}mHN~0CBWCUKH z0if*Hy2HFTafAPU{TuQ0;v!khw5$Lh(b zMBxg_+}Y{a#4lO#&3FwX5-&Be%=j-Exq%8C+$5F*V;pJ)md);LIep?0cPKi0 z+MW(Ux2dScja2Jl3I=O34=m!=9dcT7f7U&1uxJhFwK7fLSjLMkumnl?y&BN6+g~Qa zMP792Mh%=Q#PHTD*4|al-d+B2y?}&E#Dc z_ld7KF~F+(necZ0qjVqc29iXJFXv@`!CkpGSW=#jiF=1d(!Q>tXUm;h7W9;e)PJ5# zWAB~6Tkk&Pzx}0}EM3Wu1@{Rn}(__7|WV26%`Bm@F(TBpcyECl?pQFep?yuypkF@=LHI|vEGb$sWig6O@`EY18|bkh^Tk*cTL-sIKAV~$ese2n5PN^TjVrSJHSU~@hUj)WhM;l$`HYJ{&<%Fk0RVdv z@izgJEZ)r3BedMRq1>aGot-QCQf5#58?mgaBIwKQFW2+Z&Z_}(W^WKlDAFy#xSumz ztwSi4bq#FS9f7wK4%JP^ZsM3EFD6YY;+1n)Uv;l-r{ zi#gc{*C|vVZ3hT&!u?S^^d2?JdRpyuDqw9>`O64kR~(!(f@%>l&Z2TMZYox$6S2l%M zc+hiMR!)xSc{D-2Q$0TEtHUwLy3?vCRpWVa)?$*HM+ZX);WJ80RK}#ZXo=guPfe+1($# z$l#xh@+_Yo9Vd-1VUx14K?t2jAjvyUV3QAzht~!R@GQ*+`9J(}c4_l){<6II84k?P zaCo>9Ewj_*zb(XsrO^nLmGtOtf@RzyDQ$6yAyC;20{;gT4WZs#zbLRq7h?e5sFA)} z{foafBqZOyVhZ;kP0l{UDGU4M=I6)Xif$Luv_ip2Hl&;3bG85_%D%n1{Mbt8C7(#f z$tW0k-9VBvfE14V?tsW+@4pw*v9q$zSv|*2UmmU#&n1OOBKGQDYEgOUW-7nN%{00~ z3X4oSOjSc!mYj@0zd!gSwfPI#?Ru)ERBlF5JzJiGEWZf%>KSLqi`vTqAC_ik7i4yG zgPxz$QD-b24kK-6gdV;px)DVZlo2iLh;CWR@CC;804P=aUB_#T{mqtXZ ze|1{XXM}!5zSAt#)PBLn=&F0GtgpIJWn_w^|10h?pMWSsKD6G>4c5B4b{vcKQ~^^n zy0B?xh?R{BR0swzHIPsG57l68%mS1-B7s1Q?}4i*&O_U0=I$T1|muFWSl2M zO{SoE2D7KN+j&!LCCwOh!O0zuts0bn#vLuSP56=x6@{xK#Ho&HOX98sB-1gi#=);z zZ|fEKar{ev7cI?yiT!5+AGlQ);6E?`AwWSGDZVBu=^2+4w>9v!1w$ZEy?Ig%? zwV8AFBv4SDC}z>;+Vuu{JvO84SXH9geHjtdhq{*D=gNM6q;2h8FEX6)8kvxtZ4Fsz zKE5_QIU-$ypGME)B@hYYzuP9FB{Nt3gO-F`#tBj{``iKIG4X0Z79N zP9g?IR?3{;U!U$53a|T5hgr`&Vr8o`0g{gag7{e$h&-SFcmQ!~6$ks(AhHt{(g_9M zmN($mrwBZ394Mhw3o_W)TR2IQL{eXF8)+<1KVi{P0!N|hYAYH+j!fznMsPYblK43p z5anHTdaRM0K8)E(Au>s({Bpf3y7JA$i?xkaVRD%&;(QcYCCX4l73OZ0WYn>hsHLL1 zGSPCYED~~R*&T31*?g*&d-#6UR}P2;6UU$#iGuETLJK0+k(3iMO=Y#87=Kpqd_+l9 zWvp?|cJi`&`B_;t9rJ@&85v1S>D9&y;enU##=Fi$R}(2&Ajgd`l;9&VO)gp3vm`$s zwVC}#7KA^^Lcb(q+P~;8`Yf{r`c5sXq{w)ZZkl2mpKh zn~RtZw!+NIC~Z7SY?IE$%7&G^oq$N1`dB$1jyo*qQ^b!X5v$?=Vat~%Fn~n-6GT$O zk`}ql-XVHXP;-)tVdsh1&L~yI2ux?;ZM;$sYDrh2vilRT4 zJc-_N8#bC-)?!s6vN`>D#*O;kIWoHG+K?(zT4=kkUM~M;)+_OosQOPxxTt*Og%l$# zEqJBHNuBakayZ+x;71PiwB3#%UL?nvE0W$F;ayotsYDPF8d75Lf6yYGH9B@m=jA$( zg)c!7@C3z(14w4@{221m2u>$Itm@RMKOrI)5~B_!_r^$X10vw>UTdd{laQVr$7yj_ z8$Ei9rBMqI4uCzOeO6XYnL^k;AX@)Gzb1Z9G7*wkr}(`cZ8$(1u zVrH*=7aG=`oPA?gHAVxZ4Fx%iLi4x`>v#XD6qZBH{I^1DoR0qUXrH+G>k~`<6XuhS z6J}Q){C_5KCQ8mY&Y>Jf@ms6Zo`|E9QfWJZI(H4%j#Vr|c9e_?6i^5^W=|X+-a_J% zq*W2H&*71|Y9JI4Z;R|L(so-vNk}1n`t6A{+L_03h!7W0VMRUtc|6gX`XiCjR3TMV z+@&0w(?R7ykOKGHO-%Yqc>5p5{cpxZ4I!*-MCtc|)~ckbWb^RC8|0gj7*M7sS1%oZv?(iyRLUU^BiVO z-7_o>onjx`(|E#%RZq&ib<`b>;0=Mb-dkzJIRrZ}3R!HFE3I^UR5?E=;vW|^y4;7J z_+|Tb{_~Q{x?L9a5``g-mLO|#y&d^xUM(TNHNAe8kX}&B5kZRfc=#M4M5PmYw$}ZX zOUl8q{<=I{P->lFc4J*dRPxJG1Sbq}sssvFU6K9r5CY^6Fq%*GG@MNgqC?kg(<=X- z{|x#Tox#xZ7H0TaO~Jl;y;sFYG#h@(#%x3hN!bLjN`#?aTqdIR1bQQ?^?}FW>eQid zOj2?Cr38{+qDEmcwdA8Hk#s~!eL}*o?t{C*Dz#kS%IxJ@GtY4)nPM(V6>}fiULMY` z(nWp3?`Ox|tJT{w7V^`y#Ao+o?+x5NJwaF{7kfkVb`D%5Dt@S^jlFlR?XM3~dAxNo zD`|xaWL0Az zF=(baRG^jEU_hyLY8v`Jj{dFWw=L(UtL*#Behb0uMo-{OZT_cxl=>te)RxUQmB1lm zPzNgz^foawk#KZm%0RR^K*r8&hj66KoS_TX*>ReW8=M&-ilZSk-VVo!d+u%9e2`n2 zL~V%!9Zkqi4i6_tJIa3}%$p#$(ookWbSM~({c{~rg)k_D1hp5VWxASHaqgbRxeQ88 ztc+Zki_gg1ndqbjl|7$qqN%P(bSlWu<@K7~>2#fFMQVz(96Lf>GBdN3^?KuU!@~n~ z2NS;=QNj!$)m7P8sS;lFb;>M=7VNg*(4Sw?JJ*sGioIDTS}v#e#q~4JB}vIufl4j} zjg*Hj!jY!2)ld)KIahY0e=`~##;W)d8ymm^c5M1dzxuE~tC6Q?>QI}-o)WzaW=QPp zk7)(ZwttN}B4gO<{Pq8T&FxQUe*qbohS(VDihxGS&$NaVjSsD5S(OiTP9!9l|U zjvy^dpV<}=?e76E;{H=sC4Hnsfg`2XIEtV|K{Ep3)=(q{r1ifAW%HpS#7Q8HjBpTT zNK%Z9cW-^Aq#`4A=J5FW%8G_bEH2YX5Hx=}#1k4z)D;5boIw&Gb$C%$yq33!)(k1% z2Ul)lXUL<(=8@4o!+jsSu<`d!6kq zM5^amMi1K2FhR+_M#oTicXmm}0L$z8-yg}RtI_#b1vEMvI`r#IALau+k@I z?Xz#=QFh-N;YfcErr{Ub3oZJ2UY&PrmOqPP9i)OEIaI-{OxWq^sj_2G(6)oDZjMfy zx9G{~DWW0s-*l*TVml$akpzxpB%yhvk&Hef3kXwFX)CSOXj=s8LWTlLLIi|F!i_Fa zrT~>{cX^f71%KIPMJ4EF$$AUrIArL zV1@l^O60~#m##DRnif*>Pg(Rmj*=hsd+NZKmKCnRdHS23EebXV|8e~R;U{9gGW1kR zl98xnFTt9pbBi=e3T<7Ztx7Y+*RHPT{q*ZL2*vX}XD%@_n_|ju=Vy^YP4iKgxgC;> zqN+_24!@ghHG8v^uv4k?-F?Lu4k$j-FEc6d$PTC27>g_&`P+;L(j;F9UuC@wlG-&J z>WtO@O zd|NCA=w~Gh*qMNq%*p@T1@P1|Yqmc01E?tDP+t@IuCBhalQ1DukR*9}dKUHc=ohA} zt6F>DlYqA&qwOoGWOxa+b8(xRSZFxj#OtNy5<*1>U!M*7ix5SK5*6WF8YCsLfG7={ zi&&tz-X=G*I*z*hEsx(J4A|lPi#=pHGNikl^(B8E2BZXWhA%<_eLVChM^m1ArO)XX zTul+#q67lvnWLH!ijj=mO+f^npv2Tf$i8Sx|4DwAs1y`rosuP-D06ydT1^1>lJ?k< z{ZG?Rh!~-*-pYwQ+_%uco$uXO%+=+4RP?G+q*Y-hys$+FmN*KA1VZcJ1N-zkdAEk= zZB{#6a!P)Ogwyqf?$ln(t&;*?N2mY>5sWUe5coSL8sGe zpcrj&5s4(yYyN?vlF^q{C5IDsNt}`lUC~u7`7HwR>YcUzUTY97Q4%*HAFC0RDNa0i zOsWUgqb)!GsbS8FX={M@brlC`#R*7B4_n_a3$glR}(qTZ`|T}P!rB&i9T9D)Pq zpRMf5w-{N@;W0Io^uc8Fa4Q`)RbtdLv0~01eDQyyj7U;G!4aS@0OdbD*2Fk;J*-aM zTEEIpE;5lOFiW-H?sImNu80xdxXzpEBq`I%fd6I z!qn6}9IDSY>($_RYh@kt4@G99M3Uj52vv=aLnYO2Z9bh9!_ZHkj*SpzAC5Q?I+1yw z8t|N%O}R;3p`4R366U$NNa*#v)ZfYZUW-Q~|I?r_pBfYm%do)?_BBT?IKKXDIi(F_>^_gMaTbeEbK_( zL#^iCFXi$Yw7qY*(0YisMqUigd7YECrATCjGoUM^(+ON27{RMlco^B7Q2J_kNg~4j zgs6-nX+B2y5hL&sA^ZKToG$q==N!mK0-jIPgXhpxugl0}RyYKE->CvWSqX<;^cWg$ zY;6L4FN}4#xV;6H9;TbF@_+rT+E0aIc*S}O)HDM~8Zr=d!ar}D9T!qIvN6OGos**t z3bz@-vnSU`oUL{pJRV1aF^yO1n1vb-C`75hc%8edC974IM)kWd;Wf6u2hN6T8MRJ= zsS%tCu&59bc}Y-_5@Llb^3$GgWInToI5UZTSQwhXbD3?uYE|qZ+4+B;Nm;DzNf0s; z-E`x&kw6=wcdH!^&mD$8OFmge%dj{XiNu>-eI%~pLRdX!x7H%1M23Ut`pZFitNaY?XD44BW`$=u|()KGoFEcwTRZkNJ+lC+s;> z{~u(Ce?rEvW(IlQ>`u~N*(~n0`>5JVrfxTh^#?{OFYm0op0Adl*re;?*iq3-lX-5a zh1q}7xRn$znmR~nTxb5{Vc}wb_sWuH6}G;}7XAG$xEm9WD5cF-nFKxiGEEroO$h_sJ>A?9Cj$5 zXTf^-2xk(LbwHv}&w^KVsYOCr8~qX^r6J9#2&2pniXf)hPII5CA7u`H7o<)~B1Gxh zK)5i@`(=GOY!r_DK`YN=$rlv~u(adKzAw>LFf&NoN(y zv5%5_I6jm)H}q(Qkqd8_8UAk<4i^EaYPetO*Zxad5eksQ$?OmTH(+1=Kf#D^@f0CX zZP&NkZ;p@o8wBi&g4$3fV0QIC@lKgeLW4u1x+R53Trugy|+4?VXr=4ll@WjF9 zzRaG@&d!oT45)a2smK?ciV%Tr3R;d;dLrCb)=LaK z%GZeo&s4ZQCi@7FXcr0~LnBSoh;yEdd3Pjj|K?g5mhREd93f{a`_G`X(74~0y_G>@9nzv;N=yJ{lkxHqh`oEdK-D zdV!zS)o>zX)3C-+1O*m1?W)%!LENTO_p+_Szp^ZkkIuwa*C-?itAp8!rB|Hp8c{@u zNQKX^{)Aa?b;@C7uI}}vV2SK}FTgwc-dN1=$T83^Nh6vR{yT57nh$~VC~FUKQnfWp z2JWQ6A{iEbIt>j;lcNNqS?#L&B{;3(B7w`P@!OE-tbnzRrZ!d96(K7#)UF_;tDEbC zB+Bep<%I6E$SX!G$&l6*nF4yee5VFKlN5XTQCb(A!a-Kqkbc$seA*fK^OU{A5j_z) z-3rUpf87zy@K6HKdBQl@3h)7OR{v7_JhtR7)Dlcwj={|LN0% ze>%2A*VWR^qvmRY6!fg>`XEkry!@;kfuPrhYpPH9>YE9x0ryXgR-fq%IHsVV#~oC_ zb?v|74k_+W-JEdL=DpA49Pf>2b3!#ZMiwu{|MFC7G8G$xvENwzxHvyc=Xclg@ddZo z({elUK>~GrbS!@2lzQ*CuJ&F6Xor352$lsCZ@XVwc83P(oh+@CNWvu)1mzj;FX}G`b^oF@)``bR+B<#!^r`i)fm0ekHyE+MwCWg+MAh*>LmztmR6~K7TJ3Z{h zQ(K|i*P=Eb&jmeBjaEt5y<};f+Z}mI{oad4om9VI1~*dYWSaBy*f}%QPf~^VdAND} zEy(^0X80GdK#kv3U4^mNXcADZiQ11PGd>)S5^yS#ygCM?nY;>$5Gj;fgM$EbEdQp-zXI42W!3?8x zH@m`bATU5RI5i|V)k>GJY37sZ1ha!gO$i0F<00I+~qMeVCM^AT&;kEhCrm$|g6 zzhBP7?+dwgeUBBE`0oSj%pkx@psa)hhpBUQDPh24OU`I^`1IJ62oY>A3T=<5a=5+J zh&7XgzcN5c1XNJaCWhfJ6F#+RX3{M%GZ66m-r;&&ENfOCuu;yFLI++FC_BPCISS!VLS`5V~dg?ouY2FpSATw2{tvnhal3A>B6G^Au(n- zkjO5U7?P0@P6Gqh`FnZt(>_A|w2xfO_=ajQ_B_nN68B+#+>cLHd134XNAZVvcin@9 z?KOomU-uOgGcm-HihL^nULWFK`s=)x^}{_kzX!L^(bNYUyEaT9kqvk`{nWdP$b{w;qCtuC*+9>q1<4zP?7KIt5#h6vkOKiVSD4uAUTGuQNauukfhVKvq*uT()+zmGPZesYIl3*`u^M8il%HaC6<0wJIC(o zqigrK)n}(8ofzca?-(Zlcq6R0-yW&y$ouQvHS;OFl%>>UV(UCEPI40N!ZrK?{>W4H zGwIcDE>^HqY7kUZ)V?X>INp+h*`61-k4Z=}nP#99a_V=*M)#?u)WQ1BeMDgMy1Tm( zMupcC6Or>X8l{ksc2LE{E(ZLUHMR8!yaw9X;38`dOB%|(`S#A8z{|T+D zT=~*L-$TrQvtC&5V+<}*)<6PxM@B}LB3tn2(nubf195$l(4}pHD?!1vt+a9J+NTd& zy&Yx6hB@f8c^??&F0F5d@*Wz;vk=PBt?f1UH>y#7T3-<>wrDZi=RCQ2x>2=DXrT(T~il(My!8IjO0kPfku}SS$ZEnh`%!&_T`iI-)|6N4r@%muihrJB{Mp z1_}Oo_gwX}v9>3o-2`US)RJX3DhC_zB;17exPfd|wSh=zDeeYoU z?6m+hcC;Ydw|qt?szyQuQS)E71%!w=2?g0IDZd#a!gmMzi4>;g^0Xp9>^P^?r{3F| z($x!Ed!N*OD?->)ge|b#bib%P0a4YfP66#;8;g}iO^iFra@ij&9~Y_I*)=Am4A2sK zs&B58$n`WyGbt|RP=a_^AudcPNao$)Tn9ni8H@hg*rFBSH;`jD&tVQST|=LmIA4gd+2L7d`PCJZSk; zF5kfVj(tRgh!`m)4OKzDWr-a9tAs#A!9SdxOMgPeM<+fmt7NBD|B)qN>rB1UXuNCn zbT;=wO3Nt;5hhMT$tc);_r`95LA0@OM~iU(FDa%XYJcmaqQ(Hc-U5nXUzRvkz?xwq zR(g|}i7GQE=;~6E;Dr9k1nCJ$T_SE8^sKEF^Ofi~a|hk2rH_ba8zfnCTixXFiqo;( z3FO32bXy+&PBFLLt+!Rs8Ze&`l$EHIo$mYB*4M$UcahbO7Zd2?unh#B54?iDOfByH zrS4Z8qO@8ioDEX877TjE6G4&{goBV7sk*wl#Kc4*hdMbh9qhILhCh%3G*#R*o?D1= zc7oW*31z$Mw`*TV^Yv48Js=NtO_UA=%fjLI6>nXh_VUMQw=cR?&xN#Zq-xC6;#Y~%=X>;PJx5nNOC zSM6uC$QzL?VpgccLpYfDaNUV^y|tD$S(#*nhA16@CPLO`w?hh!uYE^k0DF_Gq_`VD zQSwevBZYY6O#>-lkUKKXHrir22PR5TB?w+AEfvH|AKWI4?EPJ1#J!BX86-~X6}jpf z+G*x7(ye*tT`mNt#i&Tls1{yIX(U8z^!xUqLu`G~kM}YzBc1TJ#y&z0f005IUgp&M z>IN!V(!y7ne9`HQ;;F8>iL- }+BcMCsyc}Y=_Wt0Gs23G*@fWZ7WWW5RW6T;{} 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%0D0vL6sg@L|FCZyxTy`p&r(5wdXV3$anQvhA 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 z Date: Thu, 19 Dec 2019 15:59:50 +0800 Subject: [PATCH 2/4] add some docs for kubesphere code layout Signed-off-by: runzexia --- docs/en/guides/Kubesphere-code-layout.md | 167 +++++++++++++++++++++++ docs/en/guides/README.md | 7 +- 2 files changed, 172 insertions(+), 2 deletions(-) create mode 100644 docs/en/guides/Kubesphere-code-layout.md diff --git a/docs/en/guides/Kubesphere-code-layout.md b/docs/en/guides/Kubesphere-code-layout.md new file mode 100644 index 000000000..661ab1366 --- /dev/null +++ b/docs/en/guides/Kubesphere-code-layout.md @@ -0,0 +1,167 @@ +# KubeSphere File Tree + +This document describes the directory structure of the KubeSphere repository. + + +``` +├── api // Automatically generated API documentation +│   ├── api-rules +│   ├── ks-openapi-spec // REST API documentation provided by kubesphere apiserver +│   └── openapi-spec // REST API documentation provided by kubesphere apiserver +├── build // Dockerfile +│   ├── hypersphere +│   ├── ks-apigateway +│   ├── ks-apiserver +│   ├── ks-controller-manager +│   ├── ks-iam +│   └── ks-network +├── cmd // Main applications for KubeSphere. +│   ├── controller-manager // Kubesphere Controller Manger, used to reconcile KubeSphere CCRD +│   │   └── app +│   ├── hypersphere +│   ├── ks-apigateway // KubeSphere API gateway +│   │   └── app +│   ├── ks-apiserver // KubeSphere REST API server +│   │   └── app +│   ├── ks-iam // KubeSphere iam service +│   │   └── app +│   └── ks-network +├── config // CRD config files +│   ├── crds // CRD yaml files +│   ├── default // kustomization yaml files +│   ├── manager // controller manager yaml files +│   ├── rbac // rbac yaml files +│   ├── samples // CRD sample +│   └── webhook // webhppk yaml files +├── docs +│   ├── en +│   │   ├── concepts-and-designs +│   │   └── guides +│   └── images +├── hack // Script files to help people develop +│   └── lib +├── pkg // Library code. +│   ├── api // Structure definitions for REST APIs +│   │   ├── devops +│   │   ├── logging +│   │   └── monitoring +│   ├── apigateway +│   │   └── caddy-plugin +│   ├── apis // Structure definitions for CRDs +│   │   ├── devops +│   │   ├── network +│   │   ├── servicemesh +│   │   └── tenant +│   ├── apiserver // REST API parameter processing +│   │   ├── components +│   │   ├── devops +│   │   ├── git +│   │   ├── iam +│   │   ├── logging +│   │   ├── monitoring +│   │   ├── openpitrix +│   │   ├── operations +│   │   ├── quotas +│   │   ├── registries +│   │   ├── resources +│   │   ├── revisions +│   │   ├── routers +│   │   ├── runtime +│   │   ├── servicemesh +│   │   ├── tenant +│   │   ├── terminal +│   │   ├── workloadstatuses +│   │   └── workspaces +│   ├── client //aAutomatically generated CRD client +│   │   ├── clientset +│   │   ├── informers +│   │   └── listers +│   ├── constants // common constants +│   ├── controller // controller manger's reconciliation logic +│   │   ├── application +│   │   ├── clusterrolebinding +│   │   ├── destinationrule +│   │   ├── job +│   │   ├── namespace +│   │   ├── network +│   │   ├── s2ibinary +│   │   ├── s2irun +│   │   ├── storage +│   │   ├── virtualservice +│   │   └── workspace +│   ├── db // Database ORM Framework +│   │   ├── ddl +│   │   ├── schema +│   │   └── scripts +│   ├── gojenkins // Jenkins Go Client +│   │   ├── _tests +│   │   └── utils +│   ├── informers +│   ├── kapis // REST API registration +│   │   ├── devops +│   │   ├── iam +│   │   ├── logging +│   │   ├── monitoring +│   │   ├── openpitrix +│   │   ├── operations +│   │   ├── resources +│   │   ├── servicemesh +│   │   ├── tenant +│   │   └── terminal +│   ├── models // Data processing part of REST API +│   │   ├── components +│   │   ├── devops +│   │   ├── git +│   │   ├── iam +│   │   ├── kubeconfig +│   │   ├── kubectl +│   │   ├── log +│   │   ├── metrics +│   │   ├── nodes +│   │   ├── openpitrix +│   │   ├── quotas +│   │   ├── registries +│   │   ├── resources +│   │   ├── revisions +│   │   ├── routers +│   │   ├── servicemesh +│   │   ├── status +│   │   ├── storage +│   │   ├── tenant +│   │   ├── terminal +│   │   ├── workloads +│   │   └── workspaces +│   ├── server // Data processing part of REST API +│   │   ├── config +│   │   ├── errors +│   │   ├── filter +│   │   ├── options +│   │   └── params +│   ├── simple // common clients +│   │   └── client +│   ├── test +│   ├── utils // common utils +│   │   ├── hashutil +│   │   ├── idutils +│   │   ├── iputil +│   │   ├── jsonutil +│   │   ├── jwtutil +│   │   ├── k8sutil +│   │   ├── net +│   │   ├── readerutils +│   │   ├── reflectutils +│   │   ├── signals +│   │   ├── sliceutil +│   │   ├── stringutils +│   │   └── term +│   ├── version +│   └── webhook +├── test // e2e test code +│   ├── e2e +├── tools // tools to genereate API docs +│   ├── cmd +│   │   ├── crd-doc-gen // gen CRD API docs +│   │   └── doc-gen // gen REST API docs +│   └── lib + +``` diff --git a/docs/en/guides/README.md b/docs/en/guides/README.md index 95ea1e3df..ab4a5e832 100644 --- a/docs/en/guides/README.md +++ b/docs/en/guides/README.md @@ -28,11 +28,14 @@ Compiling Guide teaches developer how to build the project in local and set up t 2. Understand the workflow of kubesphere development. Read [Development Workflow](Development-workflow.md). -3. Understand the best practices for submitting PR and our code of conduct +3. Learn KubeSphere code layout + +Read [KubeSphere Code Layout](Kubesphere-code-layout.md). + +4. Understand the best practices for submitting PR and our code of conduct Read [best practices for submitting PR](pull-requests.md). Read [code of conduct](code-of-conduct.md). -### KubeSphere Core developer ### KubeSphere Installer developer From 5812b8884811958b2b5e787fe1936fe00e917443 Mon Sep 17 00:00:00 2001 From: pengfei Date: Mon, 23 Dec 2019 11:40:30 +0800 Subject: [PATCH 3/4] refine devops-pipeline-overview.md --- .../devops-pipeline-overview.md | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/docs/en/concepts-and-designs/devops-pipeline-overview.md b/docs/en/concepts-and-designs/devops-pipeline-overview.md index 1be0eeed2..ab332df8f 100644 --- a/docs/en/concepts-and-designs/devops-pipeline-overview.md +++ b/docs/en/concepts-and-designs/devops-pipeline-overview.md @@ -1,22 +1,27 @@ -# DevOps Pipeline Overview +# KubeSphere DevOps Pipeline Overview -KubeSphere Pipeline DevOps aims to complex CI / CD requirements on Kubernetes. +KubeSphere DevOps Pipeline is aimed to meet the complex CI/CD requirements on Kubernetes. -With the KubeSphere DevOps Pipeline, you can complete the construction of the CI / CD process by interacting with the KubeSphere console. +With the KubeSphere DevOps Pipeline, you can quickly construct a complete CI/CD workflow and architecture by manipulating with the KubeSphere console. ## DevOps Pipeline Capabilities -* Multi-tenant isolation -* Build, Deploy, Launch things in kubernetes -* Use kubernetes dynamic agent to release the ability of kubernetes to dynamically expand +* Build, Deploy, Launch services in Kubernetes +* Use Kubernetes dynamic agent to release the ability of Kubernetes to dynamically expand * In SCM Pipeline and Out of SCM Pipeline -* Easy-to-use pipeline graphical editing +* Easy-to-use graphical pipeline editing panel +* Multi-tenant isolation ### DevOps Pipeline API -The KubeSphere DevOps Pipeline API will encapsulate the following APIs (Jenkins Core API / Jenkins BlueOcean API / Sonarqube API / Other Plugins API) to provide a standardized REST API. +The KubeSphere DevOps Pipeline API will encapsulate the following APIs to provide a standardized REST API: + +- Jenkins Core API +- Jenkins BlueOcean API +- Sonarqube API +- Other Plugins API KubeSphere apiserver will provide multi-tenant API, pipeline API, credential API, code quality analysis API, etc. @@ -27,7 +32,7 @@ KubeSphere apiserver will provide multi-tenant API, pipeline API, credential API In the current version (v2.1.0), multi-tenancy in the DevOps part is done with the ability of the [role-strategy-plugin](https://github.com/jenkinsci/role-strategy-plugin) plugin. KubeSphere will automatically synchronize permission rules in this plugin. -In the future, kubesphere devops will authentication based on [OPA](https://www.openpolicyagent.org/). +In the future, KubeSphere DevOps will authentication based on [OPA](https://www.openpolicyagent.org/). ### Integration with Jenkins @@ -39,7 +44,7 @@ To meet the needs of users in private cloud environments, KubeSphere uses the bu #### Jenkins configuration -KubeSphere uses Docker Image + Jenkins update Center + Helm Chart to distribute Jenkins。 +KubeSphere uses Docker Image, Jenkins update Center and Helm Chart to distribute Jenkins。 The list of plugins and configuration required by Jenkins will be provided by [Helm Chart](https://github.com/kubesphere/ks-installer/tree/master/roles/ks-devops/jenkins). @@ -48,9 +53,9 @@ We use [Groovy Script](https://wiki.jenkins.io/display/JENKINS/Groovy+Hook+Scrip ### Pipeline Builder Image And Jenkins PodTemplate -Jenkins does not include any agent configuration by default, KubeSphere will provide some default agents (including docker image and podTemplate configuration). +Jenkins does not include any agent configuration by default, KubeSphere provides some default agents (including docker image and podTemplate configuration). -The default agent image will be built based on the [builder base](https://github.com/kubesphere/builder-base), you can search `builder xxx` repositories in kubesphere github. +The default agent image will be built based on the [builder base](https://github.com/kubesphere/builder-base), you can search the keyword of repository `builder xxx` in KubeSphere [github](https://github.com/kubesphere/). ### In SCM Pipeline and Out of SCM Pipeline @@ -58,7 +63,7 @@ KubeSphere's pipeline syntax will be fully compatible with Jenkins' pipeline syn We will provide a plug-in SCM API, allowing users to graphically edit Jenkinsfile, Dockerfile and other configurations in SCM on KubeSphere. -### Sonarqube integration +### Sonarqube Integration KubeSphere will retrieve Jenkins pipelines that have performed Sonarqube code analysis. And provide API to access analysis report. From af028b8d92450205fd7dbeaf4f22a800fe92f211 Mon Sep 17 00:00:00 2001 From: runzexia Date: Mon, 23 Dec 2019 16:36:52 +0800 Subject: [PATCH 4/4] Update Kubesphere-code-layout.md --- docs/en/guides/Kubesphere-code-layout.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/en/guides/Kubesphere-code-layout.md b/docs/en/guides/Kubesphere-code-layout.md index 661ab1366..46b075d2a 100644 --- a/docs/en/guides/Kubesphere-code-layout.md +++ b/docs/en/guides/Kubesphere-code-layout.md @@ -72,7 +72,7 @@ This document describes the directory structure of the KubeSphere repository. │   │   ├── terminal │   │   ├── workloadstatuses │   │   └── workspaces -│   ├── client //aAutomatically generated CRD client +│   ├── client //Automatically generated CRD client │   │   ├── clientset │   │   ├── informers │   │   └── listers