From bfadcdc8fd76741a36bfe98095e8205923b6a32a Mon Sep 17 00:00:00 2001 From: Bartlomiej Gmerek <42570669+Gmerold@users.noreply.github.com> Date: Wed, 28 Feb 2024 09:36:21 +0100 Subject: [PATCH 1/4] feat: Replacing Juju bundle with Terraform module in Getting Started tutorial (#188) Co-authored-by: Mark Beierl --- docs/.wordlist.txt | 1 + docs/images/nms_network_slice.png | Bin 54290 -> 39054 bytes docs/tutorials/getting_started.md | 252 +++++++++++++----- examples/terraform/getting_started/main.tf | 62 +++++ .../terraform/getting_started/terraform.tf | 11 + 5 files changed, 264 insertions(+), 62 deletions(-) create mode 100644 examples/terraform/getting_started/main.tf create mode 100644 examples/terraform/getting_started/terraform.tf diff --git a/docs/.wordlist.txt b/docs/.wordlist.txt index 43b7065..5906baf 100644 --- a/docs/.wordlist.txt +++ b/docs/.wordlist.txt @@ -106,6 +106,7 @@ subnet subnets systemd TCP +Terraform TLS Traefik UDM diff --git a/docs/images/nms_network_slice.png b/docs/images/nms_network_slice.png index 016e5647eb33870d62bdcda63c4495e6e6254864..f400a8845cc0fada046d5a1c47790065d42c6d4e 100644 GIT binary patch literal 39054 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 )Fv1D=QK< zI%*N;{V5F)xDGhp+rr+SJ-&k_-bIk5{O}PbaioEe+odXPk~uXIzH^~0PM>QS+YAea zoGOV~Dbd`$?(boqITIaO>)VFyr;AcFWc4~q5reFk1Y1tZFDKF9%8>DPs!2f&=uW5Z z-3|yW#%FU2Oi!ZyjfbW4ksw|yo9HuT1S`!Ta{d_o`P^yx@(axZpzurTEh(Ki*=gsiUm2YM3|$Jb%rkTin!Db8s2{*3M!2W0&up_^i^$)${FCCw z%0i6^7^iOSYsKhk0rtA$p&!29w$0hOw6TrJf{k&Wn8G zK~0ydD{=42T5+eT-v^t6nWAa{ajXy(cT5As#?D%{tFE;jioeN3%g%aNvKYclz_b)%FCz%sg9J&lDYakz-@ MqQ9;F=Ep040jFj3E&u=k literal 54290 zcmdqJbx<5#w>OFe2u^?m3oZk}-6goY1`8fMxDFCLxCEEr8VC?vCb&y*Cj=cF2A^TL zllPqG`Of#>t-4aTF4a{`_w4T8d)Z#=x7L~%O?3raEOIO)BqUrVMOkemBn$#1BoxSV zbi@_zsFZ!gzh@rOO1jSxe}T`fqY>w1o^pnsI9T zJaPjaWK8tYki0}*3XsTuJ zG}j{`(I6?wzSZ^3Jzfv?Oxw+Sda`3o>5+czaKM!5LiU!==$O3UnXq*D$9v2oYSecA z$|iy)xukc6&C2~>(A(b_R@2my|9HUktPa;>Xg=pB4rTzqBJ;5!lCwXbowHU+vzN-9 zeh&(MrX9pU8~R?VAkjl?psfztzIi)7Axvow>8_oM>$qGEmP=t!`tKto)xRC-pA!b9 zA$(NX|8@55k9HIu7)<`}Xa-7v1h418^tL5_{}+-Q_)?wU{aAV+Wdm;}th4)wo`f*`) ziI6r{r;n0Ue>ffw>>?x$>@k#&SF}0@qbf#YWM?leXsS5tg^!Xf>NIsZGBV*&44m)C zSDD3WuFj35`j;kAsayT5W!LR)D2-nsQi6_t)V}%Q13M?29Hz12nscc*KF>#de(xj{ z_JdcOG>HH|Ap66b{#g3q^DjrNl@15TYX6H5qNFt5H1KhyaU;Hn9!lJ*;OwKJNn2o) zumK9#;4vwuHb-g@d~t%mI;%Lp!Z_aL#gc5ASCzDtN^<^_@nWtvb3k&lIWlrGH=XNq zPLM!U+=^v4w*^OXn4{z_oy$AEL@l=_V)KlNHG_82KLh2w*YE<~-Enk%HGE!2XNrA5 z3GZ%#pDN|zTd9unWOm0hs|EG}-7NZlB>>2VLm)~R4WOz3o^qtan)4(&O^xpg5_-Rd zdzP`8^sAXGF?3g^kG`xnyngxy&~A!Ykv~`rMlvVOm4D}tUOX7bXmyU1-Tpd#AeF}r zITn6PUVCp8UOc&ijzdF>ckrdRgiMFI)}%LGJWmpMt|yr6!z3k%&M?^5^YWT}JWUQC z(#HvyzJgw}0gE#AIOUfvhvc)>m1uV3_+}L1EazHP$h@#%Bj=j`Ex{#LhrQJ0H=dY> zOq`o$z&Q^Dfp^lL5r$MP=I?^dy{lTzq%Q2gy*0A(;%;>9j@1K6a^X6z%q#X$w-ETb zy&RCtQL)q(!!><=^zI}E@FiIqK*TWE6%xxFT!wjO|w*w{xq8X!)8A9vxiYH~t4uX0OhZj&q#oy8C znqU6WzL{j<%5rQWZ2$nz`e&&Q*+;N0x;o3wPJbvvu3%)Ey`;@~;!{`}#VO-f!64&gP52u5$?4DVFrK0-ex+%Jxv6r51X~J z1IAd1_h1Mz15%UYqULW_q*&^3*fmNFiJ%9!E0g;}IP_!;`g_xu+ncDMlK z=o&-+_rAW-Oym^Kl4<`;_CYA`Bl4e-7*sN$(j?xq2YytJj!@)`^`D4K_a7G3)u9h9 zN~Cc9KNxr}m_#5C!SY=GKhbsbb>=7+$G@X5`(^=dv-9@-f_n8=3OsrbkIx1s2#iwE^_pB5on~Y{={4U{X7Aafoe;v z;K>AKT6Vjcy~h85r7D|{l;3aEqJv0pMqU>&0W9wNI*N7t22xVwSIh3 zRb@+(o0oAK^d~r9!NJi^cbT{6tBnz*E#o$7Koqh~X3j$OL%FWKrfgmv*mancAnDndf;>Q zzx&dmJU}+Y_Yf_kDKg@WgI$P5XwA;&QJ-92QW;V}@eckNylJu8i2v*Ea0OL_MD&{h z7ODg_{sr0E)mdrh`Dif2cITz?(3IENLkNksUb$W~(8pFHQ#CRi#hwx$$FCcu*-fimuR^F#JDofq`4O0Ig*a9|hX2;{ zB_L_Vp{jVu@(=TT&SBy}|KEj{5DmLg(%d{8SN0c3gddDC&T&F9_3rn7kWrmNHnIUr z?h1HkYpGMz)b}q|^Nq$yT#b~^KaB|qyS-oJ=(eNyk~nVbvSqq<-N?vh+Wq-@K6r0# zu6}2|Gvte-KF`@G-^%fsisA=9pn=X9Prmq9w-eKGv*w69-g2%pjAD_^twq+*@Toym zHNIv6Pl4};7kYE2O4hwC0JrnW2o_DjWf zCw6Dgtmezm|4h9eNDICf=1lu?`SC3knUZO@4MI1)tWP{A4;G`Q*=@v4N8VN$k)CQi z?Zgmg8GEU-^>(sG@`{Nkrnms7iqcFZbGNdD#{*98aIzWysx@`uwuqGK_@v$W+83OM zttq8$e>`B6>Bl9Ho8zTP3|AO{dcg_h>#aR|&M|K5RV0U5SMqROe%akfDI4%y;`AZI z$fO`=0*%DhV|!}hJ0nNDl4MXgMy-QYK@YIdf^!9rbd^}+VcsJX!YRnT6~~djqW<{h zcG3oHtX86$+m~Ah@V@LsW(a)s!J)(rG;fd-)R9(7ksVE)Jd_5x>8QTLDci9n00G5S zGFU0Q63j2Ad87W%oi)|T1)IHdbn!pOX?UkAYhS?~h^VUzmo2%h&X zwdJ+viJQt&WLr6HzA7zlt+Ksu!qHG?IvJ&_lDszk%uRQ@qhm-$&&N^lu?2q4p?FvI zT6*Fov6+ElKaSR4!I5Z6SVgLTI&eL2s{=M(Z)%XabNn^UQlrxx6ODCN7map#o8l4t zE*2AEf|v2&0VjK9>$zJO%b6aQ#RPfsLYw=^R)M__I%4+4kl_vo6!3`YX3KZAjyG** z38lLH0})ZERy_9iBQDnq|(nX+$=gTJPiQ=7}l)DbhOQmwB1%JfyDBIwng`s~&x9Vb0BbT8f#UP5BsvY1&LfG(@N1Qq~2Kzcw8%s;ul6V6$G)s7`D*`71dyG2m8Q0%*PmZ9$CaeaIqW17P&O zKKcOZk$EiLN<=a>@4ez8H*ZU1JR&cAVrGgHX8u#P+1rdC0uLiwYjW=}ovl{MG}e{V znR#~FTFPr-f^tzlJrnACZgP}y87#=3eEx-HClB+AeEelwvEq`R(nZ5_HH?HZdj+dbQn`*YIL<4~}P zs13PXvX$0)kb!@9$VHZY9BAnGb}D^L4Y$#=Z5qV3v_&g!s-aO;{z0AgWj%xYK1s?t z`09Ip3PtzmovW$JTcrt$LG^#JZO3U$|B|9A#8-Qg-2Jz9shXbbhQlYbFr_E=avy3j`Rr&hz8uD!Y{kyw zsKDTHi$ide&s48zeAMY?s~xt6czyoh9Ul|Wkrs(VM*;-ulB9n^tbS;2b!-^a8S;7CjYai6l)@%WPhV$$CbobXEa@BC z?z~zFHKol02DE4A69xDoV;jg}#^uUwz06a^&v9gKqs{3Yau6|Lx z*)b*(od4HT0TXQ_xbEY`R(wB&i_zH(0ht%IU376wcwE{CABlrj5 zG+{qlH25WpLYAR=aL*`|Q)TEsq+R7*$_2&{O#Y=6+3LDHkDrYPmU{N#PLI2KBQ&i} z!=}fFDQQM`U{<3>vI6??%*JOR5_4I` zD(>gbX_%+WDqNV#-m^Ga`NP zc^i(j)v2Y#&i9>H@i3>GYkaduPm(_N5WBQ~E$<*Gw4Wv1lQ5H;B>`OYRb#Yl{#xWL z+%?o8suy>D?OIjhD;HiC?kNux4jm+k^*j6~P^W06Lqwnv2%?XB@;`ap++*^lUdBmb zsLWwB<<7~XN12oSqOqYt=gp)>xJVNAHk#`t0U%0l+*p>L2}8nB}?t&#nhkCFt^= zeZ9FgUOE1VaF4`kNXyPE<#tN?D>4g)YW9o8O_Q%GH6L}klMO@0*TiPFSExx$`SX5g zl5e{j%d2VQMNGMrzYJnHU_7c6Nh0go;Sn zB3J~WWrKr#k^UVyH)zoT9puQ}zAQSfkF;PnK`rPz#xE3A75?Sv&eVJ_s0)6EytOX@ z`Vm`Asn7;#pdOv&Po$`sb}AvLG>)b~qAeyVy}-^mo-LNRflDzbXKtnl_d-kS z{M8`jfUv;?B=isNWTj&yjUR(Dv+zlDgle~G%58VW%Ichs6hqD*EgGUCp39CI`Syu9 z$g|Oya5rv??>4_e#JomnXb>f;TjpiTb;lDdtl9$g_kqg~;jjle@E}uLeVpjxN(-FC{6t;IUO}EngfceCk1xWo0%tmj0!I&C=ZfOaXcjazmLZJi zvq)JGLG2*NA==-x4r9y#?C3JR;rJvA1>*599m~9&;ocF?6V)R!s*SpuBbWO`njrsy z7bzF^BLfpfnF2E)4=DBT1YDui%|Wd>8$fly)olis(=a2>5fF0|XrrQ$f%S8`Cdx>} z9ck(jx_GxZQIL>czAYgIQ|asA6Kf2g+L)P96Z${1&@tHwrz0GRBTVFUKlwBJ*b&Hq&d7_ZsvFCw!|rApLvUI!Aj~cJuec8&`sR zJt`dtfLp+dI8|GrN!%0qiVpNnW_Q8r{+z$T_99F-Azwz`I7-7F6Y6~|@<5*L-4q^& zS$@12Y6yyi2JwV+KJlh&?I+mG_*t!rq((04*IQoz+5GBnDvpv6?u~TF+!;w@D_ve^ zIo3!AW9lWeFA6+XcSL3LOV2ri5_nLMy>>ZdVbPGXr`1)N`#CZzeB~baQmUpXH=g^e1^uq8)J+>@ z+@tB(lBO+FRKM(XsVcQ#@<83d^Mql$9_QI%id1!N^BZrX+OG%s(yt^X6Jv@Unco?! zo_=kv(=nhd6u~MSLx=%K&iECxsE26I;b4UsPx7&_4VR?=tFmqC zaw$Hq@GU24{jX{-4($+tpFQ71U3q-zYNL!BMd4#+aI}vp#EqDsvn3Yyy2V@p_w&1K=r> zQ*_r>aP*99;oOqe=gFV3iZ<~n=QrK{x)>;TYs(R9!S}N0{05CT20jp}l9b!qO@Trm zto=O5OMh2kiQYbqYJ|i+yZb${S&zVI$UZLP=H?0|h3a4-U^!e_^LzYe@s9AR+}9et z(K2BbzlUGLZz}^j0=vr82F4%uE&o9AnSiq7VHz5=Tg2~u=vN(D2=1N3*(ur9mj~nK zx*O7#>)33(rLn;KW!yscNEhrmxHGL?>FhbxOP7;d9S?Z{*VMp5x^-n&Z+xB38 zn(YGjOFpdt4Ut4Mvnm9azYa6v<+qDS-^!0hYY*K^LK6s1!b$*`CQ zozY^(_mA?(M8Pc~(iiIj^FlBx^wD*hUEAAMuFqy9nCiM1~JhbOjxfsU3I z{(f_C!7isB0i)v0K}}e~oF*S*;$NvVy=LZQn*jWHVnkIcNz556;wHkJdY;;1O?Gck zn*1=RSmn@5`P^OebCmS-0d*+~p3EXQ}tFYp~R#-Ks5_kW3 z)%oG@Vi}`=8YkKBo{y(P$hmx;gZ{}FJEmWHN31pb&yhC%v349b!Rs{jo1H5G^#m<$ z!9=5}MWWZHir}6tdy}L&H(r)WRe;~P@2lGEff~S2qow-{vPYVDYxL(lWS%p#p3l^; zVaI5S#Av(U{>Ak~T=IA# zDTdUn3Fcvz1N>|cj|nnE$F;lj1{pwD6Br3Fz6b&aP~)}Ml%ifB5M7+sV{~<4XdwK~ zRniHP3p$l(C#bTAzIwChQg~TmE39b6o=oBx0c z_n8rFIo$E*_pHOzbMs1;X_EyCO5!C!pv)oxQ4Hg7CeE+#{a9ufUp5}xqwsJ_W(QT! zY$f+$is{KOw?9|?0N8Ly&}^O=aFy7~cMuQ}Zajl%AH& z)gsb*yw7I(O!27`-^Dd_U^7=nP0uN?hzN;^<+hOMoJ)lpS_;Ibdr$k3;pq7KNHAKF z=sdiCF`sI8wrKHAVdt8;KLU^1#K$NuyTvgCsqpQ{x|k1uA>!SQQ_Z(RTY%}Y>R-^j z1QqwOyfW?(+c?-q5WnRmRWnQeTNx&vy&9ZI#)6)o66J&%afA4d%Z7fUw=NH>%8@{g zf?>TUPt0O;JX&rf+*NufSY4?Y?9lObrJNsKDyoIl0sF8M8Q7m&z{2NP z03yp|T7R<4*m>O-yL>Yq_O0$(;>1&8<&pL*gI)6dvH2|@WCPpTXBlCUDxuFf*h&tX zRZ*@P$J>Lr=O>~h_mOZJiP>E-*KId){W8x1vKx99C==Id;^ykd!(-?)_MVw@NOLu; z^fPAb#)xg0LK`s7;A0r_L5^&fGJgG8sD+U=Wzzk80!<;bdO|hf%G2g*bUP!Z8 z%AcY%aT8gujI$bEOI^wIA%i+|`Ss;l!+HngWrb`V^qU}u)x(OT<_8g$ckQ?Ln7okm zTFzn$zoO`dJc9Q2kj}T1iMVm&^mfnt1-_Me9>EnJ2o6xc=RG(pKy|5V60${TII>E1 z5<8wgo_VE)?1?xWO2Wrf5PI_POqk`1mR;ElwAf+6wZ_`VZYov z@VsvEDgRaiOA6B5750aW4;DlP^`>3KQM1@Dcym9o`ocTthIPkUa?*-u@VqUoY#liI zzT0=Sz^~j}9OP$(`?3l5N+oOfD%fl?aq@Igp7!GEh&N=G@CI70G1mN%U7M8OLKt5S zMrB20ar9&?Bj@ZqmTSPipASLzc@#f-3sA-QBk>pgMnq(^@8CEE;?*|h{Sv_iqs?~d z=UE`>r#dqcbXVhB{tpCh2>Mi|V z6>nPyPg24+=vAd#sV>M&4R<-}ly~W+on5MUNysooHOs0<&J}GGUZuIQa*1$E=Px3% zDX~3qP5EU<0xGwIr2`e4v>_V4y|3*>Hfi0&Vciz)Or9L2*l{BkftD}ia`bf`Zk)7N zD^7+7DuNgiF9g%R1N&9=Ys5aE6VQmO3bkh1e2Hc8<%ue)mZ4tN&Z+;bJz7LSnk94d zwKm^WZFz+}8ar8h>*E$bL58}%e^P|2ZsWx@Db9+IJfRW2j)imhOAqW3Nl?-_J$T1S z#Ut(H7im8lc#~*7*zN7ZE$;ERVvO3q&=NSc*oRz(D0J{S#iryZ$YyZ1XvW4wS>lRN zI?Qy>L@aXWz+>(H46SCpMeW_0ZnxXOR94XG>)K$59NY`Csb9O+1;z;Un0?Eb4;QC; zSnwgs`7*>QAlbiwT08&Kb-~Q*=WC3#kMP8{>$RTaK&XrDH{ZAkDB;YMn)SwfL>$&; zFQY3kYM(su_eQ`^%=yq(5Qwi+1(8^Z?!LsK?z|VhIbKs=Z@B-PZqb7aV|cPCr-;t* zWd2hNzyKzVRk7I%iwFZ z2(6K|m%uYD8~`L2slTeS_H?ked5`(!ttvyH4CboBEA0oER%8?c&BEHVLp)}z49D*7 z3mV(%`9+DEm#gjz=g1w4O3$Fhp)N~)r$AA3x5|>1Ch21U5nLPh0{Y$Vzt~1pbcUoZih1{*;;i{4 z3RS(Yyp5{m2NU+GZ+Xy`bAtCi{2<@L%n52n_g}*1g|`;AE004jYbwJwf-@$+_u+1s zo1hy!>YxLCzU^-5K_jA&&g$N4*)VpXn%jNhdR-Wjw@=4ce=fGlFwx(XoYh_n9<$ac7+&eX?L?_IG)L-Fv(2d01 z>_EQU@;U31``ChGXCyP`JOWy0}_%BpH6WIwr7Mn8DA8EY@CguZv+VJ*5b4xTtqyPilOl`S+Yj--6~2r2dDLQD_ED!y#EtMEHluL z3}R+B*eh&NHi2*-cCI+iw0woAPXiniO2l2wX-E_q1LgepMcyMH^qpHg;sb@bQ|(m* zQ+zxyBZA;82>4N zsicS)1_jfWzVu656OWG|8qET_4B1_strAu+B(i+gd_0$cHTkn z1MBEl^yJP;ai4%42=>zYi9Nih6>ix{zWvElOKB=I!KuRXdR^_88BNUiNJLGhi4@QV zGxpT{=b!RXLm|f4l%`nUt(ZXR^*i>G-TRmqtA5W+gMd(iXjDa;m9T-GtCRffPkrv0 z_aE_i&uYuAMh4hALD3DnXmREp*~_NDy6sO4w`V=#&u>@5xbORo>=h7np1Jt2_^SEz zlSL0-K`zW@Vg^L&QZ(vj(A$vd64{U)R)c{&L67dyZMeT`<+s#Ih%%Z zBS%eqfk+pR+N5y&w!qqI^FEDF8$T!WK>ObwngxXet6zD~Ei@Z#UL3Sy5^y2{GQTkd zU*`(bOkPcyzrDX^WNY=K6?VK7eVq@BAV99FTz)4L*XP6LeXRJd1SPy~oc202f}QsF z4lG^$M;?2q<$G(q?b{rm?K6bd)T0l@SUlCQ&Q)JY^y6CV`@@c9&!rRUKf-4POdcC7xHZ9h?zT@peaJ)2Hw8ca zOr43>ehuS&HGiCi?PN6pR27$A+)5z;Z0#16?9Py0x3@){i152!#v5Dgqm#c#p-{Ab z8jX5 zkKUzos&&yNjyL!AAoj9Sq^8|8=R<3?CL4CEuqtgJPyMy zbtAnDVvRk*7oX;y_2BS`wz(@`R-*ncZt=Um#f_rIIlfatgj@9x++5If9l&1g=DP4><>Rcsd;ayGG}05zSu;x zJu}k5llpU#=W~7)a#5Ouo-%NgOPC1Hr2{JkC@0WkD9p%u8*i#64&E_co+PYs%Tmov z!kT!IE^Z=k_osMxhHlg@%jMm>M)tz$&qj~$@d`hnL28GsE+~d9WdKe^uqbHj{~?Sx@7#Df6$&-59uN@emG+HJ#e1|*@jC%xxC z&w09M7u8U<`Ey``?)9f*EMdt-h$Z4}LE_om%Z*jDG4%&-KE^KsDhc20CMa+Ta)-T0 z^2fMgs#VLJfh>WS30HI;~+DZay5 z(KDVUe2t!}wDEM^iUdSK{w-4^n)rU>v7o>hi}}bBJax}a)_wp3ST$J`w8%+zvI$q4vRpYO!9yTO8__@sE1YHbKG86zs z@zqQxDa~`n8T$s4ggtSJyVJ%5yY+{~7rXkWx^vy{?r;2`nmYV^Jy3yBYm+kfPlFTm z9&Of3r1H2qij%{uZQBhaIL>PQ*}m7o3!1lDSi(e9fA+>zhQ;W^Am}zpS>BlYdHx?{ zTLX^#&DPOIz_(myj%{&d-k4UCPaJ|8oe|vSNXPFVAKGew)RFOlxkHy&ZKtr9I3A+`+rKk$QD`*}A|~YA1eR+@B_Kep5r7;VODT9<$^bKCTS*BZ|3$RH%+Gal~e=6)rq zt$5nz40Pvq*r=etKYrY}?OrC{$kAB-B9}HvI&~K*$M*2nyJO5tezP`|wooQN_Cf81 zkZ4|sz-A*Uzs7{+)(RRhenh0a+}!Jmb=hjas!Q_t zWpE?9)DOKLGbF-*3INvH?uW+VdSa3fqonTL>2D{IQ~B#5kMA~CpD=Pe@~yTGJ=G~P zRBZQ7teY3^>CTvtIzk4U*6w$3niJY$Vq^gB6J$iU)vg%EPXXe<&|A@91Mx#%nJBzR zM-38MB|wAVW?*BvN>YhcZP17T=DMc*$3yHnanjS7w)&=7r7<&AHIJk!n{yi z8)B2Jp-!)B0umZNI#nUwJWcmt1SsrWS8O{gKe{0Ie9cgP9yTseUKxzg=rx-;K8)w_ zleGK2d=Iyw_$~7Ue)jw}*V{%H3&qwg$y=~*`oE8}(m>r`PsDMN1&EWE!WRZd0=EduiI#*hy*06aByXFmay~teVNpkCmo%>dM5?WJwyn1;ajetVh`h z7W5bdzf+hb@~UZVC!%y_g&d?d#{KlFUWR}4UbXVp*W?lz@5Dvs+0W1lauii*pelhU zUxd3b)8DUgZ6zC(M5a8yi7@<;pMB^)s-I41AM$?CNx6WN0rJ(|>Zpu2@Yu2nGev|c zv6I4%Ctxke?RdpeX_AA^e*mkQbIe}!z1Z)2Ov2IUL=uu;rb8sAJM-FGs+RAx$zD#} zcWO39pCcDI#vKk_W(ir5&5P0|WhyUZa)B#H7;bT;oJ75XD-dRdW!Jcm_|XEb4Z11g zLDr}Z8twh?W{cZ`X9_bpmy|&&?tr>#xwSSeCBrd#AY$0>4ozS6l*_>dD!u{r;qrva zSM7P9de}o?#)8`XpwxYk{?BvBzLvN67?46q%1KSVW2WRlm9f|K&`>Rg1uH};(F*uJMw7IV~bJo>XEABTBZ}!E|&AJ~C z43_Fq|CS{U>AqJ*j>xE^IjihD-bg1c`=}Ovp~3OKr;jnsg}Jn%;p!*1+goXRk6~fZ zqf12z>t{nXo<J5LqMH@4CbGGN*vR3-4vnwiuVyKqVKg#?;B=lkmhq}hF9 zt%txDtn%tsH?15C-DmfH*2ocvjNy$trW_}=XWrYa9h2nw%X{kcWpu?nlkvf1Kep}w zS~=D+7US;BhOi@5C4iW4;D@AFM;eEjPBRASO}QV)O^ zg5U_e0!`rT{Sh_mvVW^v2gMRB%Bo&+cxVVuR!KzJn?`wtoA6uVLp=Fm^HB5v+QFuz z?BREU9(4==caf`s&LbjCy@c}!N|HZZRvKEAaQQ_}m-Fs4xqBphQi+lOqP6O~qxV8f zpzUfiQT*GluE8lFg2Ndo)%v@Mo9@c+m8F0NR!dxjPj`bKD)Fd9m7?sR4XFN*pap8m z&X#nt3t*F{nJ(Dj)lpItHYvA@J6Le2ay(q3a`tlxLzNDnRA=;@qc9p|?xKyqP-#wu z$nvw+N(>@<^zmFyj#wF)NK{u-Gj`}8xBd0{h>Q|FX$~_F67XaZZ4x5Ne>)ezRu_ZP z4U+|O*3(X-K?aI@+~e8w9+9cn+YU4Pt|c)2C;Cr_d#~)@hun?)qD20qw5}P2xWE85 z6b&GcFo=qFey7?)&p&i3f&lak326lw3O-Rh;y?dO^DBGn|LU6ngd=SUN9-`jvE)d` z7Ohyh#rvnPYfIVl#pDX3ahM{uS45SS_J4I!cor#++VsF)r;sZ%w-!d9p32k&yOZ-8 zETr<)CZP@a7s&k`J>xcp^q=xQb(+GFSR-G*=go_nv(tIJ3YGq>SS-S9fm{WeKI(`f zK}4#dupa>~|D8}ttsQ=;V4+$aR;o*T!Wvue8e)aZH@Ul~_oLi@F{ZYDIOpz8_(y+81}>mzH`GIL_WQKI?F{>NB|EdPH^SwuZ|8u?GtqS-1r)#+I)E`C5F&Fumv&PwNJ zjC9wpk76}~^xeWam|>20*HcvGV*bP#V$KA1xTiw_b={L40SSTm8s!_g{O)`*I{v&L zc8taYY*{<-gZ~FXPQp!luWnXdU3tZ7s;iGe9YiV@rR3wfGF3o603S2%=nYC7O5cqE z6R{f<^lRa4?EJw}kKi79Y$o2K;@C>c4x`(1F{|OB$$wjA7=UkblaT+Mv}{h^ zU2Lz4rRV0Vy1QQvnP?g0$uGn|jmC{zb=4OnESye&_6j5LFODV#qyCu{cy=osn?Mu` zzYvkzY(15JRuPal(Sgog`CcG{>ddJ8AL^t?=&84g6Ho)Me&M0^Q$O7eQCsmV9B3Rd z2VSb}O&0XWKV3R+v|hNi&;7o+f1%p$KuBVTYxBGEg0JhABZoEL7CaR^vDYl1e++z; zy0-d@8WxJsONXxIMHQH-fYiIRy}ATz4Qk;0j{ zsBfJM>yzmN0XCvw>o(}d>c9ZN18(4=M`xT(q?~hJ{#lnUIoa?O*kXM2H~aaYL*yO6 z1jEwQlrqCS$S-HerF9Ekz-8@@+rZP>yE{v|$PpsV+oqi>^LJ+8-!f*kBKF)IHZv;EgT~If+`mUkj9D7Z( z04J@k7)g@(PwBcnhjYu5y)G6<$QKd^A5%I)tz5U06`sDFC5Xmu;2Qfq&I|f+!r3_T z-2sUb{uCtCYtHu(Dp_tvK3RO1Y=3-QY#>K=4PI2i?T-sFcc}(` zlmyCiZJT$GMF$!CJt)i?p63968A-~knvQoZ?(iICdj&fFdb=LpVZMKHwl>~KO(nL~ z;Z(6PA-9ibB}>qJn$dr)PSGR$Hl&eMphj@2yK^({QU1J?*S`@8GTWU8dIWK2h`M&A zy%ilbI`0$pZTH{oy0SXZ^SPWoGaY@J+UOcG(A&I+2R9*FPc4?xVwYpsV|FchiqPo= zD)9(itzNs~@a)_1{BSss!@R5J5;vQsVo{`KUt%H5(=Yx8`?POBt6GoFPQJCIM65&K zOY2@QYUo}mwVX?H%2X&G9PX4tK#-;~y$HGZ{kCDj=i9Z>h$JhtOJeg3_*9&r=EEjj zlH;~`NX@(3GyhtR$hP-8=6Jqj-f{Z87~eLnKDB-GiUf=5UB(#MoXLocIVkq!na>7B z;F{EFoNC!qBG~%Y_4k0V5BII0SJXFg`mQ?|H1u`RhsL|cj}$AS{aIw5=nD%z443FWde zp}kcGH|OVZFeqcpXhP=c47KL20xSl_DKjUy`yLvp*a9q|iKFoJl32tEi`*3R>_1Nm zSG{~PW_qNrzF*E&-=h6_^O7yFEIS>ZWda0$C3;u)kCxBWAIu|LD)=rHmJ?i5n?D|c z$*8=2pXBzQKA_=-)ml855-Ext|9r;7Nv_rlpQwR5-(F*drneY@D$ybnEUnKEIL&W6 zln-xi_ls&`g-A~rlYv@T>`f|0?^dNpBS?}7bN=v!LO4gPr{N;-qj}V$TgF_Cn~1RY z2K=0zD>@{*9A-v(O1xpi;}QjlFKP3=aPc`ZM|Od4vYys44C_yrA6^;@)CcMCh9f5P z!%)qI)O19^up38I4b^P0x%hI9e>^)3x-`-40U3q?Di&uR#cL zHk2mpVFA(Ewax~-{lFxO_F-=zYMaHLB z!AN7BIw3G2yo4a^LFy^Cdt$bSibk;cslZx+ErZ=uWs!)rqfR{(B~K)pSr@M+=cRL;!AXhd|q z93+ zAtg=ywKO8VPpzqq8jiwnrSvtb0~$@9vwQ`e-~*I=obBRm+dH-rx_O*u%S{;)+=qRd zkAED=<;#mA;oQFputW z3ky%pDeb`{0O%z|$*?2lA|sJ$Yu!e-6Z;(Hi`V^{=dv%lct;vM!;Uv)0`_Nj0z>0G zBk$M&9i5Sz8JXO_)v4DgjBE}gn_l#OOiOQmnPVf!=?(Vc~+AtQJR#m0*0UL=&ko>V?KO zvIq0bk$Y;#t)XqL|6z~7UdWcr#D{JtGIyR)Q774zK~55^8`S+@sTwLLIQ74GGlq`C zTss1d)|E5z<->}qM~)k_K4%=^nceQrJDqw+Y`e1j zzO4K49ozyE7Xq>%b@*N^)_t$mz#@uup(`~uOh5k;Shksj(qU#{KTuoD3gbEqf*|=k z1u#ySx5Z$9f@g=Y=iryYcPcH!jisd#uV`quiUEe}uvHQ~7!~|v7!-szMf4EXw{`16Tg__aOGf)Ay)!_8f(lBI7aw?PC$`|ot3RX`N*V(N1%U0F* zE5~EP3^HrY;Sr4H+gq!3TRi}6vZqz7DnY@9Ml`s~hd1<7P`VuIfasU?U^Qc3=)5vH z(|SL@&t$RRfvXYdi1P|Ro{86<7d!aJr%2Sd@7G=PiyzVhM!Nk8*pFUau1-=$o^?yf zIZJHbmpjrlWJl=>ync5xhHc~v{y^2~&6N1$#5Xp|>bF0|n;d~a4WOUj{=Kp`s18a0im1S?V;xdPxuTtOjloi<*r`7 z#)oybcfqYH{+F?r1@j|Y-kzTiQn-rEGv@Jhn3)ahJbAw0zkGKZqj?N8xmTmHc zj=93|GJH0mLHru%MDL+JLf;Tdc>Na+7Xa!wHq}5XDHO zP&T@&{BU|Xe92LEnmq_wzf3fN)Xlb)&32nQ9zDMf-Fy5A zt-gm-`Ve(PL{;0JP+H~D3?lbobd(yLQP_wd?HPLe6d9{98kWU)pT|E6Zmk6^KGI zmARg6Dri1|apV`=WTK(K`iqUen#hL{e)@+0QTO>Y7{X0jX2#Ihp_E;ie~cmESI~bJ zDbf2+?4skp_eL%r_#Bq}+p@sY|Bsp{G@btmWCj0c0hBlY35Buz&vb;zX*Qmtp!x0J z0cU8n{wLV-Kh@~}&d~?(Ou!Ko*4OhwAP_MbnXJY}kPlEE0<5h~bf@)?VJ1FGHMR%a zo|Z;>dU^`{>(JKQ(~~acYhZK2LDZ6^1^7rVU3^F3mV?zp5 ztJV}%$o_U%A?H8G&0*UC)Wz$%jfmB0e|oyIw6yfIm`e{uZ1^+kz=DwH9xWx<~eiOn|<2uf-<#wN4fJ~HgR$%M#5c>9|@#8ay2^V>82q8EyVi|c1#AmXx)zpkpPYAg#dY8ajU>5`IPwkN9{QpvnE&i+5X zkh2!|Zk)2Ty-LDf?;jG{YkbM`SREbGq}`U6$FP4>PGx*Tqw(J8g;3K=+-w9@yvn(M z3XPEGR&7T^ucCQh3;ps8Y3qrk>Z+syK&z)IMMbrrZuI3A7l(zY*1NC(&{G4C@P5kR z0Gn~Ry9^9N1b3xX?#4os;1cw=SD9gJek{1m4ojN6Y7aEB=;~7^dmTfkEysL{O?oc> z*6bNiIIo2&$;km=iY{Q4mMC}=IjupiuC66V+0qG}WMRA*NEkf+KR6d%^b3SaIPq*3 zrh51gcC~M4kZ@GW((Ps5y!m)Lt?TjoPyqx2{Z4m-8&XW!rTv#<#}~F_9ibPb6W*cx zl7#xKsECDx*4Nwnxz5SbVn2j)@nyNJ<1EX7sg@Q9m=IOje%Pe(OVf0S?jPmJdt)GF zkhu0+$e;Xp%aoA&e~BdCpjf;sxc~Bj+y9FVv!cg(gs5JNp1l0)u`Fr**>ckoOJH3B zzxzLt$O3Oj$mjvkCfK;SBqr6Uq{I$q4; zxZi?sEPNbrfpls~9&X@9#_;;Gt*M(X;HIWp5pGDvlpYQV-lLC}m3H%5lhYXczp*ib zDfen_>~=3uy{Bff3^HzaTw3>AsZ)IjGR|2XE4&oMn29_jzN;?|Kks;P-G{(FUYLIR zUAxT4{EFw`y~#^l4NnG@5NYFS+;79R-~6PlfA7{rD{?wKe7Pcw>8UP2!u!b`Jp8LM z5f6=lXg|Hgh$aklt=gHA)Ppjm*#Soec{9qHJURI?;`YjAtpluFFgIq8@(-hnr@%Di z!Iq>a90U6?%yN%_*6C1U|K4%Ssx4H1i2rUMQ*DoBZb{H{3?ZC3aX()a{Z9l!yS)*0 z5>jUd%l?rYK40AU86&a%bvS4+TJYAFCyxEyi#q(7TF1BUVypN0O)Y$AgX^=pNnzW4 zaDUv;*eJC{)Ry?_tBN4KyN>m^0mj!{;^g-gXRZjq_9Qy~W*Yg%Sw{Qvz9goKbG)=7 zH@anue2mjgXIgcw`leD`Bbp`n+B2lS%8>48;wY5^q(+7?80E%~YY|<@DrFzxKFu~C8evPd8GuXpxe-eMtus~9R@q^FLKSN5$VM{^>wPt1st9UUS z0X)VFZN4i>N1Vy$d)eXM3-3qaD@wB;`6{hk!#X#WSO3gP&^6CYv7RmR)aY7Zj8B0d z+$i?m9b`C~;OD|xy#5zlOR;*QsLxv_t!H$rH+Rt~F0@uQ$7?`V_4<#}*zoJ!*RrG6JaH!>QdYN{C>EYJH0o+!pl8+} zg;*`rTK8S)OsAK2$US{zme6We6QpWbe@;p_8MTl}&Ro9^af#T~X1z0>ATVE_JoUH3 z;V+GHW|c zo0Bl4B(8LAC9X`-=BN=FIb*>Dm#i6L4^g(B8V`id3i)un(l8?bvGmiM8e)gup)j6TM2yiJ!)K7!0lc%moA-} zF514dD1BL71WTGpueV9#!)293fX8VWQFJ`f1|-=L4zsB$*k(?=Hs@Jpj&=>_!?Xk9 z7WO^6*#0(o;yX+HAY7&_KwDNa>RmCm4JssGe!8n{Y{y(`3i|UnW~^Gq()u&Klf`tF z0F-QxFqMV&eniE1;mAC|hSGG4Fz(ZZton2%!eIR}Wut4y%Ue)U8>0jCj`4@SED2iY z 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 diff --git a/docs/tutorials/getting_started.md b/docs/tutorials/getting_started.md index f3562b4..b8f551f 100644 --- a/docs/tutorials/getting_started.md +++ b/docs/tutorials/getting_started.md @@ -1,12 +1,16 @@ # Getting started -In this tutorial, we will deploy and run the SD-Core 5G core network using Juju. We will also -deploy a radio and cellphone simulator to simulate usage of this network. +In this tutorial, we will deploy and run the SD-Core 5G core network using Juju and Terraform. +As part of this tutorial, we will also deploy additional components (gNB Simulator - a 5G radio +and a cellphone simulator, SD-Core Router - a software router facilitating communication between +the core and the Radio Access Network (RAN)) to simulate usage of this network. Both gNB Simulator +and SD-Core Router serve only demonstration purposes and shouldn't be part of production +deployments. -To complete this tutorial, you will need a machine with the following -requirements: +To complete this tutorial, you will need a machine which meets the following requirements: - A recent `x86_64` CPU (Intel 4ᵗʰ generation or newer, or AMD Ryzen or newer) +- At least 4 cores - 8GB of RAM - 50GB of free disk space @@ -61,61 +65,165 @@ directory: `mkdir -p /home/ubuntu/.local/share` ``` -## 3. Deploy SD-Core +## 3. Install Terraform +From your terminal, install Terraform. -Create a Juju model named `core`: +```console +sudo snap install terraform --classic +``` + +## 4. Create Terraform module + +On the host machine create a new directory called `terraform`: ```console -juju add-model core +mkdir terraform ``` -Deploy the `sdcore-router-k8s` operator: +Inside newly created `terraform` directory create a `terraform.tf` file: ```console -juju deploy sdcore-router-k8s router --trust --channel=beta +cd terraform +cat << EOF > terraform.tf +terraform { + required_providers { + juju = { + source = "juju/juju" + version = "~> 0.10.1" + } + } +} +EOF ``` -Deploy the `sdcore-k8s` charm bundle: +Create a Terraform module containing the SD-Core 5G core network, 5G radio and a cellphone +simulator and a router: ```console -juju deploy sdcore-k8s --trust --channel=beta +cat << EOF > main.tf +resource "juju_model" "sdcore" { + name = "sdcore" +} + +module "sdcore-router" { + source = "git::https://github.com/canonical/sdcore-router-k8s-operator//terraform" + + model_name = juju_model.sdcore.name + depends_on = [juju_model.sdcore] +} + +module "sdcore" { + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-k8s" + + model_name = juju_model.sdcore.name + create_model = false + + traefik_config = { + routing_mode = "subdomain" + } + + depends_on = [module.sdcore-router] +} + +module "gnbsim" { + source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform" + + model_name = juju_model.sdcore.name + depends_on = [module.sdcore-router] +} + +resource "juju_integration" "gnbsim-amf" { + model = juju_model.sdcore.name + + application { + name = module.gnbsim.app_name + endpoint = module.gnbsim.fiveg_n2_endpoint + } + + application { + name = module.sdcore.amf_app_name + endpoint = module.sdcore.fiveg_n2_endpoint + } +} + +resource "juju_integration" "gnbsim-nms" { + model = juju_model.sdcore.name + + application { + name = module.gnbsim.app_name + endpoint = module.gnbsim.fiveg_gnb_identity_endpoint + } + + application { + name = module.sdcore.nms_app_name + endpoint = module.sdcore.fiveg_gnb_identity_endpoint + } +} +EOF ``` -Deploying the core network can take up to 15 minutes. You can validate the status of the -deployment by running `juju status`. The core network is ready when all the charms are in the -`Active/Idle` state. It is normal for `grafana-agent-k8s` to remain in waiting state. Example: +```{note} +You can get a ready example by cloning [this Git repository](https://github.com/canonical/charmed-5g). +All necessary files are in the `examples/terraform/getting_started` directory. +``` + +## 5. Deploy SD-Core + +Initialize Juju Terraform provider: + +```console +terraform init +``` + +Deploy 5G network. + +```console +terraform apply -auto-approve +``` + +The deployment process should take approximately 15-20 minutes. + +Monitor the status of the deployment: + +```console +juju switch sdcore +watch -n 1 -c juju status --color --relations +``` + +The deployment is ready when all the charms are in the `Active/Idle` state. It is normal +for `grafana-agent` to remain in waiting state. Example: ```console ubuntu@host:~$ juju status -Model Controller Cloud/Region Version SLA Timestamp -core microk8s-localhost microk8s/localhost 3.1.6 unsupported 12:58:34-05:00 - -App Version Status Scale Charm Channel Rev Address Exposed Message -amf active 1 sdcore-amf-k8s edge 57 10.152.183.208 no -ausf active 1 sdcore-ausf-k8s edge 40 10.152.183.237 no -gnbsim active 1 sdcore-gnbsim-k8s edge 43 10.152.183.167 no -grafana-agent-k8s 0.32.1 waiting 1 grafana-agent-k8s latest/stable 44 10.152.183.245 no installing agent -mongodb-k8s active 1 mongodb-k8s 6/beta 36 10.152.183.156 no Primary -nms active 1 sdcore-nms-k8s edge 26 10.152.183.121 no -nrf active 1 sdcore-nrf-k8s edge 62 10.152.183.123 no -nssf active 1 sdcore-nssf-k8s edge 37 10.152.183.165 no -pcf active 1 sdcore-pcf-k8s edge 32 10.152.183.205 no -router active 1 sdcore-router-k8s edge 33 10.152.183.49 no -self-signed-certificates active 1 self-signed-certificates beta 33 10.152.183.153 no -smf active 1 sdcore-smf-k8s edge 37 10.152.183.147 no -traefik-k8s 2.10.4 active 1 traefik-k8s latest/stable 148 10.0.0.3 no -udm active 1 sdcore-udm-k8s edge 35 10.152.183.168 no -udr active 1 sdcore-udr-k8s edge 31 10.152.183.96 no -upf active 1 sdcore-upf-k8s edge 64 10.152.183.126 no -webui active 1 sdcore-webui-k8s edge 23 10.152.183.128 no +Model Controller Cloud/Region Version SLA Timestamp +sdcore microk8s-localhost microk8s/localhost 3.1.7 unsupported 13:40:12+01:00 + +App Version Status Scale Charm Channel Rev Address Exposed Message +amf active 1 sdcore-amf-k8s 1.3/edge 57 10.152.183.208 no +ausf active 1 sdcore-ausf-k8s 1.3/edge 40 10.152.183.237 no +gnbsim active 1 sdcore-gnbsim-k8s 1.3/edge 43 10.152.183.167 no +grafana-agent 0.32.1 waiting 1 grafana-agent-k8s latest/stable 44 10.152.183.245 no installing agent +mongodb active 1 mongodb-k8s 6/beta 36 10.152.183.156 no Primary +nms active 1 sdcore-nms-k8s 1.3/edge 26 10.152.183.121 no +nrf active 1 sdcore-nrf-k8s 1.3/edge 62 10.152.183.123 no +nssf active 1 sdcore-nssf-k8s 1.3/edge 37 10.152.183.165 no +pcf active 1 sdcore-pcf-k8s 1.3/edge 32 10.152.183.205 no +router active 1 sdcore-router-k8s 1.3/edge 33 10.152.183.49 no +self-signed-certificates active 1 self-signed-certificates 1.3/edge 33 10.152.183.153 no +smf active 1 sdcore-smf-k8s 1.3/edge 37 10.152.183.147 no +traefik 2.10.4 active 1 traefik-k8s latest/stable 148 10.0.0.4 no +udm active 1 sdcore-udm-k8s 1.3/edge 35 10.152.183.168 no +udr active 1 sdcore-udr-k8s 1.3/edge 31 10.152.183.96 no +upf active 1 sdcore-upf-k8s 1.3/edge 64 10.152.183.126 no +webui active 1 sdcore-webui-k8s 1.3/edge 23 10.152.183.128 no Unit Workload Agent Address Ports Message amf/0* active idle 10.1.182.23 ausf/0* active idle 10.1.182.18 gnbsim/0* active idle 10.1.182.50 -grafana-agent-k8s/0* blocked idle 10.1.182.51 logging-consumer: off, grafana-cloud-config: off -mongodb-k8s/0* active idle 10.1.182.35 Primary +grafana-agent/0* blocked idle 10.1.182.51 logging-consumer: off, grafana-cloud-config: off +mongodb/0* active idle 10.1.182.35 Primary nms/0* active idle 10.1.182.2 nrf/0* active idle 10.1.182.53 nssf/0* active idle 10.1.182.48 @@ -123,56 +231,65 @@ pcf/0* active idle 10.1.182.46 router/0* active idle 10.1.182.57 self-signed-certificates/0* active idle 10.1.182.56 smf/0* active idle 10.1.182.27 -traefik-k8s/0* active idle 10.1.182.40 +traefik/0* active idle 10.1.182.40 udm/0* active idle 10.1.182.52 udr/0* active idle 10.1.182.39 upf/0* active idle 10.1.182.60 webui/0* active idle 10.1.182.33 ``` -## 4. Deploy the 5G simulator +## 6. Configure the ingress -Deploy the `sdcore-gnbsim-k8s` operator +Get the IP address of the Traefik application: ```console -juju deploy sdcore-gnbsim-k8s gnbsim --trust --channel=beta +juju status traefik ``` -Integrate it to the AMF and the NMS: +In this tutorial, the IP is `10.0.0.4`. Please note it, as we will need it in the next step. -```console -juju integrate gnbsim:fiveg-n2 amf:fiveg-n2 -juju integrate gnbsim:fiveg_gnb_identity nms:fiveg_gnb_identity -``` +Configure Traefik to use an external hostname. To do that, edit `traefik_config` +in the `main.tf` file: -## 5. Configure the ingress +``` +:caption: main.tf +(...) +module "sdcore" { + (...) + traefik_config = { + routing_mode = "subdomain" + external_hostname = "10.0.0.4.nip.io" + } + (...) +} +(...) +``` -Configure Traefik to use an external hostname: +Apply new configuration: ```console -juju config traefik-k8s external_hostname=10.0.0.3.nip.io +terraform apply -auto-approve ``` -Here, replace `10.0.0.3` with the Application IP address of the `traefik-k8s` application. You can find it by running `juju status traefik-k8s`. - Retrieve the NMS address: ```console -juju run traefik-k8s/0 show-proxied-endpoints +juju run traefik/0 show-proxied-endpoints ``` -The output should be `http://core-nms.10.0.0.3.nip.io/`. Navigate to this address in your browser. +The output should be `http://sdcore-nms.10.0.0.4.nip.io/`. Navigate to this address in your +browser. -## 6. Configure the 5G core network through the Network Management System +## 7. Configure the 5G core network through the Network Management System In the Network Management System (NMS), create a network slice with the following attributes: - Name: `default` - MCC: `208` - MNC: `93` -- UPF: `upf-external.core.svc.cluster.local:8805` -- gNodeB: `core-gnbsim-gnbsim` +- UPF: `upf-external.sdcore.svc.cluster.local:8805` +- gNodeB: `sdcore-gnbsim-gnbsim` You should see the following network slice created: @@ -196,16 +313,15 @@ You should see the following subscriber created: :align: center ``` -## 7. Run the 5G simulation +## 8. Run the 5G simulation -Run the simulation +Run the simulation: ```console juju run gnbsim/leader start-simulation ``` -The simulation executed successfully if you see `success: "true"` as one of the -output messages: +The simulation executed successfully if you see `success: "true"` as one of the output messages: ```console ubuntu@host:~$ juju run gnbsim/leader start-simulation @@ -217,9 +333,21 @@ info: run juju debug-log to get more information. success: "true" ``` -## 8. Destroy the environment +## 9. Destroy the environment + +Destroy Terraform deployment: + +```console +terraform destroy -auto-approve +``` + +```{note} +Terraform does not remove anything from the working directory. If needed, please clean up +the `terraform` directory manually by removing everything except for the `main.tf` +and `terraform.tf` files. +``` -Destroy the Juju controller and all its models +Destroy the Juju controller and all its models: ```console juju kill-controller microk8s-localhost diff --git a/examples/terraform/getting_started/main.tf b/examples/terraform/getting_started/main.tf new file mode 100644 index 0000000..072bcf2 --- /dev/null +++ b/examples/terraform/getting_started/main.tf @@ -0,0 +1,62 @@ +# Copyright 2024 Canonical Ltd. +# See LICENSE file for licensing details. + +resource "juju_model" "sdcore" { + name = "sdcore" +} + +module "sdcore-router" { + source = "git::https://github.com/canonical/sdcore-router-k8s-operator//terraform" + + model_name = juju_model.sdcore.name + depends_on = [juju_model.sdcore] +} + +module "sdcore" { + source = "git::https://github.com/canonical/terraform-juju-sdcore-k8s//modules/sdcore-k8s" + + model_name = juju_model.sdcore.name + create_model = false + + traefik_config = { + routing_mode = "subdomain" + external_hostname = "10.0.0.3.nip.io" + } + + depends_on = [module.sdcore-router] +} + +module "gnbsim" { + source = "git::https://github.com/canonical/sdcore-gnbsim-k8s-operator//terraform" + + model_name = juju_model.sdcore.name + depends_on = [module.sdcore-router] +} + +resource "juju_integration" "gnbsim-amf" { + model = juju_model.sdcore.name + + application { + name = module.gnbsim.app_name + endpoint = module.gnbsim.fiveg_n2_endpoint + } + + application { + name = module.sdcore.amf_app_name + endpoint = module.sdcore.fiveg_n2_endpoint + } +} + +resource "juju_integration" "gnbsim-nms" { + model = juju_model.sdcore.name + + application { + name = module.gnbsim.app_name + endpoint = module.gnbsim.fiveg_gnb_identity_endpoint + } + + application { + name = module.sdcore.nms_app_name + endpoint = module.sdcore.fiveg_gnb_identity_endpoint + } +} diff --git a/examples/terraform/getting_started/terraform.tf b/examples/terraform/getting_started/terraform.tf new file mode 100644 index 0000000..4f60bb4 --- /dev/null +++ b/examples/terraform/getting_started/terraform.tf @@ -0,0 +1,11 @@ +# Copyright 2024 Canonical Ltd. +# See LICENSE file for licensing details. + +terraform { + required_providers { + juju = { + source = "juju/juju" + version = "~> 0.10.1" + } + } +} From 71bc200abd2e23c2b5736961c0f379cdec014f91 Mon Sep 17 00:00:00 2001 From: Bartlomiej Gmerek <42570669+Gmerold@users.noreply.github.com> Date: Wed, 28 Feb 2024 09:36:59 +0100 Subject: [PATCH 2/4] feat: Replacing Juju bundle with Terraform module in Deployment Options (#189) --- docs/reference/deployment_options.md | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/docs/reference/deployment_options.md b/docs/reference/deployment_options.md index 3c64a0c..f4ec8bb 100644 --- a/docs/reference/deployment_options.md +++ b/docs/reference/deployment_options.md @@ -4,9 +4,9 @@ ````{tab-item} Single site deployment -Use the `sdcore-k8s` bundle to deploy a standalone 5G core network. -This bundle contains the 5G control plane functions, the UPF, Webui, Grafana Agent, Self Signed -Certificates and MongoDB. +Use the [sdcore-k8s][sdcore-k8s-terraform] Terraform module to deploy a standalone 5G core network. +This module contains the 5G control plane functions, the UPF, the NMS (Network Management System), +Grafana Agent, Self Signed Certificates and MongoDB. ```{image} ../images/sdcore_single_site.png :alt: Single site deployment @@ -18,8 +18,9 @@ Certificates and MongoDB. ````{tab-item} Edge deployment -Use the `sdcore-control-plane-k8s` to deploy the 5G control plane in a central place and the -`sdcore-user-plane-k8s` bundle to deploy the 5G user plane in edge sites. +Use the [sdcore-control-plane-k8s][sdcore-control-plane-k8s] Terraform module to deploy +the 5G control plane in a central place and the [sdcore-user-plane-k8s][sdcore-user-plane-k8s] +Terraform module to deploy the 5G user plane in edge sites. ```{image} ../images/sdcore_edge.png :alt: Edge deployment @@ -30,3 +31,7 @@ Use the `sdcore-control-plane-k8s` to deploy the 5G control plane in a central p ```` ````` + +[sdcore-k8s-terraform]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/main/modules/sdcore-k8s +[sdcore-control-plane-k8s]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/main/modules/sdcore-control-plane-k8s +[sdcore-user-plane-k8s]: https://github.com/canonical/terraform-juju-sdcore-k8s/tree/main/modules/sdcore-user-plane-k8s From 15d500adef6b57efd777e9b5119c1a355db67bfd Mon Sep 17 00:00:00 2001 From: Guillaume Belanger Date: Thu, 29 Feb 2024 08:04:37 -0500 Subject: [PATCH 3/4] chore: use dependabot for dependency management (#194) --- .github/dependabot.yml | 8 ++++++++ renovate.json | 13 ------------- 2 files changed, 8 insertions(+), 13 deletions(-) create mode 100644 .github/dependabot.yml delete mode 100644 renovate.json diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..9adccd2 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,8 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + commit-message: + prefix: "chore: " diff --git a/renovate.json b/renovate.json deleted file mode 100644 index c8dd3c6..0000000 --- a/renovate.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base" - ], - "packageRules": [ - { - "matchUpdateTypes": ["minor", "patch"], - "automerge": true - } - ], - "platformAutomerge": true -} From d03d3f2ea7a6af0bfc017aad4d8805ae9a7d58ad Mon Sep 17 00:00:00 2001 From: Guillaume Belanger Date: Thu, 29 Feb 2024 16:25:07 -0500 Subject: [PATCH 4/4] chore: bump juju version to 3.4 (#195) --- docs/how-to/deploy_sdcore_cups.md | 2 +- docs/how-to/deploy_sdcore_gnbsim.md | 2 +- docs/how-to/deploy_sdcore_standalone.md | 2 +- ...deploy_sdcore_user_plane_with_hugepages.md | 2 +- docs/tutorials/getting_started.md | 4 +- docs/tutorials/mastering.md | 46 +++++++++---------- 6 files changed, 29 insertions(+), 29 deletions(-) diff --git a/docs/how-to/deploy_sdcore_cups.md b/docs/how-to/deploy_sdcore_cups.md index 8a43606..a2ee2e3 100644 --- a/docs/how-to/deploy_sdcore_cups.md +++ b/docs/how-to/deploy_sdcore_cups.md @@ -4,7 +4,7 @@ This guide covers how to install a SD-Core 5G core network with Control Plane an ## Requirements -- Juju >= 3.1 +- Juju >= 3.4 - A Juju controller has been bootstrapped, and is externally reachable - A Control Plane Kubernetes cluster configured with - 1 available IP address for the Access and Mobility Management Function (AMF) diff --git a/docs/how-to/deploy_sdcore_gnbsim.md b/docs/how-to/deploy_sdcore_gnbsim.md index 3df791b..e0528ca 100644 --- a/docs/how-to/deploy_sdcore_gnbsim.md +++ b/docs/how-to/deploy_sdcore_gnbsim.md @@ -4,7 +4,7 @@ This guide covers how to install and configure the SD-Core gNB Simulator. ## Requirements -- Juju >= 3.1 +- Juju >= 3.4 - A Juju controller has been bootstrapped - A Kubernetes cluster configured with Multus - 1 Juju cloud for the Kubernetes cluster has been added diff --git a/docs/how-to/deploy_sdcore_standalone.md b/docs/how-to/deploy_sdcore_standalone.md index 0cd3c3c..1d764b9 100644 --- a/docs/how-to/deploy_sdcore_standalone.md +++ b/docs/how-to/deploy_sdcore_standalone.md @@ -6,7 +6,7 @@ This guide covers how to install a standalone SD-Core 5G core network, suitable You will need a Kubernetes cluster installed and configured with Multus. -- Juju >= 3.1 +- Juju >= 3.4 - Kubernetes >= 1.25 - A `LoadBalancer` Service for Kubernetes - Multus diff --git a/docs/how-to/deploy_sdcore_user_plane_with_hugepages.md b/docs/how-to/deploy_sdcore_user_plane_with_hugepages.md index ec677a4..5003166 100644 --- a/docs/how-to/deploy_sdcore_user_plane_with_hugepages.md +++ b/docs/how-to/deploy_sdcore_user_plane_with_hugepages.md @@ -9,7 +9,7 @@ the `sdcore-user-plane` Juju bundle. - CPU that supports AVX2, RDRAND and PDPE1GB instructions (Intel Haswell, AMD Excavator or equivalent) - LoadBalancer with 1 available address for the UPF - Multus CNI enabled -- Juju >= 3.1/stable +- Juju >= 3.4/stable - A Juju controller bootstrapped onto the Kubernetes host - Juju model created, named `user-plane` diff --git a/docs/tutorials/getting_started.md b/docs/tutorials/getting_started.md index b8f551f..ea53536 100644 --- a/docs/tutorials/getting_started.md +++ b/docs/tutorials/getting_started.md @@ -49,7 +49,7 @@ sudo microk8s enable metallb:10.0.0.2-10.0.0.4 From your terminal, install Juju. ```console -sudo snap install juju --channel=3.1/stable +sudo snap install juju --channel=3.4/stable ``` Bootstrap a Juju controller @@ -197,7 +197,7 @@ for `grafana-agent` to remain in waiting state. Example: ```console ubuntu@host:~$ juju status Model Controller Cloud/Region Version SLA Timestamp -sdcore microk8s-localhost microk8s/localhost 3.1.7 unsupported 13:40:12+01:00 +sdcore microk8s-localhost microk8s/localhost 3.4.0 unsupported 13:40:12+01:00 App Version Status Scale Charm Channel Rev Address Exposed Message amf active 1 sdcore-amf-k8s 1.3/edge 57 10.152.183.208 no diff --git a/docs/tutorials/mastering.md b/docs/tutorials/mastering.md index eda966b..53a98a4 100644 --- a/docs/tutorials/mastering.md +++ b/docs/tutorials/mastering.md @@ -15,8 +15,8 @@ A machine running Ubuntu 22.04 with the following resources: The following IP networks will be used to connect and isolate the network functions. -| Name | Subnet | Gateway IP | -| ---- | ------ | ---------- | +| Name | Subnet | Gateway IP | +| ------------ | ------------- | ---------- | | `management` | 10.201.0.0/24 | 10.201.0.1 | | `access` | 10.202.0.0/24 | 10.202.0.1 | | `core` | 10.203.0.0/24 | 10.203.0.1 | @@ -161,7 +161,7 @@ sudo snap connect multipass:lxd lxd To complete this tutorial, you will need seven virtual machines with access to the networks as follows. | Machine | CPUs | RAM | Disk | Networks | -|--------------------------------------|------|-----|------|--------------------------------| +| ------------------------------------ | ---- | --- | ---- | ------------------------------ | | DNS Server | 1 | 1g | 10g | `management` | | Control Plane Kubernetes Cluster | 4 | 8g | 40g | `management` | | User Plane Kubernetes Cluster | 2 | 4g | 20g | `management`, `access`, `core` | @@ -266,17 +266,17 @@ echo 127.0.0.1 | sudo tee /etc/resolv.conf The following IP addresses are used in this tutorial and must be present in the DNS Server that all hosts are using. -| Name | IP Address | Purpose | -| ---- |--------------| ------- | -| `juju-controller.mgmt` | 10.201.0.104 | Management address for Juju machine | -| `control-plane.mgmt` | 10.201.0.101 | Management address for control plane cluster machine | -| `user-plane.mgmt` | 10.201.0.102 | Management address for user plane cluster machine | -| `gnbsim.mgmt` | 10.201.0.103 | Management address for the gNB Simulator cluster machine | -| `api.juju-controller.mgmt` | 10.201.0.50 | Juju controller address | -| `cos.mgmt` | 10.201.0.51 | Canonical Observability Stack address | -| `amf.mgmt` | 10.201.0.52 | Externally reachable control plane endpoint for the AMF | -| `control-plane-nms.control-plane.mgmt` | 10.201.0.53 | Externally reachable control plane endpoint for the NMS | -| `upf.mgmt` | 10.201.0.200 | Externally reachable control plane endpoint for the UPF | +| Name | IP Address | Purpose | +| -------------------------------------- | ------------ | -------------------------------------------------------- | +| `juju-controller.mgmt` | 10.201.0.104 | Management address for Juju machine | +| `control-plane.mgmt` | 10.201.0.101 | Management address for control plane cluster machine | +| `user-plane.mgmt` | 10.201.0.102 | Management address for user plane cluster machine | +| `gnbsim.mgmt` | 10.201.0.103 | Management address for the gNB Simulator cluster machine | +| `api.juju-controller.mgmt` | 10.201.0.50 | Juju controller address | +| `cos.mgmt` | 10.201.0.51 | Canonical Observability Stack address | +| `amf.mgmt` | 10.201.0.52 | Externally reachable control plane endpoint for the AMF | +| `control-plane-nms.control-plane.mgmt` | 10.201.0.53 | Externally reachable control plane endpoint for the NMS | +| `upf.mgmt` | 10.201.0.200 | Externally reachable control plane endpoint for the UPF | Add records under /etc/hosts: @@ -766,11 +766,11 @@ scp user-plane-cluster.yaml juju-controller.mgmt: In this guide, the following network interfaces are available on the SD-Core `user-plane` VM: -| Interface Name | Purpose | -|-------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| enp6s0 | internal Kubernetes management interface. This maps to the `management` subnet. | -| enp7s0 | core interface. This maps to the `core` subnet. | -| enp8s0 | access interface. This maps to the `access` subnet. Note that internet egress is required here and routing tables are already set to route gNB generated traffic. | +| Interface Name | Purpose | +| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| enp6s0 | internal Kubernetes management interface. This maps to the `management` subnet. | +| enp7s0 | core interface. This maps to the `core` subnet. | +| enp8s0 | access interface. This maps to the `access` subnet. Note that internet egress is required here and routing tables are already set to route gNB generated traffic. | Now we create the MACVLAN bridges for `enp7s0` and `enp8s0`. These instructions are put into a file that is executed on reboot so the interfaces will come back. @@ -826,9 +826,9 @@ scp gnb-cluster.yaml juju-controller.mgmt: In this guide, the following network interfaces are available on the `gnbsim` VM: | Interface Name | Purpose | -|----------------|---------------------------------------------------------------------------------| -| enp6s0 | internal Kubernetes management interface. This maps to the `management` subnet. | -| enp7s0 | ran interface. This maps to the `ran` subnet. | +| -------------- | ------------------------------------------------------------------------------- | +| enp6s0 | internal Kubernetes management interface. This maps to the `management` subnet. | +| enp7s0 | ran interface. This maps to the `ran` subnet. | Now we create the MACVLAN bridges for `enp7s0`, and label them accordingly: @@ -874,7 +874,7 @@ Install Juju and bootstrap the controller to the local Microk8s install as a loa ```console mkdir -p ~/.local/share/juju -sudo snap install juju --channel=3.1/stable +sudo snap install juju --channel=3.4/stable juju bootstrap microk8s --config controller-service-type=loadbalancer sdcore ```