From 321da73bf8bb91c6c43b9cf13b26f6c6901347da Mon Sep 17 00:00:00 2001 From: Ai Hamano Date: Fri, 17 Feb 2023 16:49:36 +0900 Subject: [PATCH] Add ChangeCurrentVnfPackage doc to user guide This patch adds Change Current VNF Package document for StandartUserData to the user guide. If StandardUserData is used as UserData, Change Current VNF Package can operate the following resources. * Change image of VMs * Change flavor of VMs * Modify, add, and delete external networks Implements: blueprint enhance-change-package Change-Id: Ib91c1d41dc35cadd0076e9c73e252bc8abce9aa4 --- .../etsi_vnf_change_current_vnf_package.png | Bin 35166 -> 39722 bytes .../etsi_vnf_change_current_vnf_package.pu | 2 +- doc/source/user/etsi_use_case_guide.rst | 1 + ...nt_vnf_package_with_standard_user_data.rst | 957 ++++++++++++++++++ 4 files changed, 959 insertions(+), 1 deletion(-) create mode 100644 doc/source/user/etsi_vnf_change_current_vnf_package_with_standard_user_data.rst diff --git a/doc/source/_images/etsi_vnf_change_current_vnf_package.png b/doc/source/_images/etsi_vnf_change_current_vnf_package.png index 1b973b2d2155bf3d4688ac25310c3cbf0fa7440a..7c39059aef38b94edcf34f28a53af4254f323cd2 100644 GIT binary patch literal 39722 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

{Hcu zo{590=+hhpHxcE@5z`Hu$|d97mGi$vs5Bf*Oo41=AyI1bWlUj+p()QDC9YObpN8|jtEub2l@rw@atqAoyayWoFX z-(il~5O8q&dqxzQmm(N9gK)BC;8eD~Ynk8?IjyUUJ=BkB z&bjoWdO`=a1PzRK&)XA)UIQ3PzB%wZ4MQUOu3OC{m|gL$6399@aP-mV4-Dr#uI)Se zmKGJU!@GO=a9P5jpI6^@dv_O5=>p?sb|F+^s5&h~n|B{6r#!OT?iUS6PP_BggT;Ul zmbSHDTHgZcm8nJL4~DA zt*E*Z8r0#LJC=ruO-xp|^qX!9SaL!P>W5NfN0@C{C$-@9+WPviDqiQ@gI7qALy+t) zg*8Q#_(Sw2>4Y0LUAYzhb2e9p_#bTdn4D~zG3`SYnm}9~&eE3QgUGvo&EQF^3dWs@ zzs|M=8%&nwUJ5nD{K^~=iT4$goA-T zx@7jl=R&!l-J9JU7TZBM!E~<9+5db?k)d|&RMD4AiAw-y`})sYUnV#+ta8>lTy_~} z9iP-uN)kKZXka|7d7s%8TxdHGn%0 z@PAN4y)7bg3|c9u*R(CzK&2`V_rI5wr(sy298D*a&!eEuq@<*ztW0{t^#n~+^a(5% zut#BpQ%sZhqM{2Jj91VmD7LYG#l@u#egY1yBz_t@lH>NFi@*od6d~w4Ky~-9^uyOc zYxMtqQ^c>ur44Ec+nkc^a$8Mmi9AR}Cnw*gO!7y8n}rDVi}|<7$+yLJ|L23{x{hAA z7oYDr#|yHphMR0~+)hfH^!c21hyS;R`7*8|c|3yP9=TJXky&x<0mpJpj9`a4GO@wk zY`WaU=@JuTZmc~4qsi*0JV4aiKx$$`r-izUrD@9 z=aSP-Ed%QuVfgIl|F;guWc6j~p#2N|)H26?l6zLCyS#CU>L_WEJ*Got#+jH$Ux~s@ zNzrWkO>n~@crySLHY^e^kt9c7Lc0D_L&s#7h~UU~0<_t2OmeTH`Qa)Gki8+%Pt?^% zF;!m=5}GdOFWUZOM@jUA#C+0)FO=J*Ze7@}#p{_i&jgW&J{Jh)oL(F8-pQxbH*G`{ zIj9|Zx@a+8INrZI92FLpwNOh)a?QzV6>G%)p@Kri={3*4wGBBIuFcczJABWZs@G%f zG^DmJ-+rx(%UGj{Y`D3S)=VyFoqd}(?Ij2&zXhi36?}9wHfBuo*}Y|Rm6d8`Vwf;@ zq4(kAIpUVTvYO9oZtlx53o|UVZq9u5U#%z`Bs?EUhR^?zR5#AW@SdkZlc~==2YoAf#s1lwDnHk`Og&b}q4V zrFm($xj8pCnVOuIMmsUvP+ucj&w1x&!oXupT6!vn(a!@Txy^6ZV{S#~dZ6sG!DdV= zU&p4*<^Dk{)yn63*?r%pd-(4%vP}0bJ{(sRG_8FxdCzjwAgy*f&*6al7UzyzLDm&n z$Bn>q>Or^Btnqfb*-xckBpT)nGhJBlu6pTc80`JJ`6EPJeA;v3!wnzirtqa5th2bp z6!+Dddn;=lf;^t-XfiG=cclz8$F#)Vg5_+`o<3jSR!xZoCkY|86M)&A0r8rxE;7xwh5gYwk|C4a%QT(eTv9?RK3w1rE z4`&ZqWg7Z8r`C~cYg7+@nQoDfMrd4#8tAv>oc&=?PCYYZ_48EJEdGLg_EwXoU`FdL zhN*R>U)L&ZG)yXYDt&iO6kOdKPOvhhC~kaXDHWTx%FmivNQ!caj*dpewLkc_eWLAK4$usWn>aeI z;zww>H`J5%n-O5D=qjwOK8^3kcbVr!5DGtAuIHn*=9JrkONcvIf1BvywmTn?vBx_h zS{14!AEqcYY&;RA^ZO`LMe6!wa_+mnb#nw=72BWcG(wjr6vyP(tx|CLYKZCfmL#K| z&P|;jM$+60K`IfrP4uhoeA+a7d+6@;CqxJl(;d_??Y&|>ws=$?;d#Gb+J(g-w83Jz zYIM{wz*MU5_I8-(jW|m;LZ{Ap{pFQGZUoa+22o;R+4L&jQBUu(k+6sF9`w1zgovJb z74Dq|#!JPgh0!o>PEuMlaqpJ4L^C~}clt!2LV>vGpK+*NjaA{_ef94ZM}NBSeYW=D z$zLYNYINK&#oidS=EL(rx0>#N+rxGQKrk{~Z1I@9q6+pSj%hoU^WejEXIc*F<+d7r$kIC6BrRVus7Eg6)kx&ffO( zcVVrdy}11WF7?ZokcKa)Z=YI!yCway#q~rA5x`9~|L(`3`o;~n6^@KJao9ODj9OE| zHxb(pdgg>F1qp+{^gPx&&{|2^`g12E?%IDZIBHlZa-1Fb`561%ueFXvv*WWbd8W`% z48Oh6rKz%4JTs0-oZtcXBVr=_@y!eKZ$=22*}w07^Ih0WfToa>u8rvkuPxNgaW&EP zQ@?#&T|=<6YByWKPjGQ@cD}}pb>?@GKmC09w@=CSwY!?>iCty{fs(sX zClIeHH$SK)xUhsG>1!s0*A8>eNb5W0hLorRMeHm{M~_?)8Y-;ij!sUyVR+D0Eojme zc^f_J77(&fzF30Jau}SjwPkmnF~I%c<S@rw)Xyb@}7ldn^K2` zSQLEN79^$LSBB8@amyKn-9r(DS=S4$D4OMJQmXW9g4P!CpB8v4*Z3Td^@JSkQ(Dp zH)kI`Gd7bI6bf%^Z{H*eM6_HGoxj`i!Qj8eOffy;isdhzCb0DZJ&scA76`?0X!UkPsZt`A!Qc~$1!`YUPHC1~t z@kV0%!@oc2pFVF*;8BDhJ(yHAs(uk1knVnUo3aizZRoDNwViGX$yxdUJ(l&$h68O$ zCOI#00|ghB$n>fzraQqww&E>$#DR(Qp8JI(2dn4tp1}`e)38mJTUj#RS>In_|G^OX zw(QyuG-b@44D7_^@uorUu&h{jVu1EH0*av<8A9^O=(~A zh-ArX7aJA=&nOTY&~+8K{c2aBYiby=)X#(nps$d0P(n7nqJ1aReu#GmB1c!x$1m($ z=X^0LH$yob&j!X?nJSJ;L4XkXxD?IYw|1*KwUob9sWHCasL9Yw2IiakazY7D?)=BE`^6^)pf~k$H>zn z@ssQ3(`V0^GmgW!^SeBWK)|X3271sIad`L=!F3`ZrZTPdmGgX(9RX!Bc&9_fl+gB^ zB(!o6GTn#jOB1wkAP`iI#==8P75_3KhlagtpLgc8HKNtrR8t6cNHX@tAqg- zO8qa!I5d#v}S{v6*6DZYT> z`o2+CMlaci%?u|qvBIR(Pn&)wZ~ulRK_SOc#WI_BMpu> zr|)%j3f(Gmv^}5g zPIATc!~r!7F!rs7iqv?a)+W^QfmFTjNIYK)WpgTfI!0G6E-p>&XHa>} zZ#EywX1##gMYo3FeJ^o`EF%yaP;(nfLNCw|Mb08VjnEdjF@eK3Jd$m&-r(5&5`POk zo7ip-=Bdza7dJtE)%gKi?`fUW3rN5w@782Nb#@<$L{NC2AVgw#I7bf`E2`BEfgWN0 z7iOP~IGFTIvzcEyr?H}BvIL(2aDb&JM@AA}_nAc*bLbcS0RC~PU*SMk{Dj@U+4mgJy%~s(>Pl zNofiRx!Pv^vOp%}x&;on_RvQc>eZBFWXysI0X4rxU|*JeEEXQFr2$+&tTjzd&H4M3 zWmC%;K0lxd?B~y)`T49GduF;Z`r3p;i(mrA!1PvyHBpXfZV*f{gvG>YhCx(e8fLz3 zmf^LuzJ4vrI15-PWScZNubK6wbh3T^AP;MgRFH(2cm$k{z!(-KrGS$HG7!0-_g=Y!Ud)X9&15u_HD42qt<0aZfuFhtpB zek%#@td9Z~Ia2SVhgfrOc#2}cn6~!Y5 z_SazJvy{;QQs~XfE)1>U+w*aI9Nd@lqT(3240=RM$15WK|bF*JbYJJ*zH$$oVdq6 z+>BDCvdZDc{@2vJ-MSqPr-Q!{;yOP|VjsaTLjEIwYTr0_s@tTwI)-NF>;b z4dUJ3vlrZs(PT)!qhGrPywDcNg5z1i78V4gi*pN;m8--r+WO}cj=^Ju?IW*3_9^JY zX67WyjJ z%cid8o(D6o#*CG`WFYhkFDf?~k+Vky9FfO}K)GYh_0~KK%*kZ%&P@}TPTHP*u7G*j zh{hXE0CpHwW2~|r`4L71B_<{gze4$fbzfh6ep!2E`qK_9yx2X^$5nE@{?*op4YBPN z?hisi9+*!|2o287LvnQUt7VL?QLMVnn6**>Dh4grips-hB|-GhJn*FfGt5 zP610jvb@3qi4l12UlS4_#*{p56hY`}YdfutVw+I2V@u5U1~^AVMfH8Oyztr!*BFdv zwKX#fNx3KLNDW#QsOvc3IEC->5a@0NSajZu?YkB*WxbK!(unE%7NEZQ@ja~tcO9iMdR zU_Rdyac$grtZUaaJby^tR#Q_e@<#6mQQ$(Q#vmwXV7SeL$7Llcn|FrTgl2qiV`A%9{Q>(znL3jc&idNgk9H?x*sHUr1hNl(Cxm?p zt4N|aeeD1K;Ek`1Z@iy$1K`__r6K;UHkzn1_V+8qw#B?FPUt+@q@Lje)8Lej^>@Dm zM{uI~`wQyz1hiBx`K=eWAI5P|*YrLo*PY}=M&~zsqQGD=QBQ`lg$MtB+K_$iQQ4ck zqYpk{`jHL z$=f>NEqve|v*y$;<(mow$BX8vgaa`a+eFgW;n%)z5c3)I{So1s7TrEfaoDb3ioxZa-6v?_+TZ_s-gC)E!@JC7YG3zxZJ(2cJ2esdMnn zZTrJ_Nr1|4s(z6)i+E+weQGfyxD14w=kVuDNie_ixVXV^lmGT)VehxUoR2k}g7^Ct z8b4o7!OJZic=U4`o0#P_n}z~QJZuDW=s=z?RHuCL;st0(tIErbHgz#z7XzGlyvH~S zuw?`ABB-=L-avh+y;kAOgN9rrI76*b3fcWU-un$A z)I;gZz!QUc_BObcJFmTdwA#`@@EbzwRamt!(CT6RPw)}T0E-d;Hq9p+^%%Hhku<^; zplStlkqX#!9Cae8Pk~=A#V4IgQ&66KueP27i*qA8zzG19FQ9E2u()hFu*{<_&_L?p z;h{F4Dd~4PU!mL@_U+&X4tJP@2F6S{?SJkCy-C@G`7H}*9)&fG z6wF)8Er@Vs2Rl2g>*HrjIQRPZGZH&{s2nPIrDQRlB2)`&Y;3(BU*Q;so@ke?8t`5N z*{pWUXOM+~S$oV9S5P^m8&W|6DKtCl2@?b=bV(6n7TG3#& z){c(%5YoSu8pvVcB`_&k*dZ^wC?DrKz9de_WaA?}!3u+$*Z>yrtdU)iNlDY-mxTei z3f0J(EfZd?uLGO-D1}%J@QDX&RpgIG>X~R_3@0q2p`T!GS!REe{k;mQYPQL|<(;Q9 z#UyaUx(9aC9K4Qo5&XC(l~xQw2Je zEd8_PSpX*`p@RKUdP-XyykNjX_y+US507qke7B>Se~ybA0nN1$Q$$d4xxNN7anNzz zin+ZSAZtknLEDW0f@}{{mA8Vd!C&Ag%|~YlloZEU`n+EiW)nCpTB+uDoaieYY4q(vYF^Q%kxlv^=u7mGMRpu zj&`@Y%Ex23=_I6V9Yt85y@$EcRt8;LK<=C*Af&{ z-F=32?yo8wOy*M8E~yBh=GL7UDU$K(%F6ch>`Uh>$N|E^iEW)0w-@p=5bb0|@C8n8 z*a)cCxZYBfng}wyW;PFV3+8t23VELjF&fkKs!~L@EJ{~AFjHgO{ko`d1Oir7BDT+) z^6{^)T4GfZdSpvN;{IMs_qZ&zd#nrqraH#A9ZDiqd1$bH z-gc8JaLcn=KiUr`4xx*Y;n23|E3bxk7RF1O6gQCA!=+z)$)l|jfR`5kXc!)?2+33@ zT@ZgM9Qexv8J~a7ZEns&e0vWeEa*ur;1DI4)$y#2^p+E1pWKAG?t8A`wyQwI${ z1*Yns$^pb<6OF)Z)^{&+v~h4vXQrnQ@z&*)mD2>QA=CGTHh}8d7b7ePrT|EFvM-UB zuwh7vD3m}3G|+9hI-J8=20il#8NZ1M?T&LharGu}(|e)m;NSo)A9FSxtKbCPWk7l5 z2edlmJclevV5&kxF#ZoDArx#sw~K^QfZV#+o|6g$o;HPI&1 zGWuUPh=_=8+=!Oc69lpvd;UV~hgV0b3!U|?rI@fVBiGB?dU~Lxe09=wThC8r9f`a< zlTGF5B~8-I&4)giWAeG+?LP4phVw!2AXWXoj3W0am#HWzVFIZ9DevL&F*r3dg^nu^ zJ~Q(_3{`CA6caTR$ta+rc?qscK!8HulH%R?dLL`V`k0TgwB8HmhGRyX;#1(u^K7vID0BRVF!kQsRL77!4 zhTyo|hn*&0NJHWrML3`csyui}@M$X{Q@l{5NKY%PS;C-&nz10%{NU z??2l00D3d2{`57|;4U;>OwiI_zkVIbVsnjO*@Xq`rr3@|4Um-h_z5aB493>hQCEPy zi;Vd_GLC+c`G-YX$Q@cJ;QX!p`0;tXhq=Q|)U*Ejsor=XYv5}BQ7|_f+t-c`bU9j} z(kYSaCFL;*D!&=#*VfpGHeEjd`bG*&>KEbwA6EqqP7 z$*`b*r2c#qurY||QBVL5gj|0XQQ|-as5_}l#1J;G&DFZ?Dq$s*1c04rc; z(3{H+g6W0D#v*LDK#^Ax9kefmPuJd)dIoQa-Gd*CnrvZa-V03{3@3-ll5h7J7h$Bt ztJlL+4|G_-g6GTfB8k;E*>IBE^GIYb`B!4|z0g&lpP-a3U^P(&rs;5U1_cK*dM@EU z2SgXD^uUwYab*WhaM^Z|_tzgl2X6qSEmJP;G^9b8XomDfpwP_kGKRXcVw#6r!*V{9 z^-`L@JFg68K^is%)%u5@Kx0dQD0GXz1dHYFEzUoSelUo2`EfHO{L)!~w;WfgUVTV| zF}apzW?CSW?nsCG)8uo3P~05Ji~0C*59ll&F%qt)VjLVuz#CTi`I^PwA^pB5TB=it zd9zbE45-NMA(%qI*~>lyV}bTVE0?I<0nFGopJ{^At9IA;ILbu2i23RizrZyRGA`?Q z*f9<`XlVR_)&>AB5UH9~v!uZ#f;2-FQdyZ>OgUh%-tFw*Ky<6^zCl(Hj3a%8`z@#l zV}fZlJPNefK*g9soKRH()@V+FmWs)Lhb`ml43p>GWF2|*TY7+4@90+fronRFSY4$g zAz|JRV}$iS7>bY2=vlCfH5I$Te;cCeU4DLXuz7k@f~{l(1eruEng^qP6%6zIs8?+z z{9>3{fL0e|+&S!R?>Sh4l*(}u`}+F8@SC+s2HmA=m6z-%)2A(UhSY94y$(4aA0Lj* z?;jOIt})ECwxZzzO4AY%4KX+C=mG8iJEf!o`CbhT?9{6zaMIe9H#VMuxx3C09Q}-q z;0xEj;+)@vYH;W1Xq4Q2o>jw*11cW=*6< z_yo`j0=KOgm{1dP!PotTpHYi5x1sr>qsAiU#8NCL4C^=8`bGv^Y#9|B_;fybOG>!T z(LarHtbNaP>2--V+yg+hGB@GudCq=(e9Q<(`NeZOBQx}Ftg|w34StM|kDnNQsLL72 z4*S_8{;OpzLx=le=*Nk%VW6|;n22h_@jo2rJ>YrG-$hhvD)L?9!}AD&dUbfkZ1>um@xX94eq zAT@K<^5(Ps1s?cz=MhZ$Q(R3+2$&$fl!`_!x}fd_)PT@Tm)afT%aW_%&~j! zjYWx?+4RGQz{bqL;#vS}EII=9x4S3=6xsSO*;O$1ByI9N7IlpJToNV|mz3{jBKvS6 zM(tQ5kPZ5r{EJbrq%Sy)M;gjgY2qGO6AaiVeFpo==*0p z_r$H(RWG0qgGaZeADLSR!MDx~l3RJ?!t&MMd!m9a_OQY24fS9S#ncp&9W-=(TNA+E zb3t*YiQwiN1bt~{__B)5sXQh)t==HjKFXn&hYNGQom%m;C{ zu8Pz}_Y8S1yTYLeKga#O0g?Gc5@Cf!5s$-udZj~}fr0w@v0V=R+QI(5DOb(MswzP2 zch3nZO1AQ{PSUWY2TncChovino0m%0`5Y7H-;q%@p(!?|O-{)uBytGDh^hVSBsyKI zV#~C?mA1)Sjg;e^lzi+Q*GZArrjcyCPQDnPf#0-CmZ<&rU_i=k;vWxBpic~jLG6J9 zPjZ}$#WJMJ6{SlA!e2GCpvwh@|M5ZtEA&?wPQ+u+j%JAs!{q1C80WQ7oqrRKpSPV@ z>#+7IF#6j}*YecQGdwmjE5Gs51sGrG=`iA=>8|3ra=bsqY5DzdXSd5Y{`!J#Z|`Z; z9R*?V#Q6A;|Cnxy$iz$|1{dma(v~nn3i4F7V$aSi#UW`B@NS-8n0<}RZ|SjMSs`fM z<~lj#rvdMzdkQcEVo|zfEJu-?;_B5MNX-eS7z@E`cs_ji)As)6tU-}Bk13@~))hEr zXE`21uSy*DeG|Im7<#OIwZdyz{qWkbE0-EdcVEa?XG1yRr2A<;PD8`+rh>XIwrp5b zMIjl1Ib@t2p9x{!=vQHtyG@3jYR@S z_LbjUDgJWeM#U2O^nOp!feI#{%jjuJFw?3_^QB7^rSh^;>Wsi$LRm+Snw#jYxQAw6 z6S48%RBnLqE>hE?ZZQWox88^B@JR5 zAb_MTA$I~4#IB4zRXaOX&=Zl#ZX9m=F?~6tH<5(Ff!zbQYLD&Yqe{+(oZdygMVqv> zQBD2@Os|K2S-(t}Ck`xT?N%~?G2Ia$MD+CZIJZIO@nca0Dtsn%F&}Bmr`~r?#fs9s zVRWFRyMX}S@Up}POW(}%iwnOBnXXS=63fj5;{+~OzJRe-=jTToFljbu0CmSxwiiB= zv#CGWF8E!qH+R)y?>c2O-<_L#AnK^!`6%{dPOts%zei1L6~xyUVHk7H7Km?__WfGd1iXU7_u%~e#CG3z zHgECq-oUmmQ+=QA=H{QNa<3-Obl>W;fc(kt-@muD8AFdcgl`mbJ$F0Ucmhn@^ShHa zHBaI~`qQa}9AoZHU6edbd9QeMVL+!-wO5TSTAF(eeqoi%^mxSfHY+Nfw~!gq6`q~X zR~?Zbq;}4AAbICO1HZrg$(b42r@6oT(X&**s_{2W^ffhInxAK6$z@?~`sDN*_*?Se z3$IMg3~|$9@o;C!UkT?Lk90gV@bkF$Uvl9dj>$CCkX`Bp3Gq@yRn{w+}uLs;<)r4FVDbPRgVhHGQV8u0r^5)f*NT zKBOLy_MjS7GqT9KMOJ6z2JTbWx&wL&#UjLoF>K;4$fU!TawqbNgof`DSh0YnqkI_5 z-QnH>A!Aj2&0RB=z5+e9-x}(4p23L}P3~pANM4{Spv;RE+Ua_l{tVx($p^~zs;E&? zjyo`n9<^)n!5OCnP}a2N-Kv{f`M2)0BOd1}**iKC%ZPcKRiH7gW&m;@-SA{?!{~~; zq@_b6vHI`R`Mf6N^dgIWz!8@~6vE{(6jQMpg;7bV^kbNYXvc>d3@|VlIi2(Owd|3V zJ`*4Bf^{5LN~*$Z)V5ZIYXM7utq;lD(CiLXlb+$t)-~2fv;Fvs!$S`1S;Sc~)xEuy z9z=>^@7V~<)B;Qu&L0>Y94_dM3Ng4W58s-bnnKrzI6~%5&l|2cl-$+T%A{lOxK7Od zhxYMhvQ8+l@24iJ(QcIwI3I|zt z8SCWg@>3XbR9;r5UGXfezFxEwE|3lu8kj4FFgd~{dZyov97O0E1)l8y18g#r;e9OM zCzky;mO*`bZm`W3A%k(>oUWL=`dlh0k`!zLDuCnQ-w8zp7g4ysw?>vKf~OCW@9x~6 zkbp`bz%u0&J|hcFkr-B32UYZ(oF&phI70bgw{s{qMv>)J)h2Xe2CGo}EY-GY&L;1j z83x2DNRUF9*1)pUGgvor1d(D=b;fHxNDuA_;OO@se{3EU5YP@4^sYS9;GyqwGLh9j zu&b4ol?f5BJ{Swt^Hq(&Rm0Q5l%m*+uOsPX85gat0`_GN5J|dTblu#h@Bn!ZRG_O9 z*bwDe93olG7t^)&a4U{Rd;k7*XkP_ffpT)5!|b1xXc7NzHgM(;;N=}zBc*UiLyk0h zh${9xl9wmX2`ki8{#eHCv%`|FoEn^)n+tYkaZ5K44VYoqs7BR`l*d$Drv6?ebdTRu z%(!GrBOWD9pmP((!a{Zj5PjT&jF}c$X+1?#l4S{nLV!3*a>UC05_wonH zt0x^DZ#lIG+lIKDvCgWkQ`;+&yq5ZDgDkiVTq0s5P~)ulEpxpbPF8}qcU5$C zbzysLOH|s-h)g6aSD=ZGc)(J%{YlW~7l`$}x3>s1P@emrS4`1kc9 zQj4_H?(M{Wq~m5fe!3n)FL3?$$0S$-E|Q_Dp{veY|0eneJi}wO zkU=2WVShb>sF##PfjBX7s>W~dB^9)Ji!rl{e8HZ}dt#XNV&wRvr4}W3W@UiPv3w)L zgxpn#mUdsC+t@UD9yzQ=IlWC;MD5>XAQ0!QM8MM$imGNO?{lA)K)3Hq-B?*xn&@)a zYPJ{I9V&KWK)N<5t^Z;!xIhg4L=DP)GJ=JLW%wpF$089GcLiaZf?@*O7)W^#GL#}y zS0#v9@Ve?SaCKpskrCfJ2@E-z69P{6=gEQDFkTnpyK&&z2oxZ|UE+Zj37235DnOA> z(3}dD9O6BH)`@_%Ch>4QPetwpSfC2Dha5cXfkhNqB<~vmDCz<^BPn>Y zVO+3h0nUFBt`ex)qI&l|i&Z9nrx`#rEil{^<&L>JLlvoSk)ihP7!HaDCy%fG`@~oV z8PxhA%`w1pAQwc%cHGw1R-wBfTI)AsWfJ^uhMd@p8-u5@8gG>{1s7ZFgYqw^GFJmo zxj|{OF%R+pdZ+i0UkG)92~eLIYwT|%Q-K-SJBy(1cme8^JKkTnw6WPhB4Ns8s1*Yv zBkHO_U!e)44ULh!RdU!_wYA`&aBSoZMXaKSD6J_YGxK{;dW8mnIx5qY z@xA^tx`*Ngxhf-EU4s&Emsp|1!Vje^;4dr2CflbAY^G5B$Obbr^K^sT$d4a4(BZ5Hci>0 zzTDjQyV<6>ra7j!pr)bu$@w?g^=7EAfj#(^+ht6fj3%#jC(W3r-BV`)9PI3ca1ha3 zm|Aq%a+u73um#>&`1hEAHh&lmC5@_p@ZL4tw|7qSeK(Wot*?I`i@j2GqcL{*#0=y( z`6%t%eBFFeme98JXpxgMFtX3Wzy>lkH8qBkH+Uen1!+=NWi@%1eeH_~U?&hzT8 zSw5Rm#qe8$IyQGKRs=(HbC&%#M?4%#AOFXS{|jzECW- zCEl1Mn7x_5G$}2N`hnN$Cw0zp%m`_wuu|-v-QZ=038X*MVECwptLq|#TZIp3EZ~fW zbaB0;uYm@FQ#TukI;yLyfeA$^>U4FfGR}B}stI}K${H*mWQv=Ue$PGU^rxZU+>6P` zFo1#+V9-XB&!}tt#RthQRNn5PqqtU}=J=!UkHcWVQ4)Hm7VZ;XPEH%p_k^Z^wh;Kk zE=Y^(KYbcXxaQyefQ>Vg>0Bfl2n}KFcP`n6ds)q5E zFtv2Pk`%?K4AavDIB8cn=^v7P9qnDh zy#`92x38l?qe0*x9J`d=w>*oJIBg5A}M(dT_#+H z-^;@q09*ukz{|?2=o!<+Hb@SD=Y?C*2B4S~U*)#=PeN>C88DXuZJi&>p%oe*c7R_{ z5Jp!3c=RAd10Z9|l7v!=+8;;&J*xvH&L3n*V689n-fc-nSI3ITnt&a8h>Y~R`o!-t zsAD~=x0I~_=*%g+jc5r#s-pr)SXh|;7Z9-~<7Q5RbI&ga$`uhyOUuAH3Iw}){v}*G zAv;OkOA5sxFNM?v-rR$!+bI_d!w69+!8N09BXT}j{s?@^a0^X3p`I^r=(*aB&P}uv zhAt4Gjlz+Ld7TE!ufkEU3j`$e9dNF+k;l@WMl8ZV=b4;LEG;8eQfYs{+~`0-82lUD zqFk5I($WH-&P$j%0TcMjPeCXQ!}T;d;$Oe!1N&8>Lg4R#fDie~umTDYJ@`Q6FnW`vlwNyB2kmrhw5Gi7sHzc z&&x98c(ot_1oWB7{hiC2RD^(#74wFZAv_<|pI`>|#ybQif#yKQm;IZ7KZ4xlWOp@y zHt^X{JJf_7jD-B^)$mefH0;>#lb=56aHpVH2EA=iETs>NdJyjwB>nMwcux6b%f!u~ zPy{}ND++GpNL}MKNgQZ97!>GVV)=@}< z^~UZQSx+lKk#E}o!=;;kXnkYn9s`d^u+B5J8geUvH#g=-pmz_rt$A}D;xh;Nba20kE;dQBE^s7lHf_-*hd-z5{wYQ{SO zk739Wy9q@SXg#V!{le4k!^8$tSle6Vbr?_lyuh78VkT&-64VnMRW*R*xx2nc-Y`+C zoVc>WUInGKKX~%s53wU80o|w35wp5#wDpV*8 zQbcA_-0if^Y7w0E4EWx0ElV6MG452nSDqg&lJDj~HF6-ONvaN=D)M{}mAFAhd>Y(3 ziIhNEdfhG)9)^m+r7)&TfwFeGQLGesTfKSNNvaOej?hiyg(l3%k`R95CSjyZv~e#Q)scYVShh%N283JsHkWaS?lfT zC{?NwC*s(r6P;`nTba&Sv}$gk=`5R~FVraP>Jr{oX{n3&DgpepzEA$qh` z-c})Fji3nv9Fj|^Otf>%-j$QLI;bznCUGPkp!Ih!kZ1?6cWu-?XF_+vKbw1&!QRgK z$?!@3H6t#^o5ARwvJJPzjjm1*;GK7p8%R!LS@BR9Voko{nPnNF@kWisln$I#!w(dK zbbQ>fnkjp=j0`E^d1%+s{D?XnqXAu;JPh+$*%OmICJKn?JrAVnw25#h7*qMK7w*8+uGtwYjkWHq}DvKUc}bJ>AwxM=@tH4Xzn!2P^cB+^B<{14ThFFt6 zMcg^ItS8XDJ2F>8;cyo_9Jfe%s9@L_Z}gqHhz6S&drMvDwM!hVWUk8YBL2_c)2H3* zxP<$(&Es@pBVy`%x{+OVjLj=og&>?~?rThU%H$+86F*hDvjY5vvK&T5jsf_Bk5T^-l%$~PWrv3jmsQlWKkdT)p;C9th-(0bd?%4 zG(M=>Zzdh&)aOoUWwpJK3njpcpeCxh$^X*VPJ>y<8hL6&8!=R|2eIEv1c%;+&XRRsksw*^wOYAuIfJtA?HkT$jxn0PR? z^8(T=^emd8fH~<06l^V*Wj+uH=M;p~@Yh&8%>MB+gA6{JAUQVkl7W9WjL1ZnA_(rj axO6w@H`$knQnO3&pZvXtvL(`n{{IIyJf0K) literal 35166 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

&X2u=hHvij!S(DDN+#>%R@Q0SOkCN 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 F{U0vPAXWeX diff --git a/doc/source/_images/etsi_vnf_change_current_vnf_package.pu b/doc/source/_images/etsi_vnf_change_current_vnf_package.pu index d609a85d8..762441733 100644 --- a/doc/source/_images/etsi_vnf_change_current_vnf_package.pu +++ b/doc/source/_images/etsi_vnf_change_current_vnf_package.pu @@ -26,7 +26,7 @@ client --> serv: 1. Request \n Change Current VNF Package serv --> cond cond --> infra infra -right-> heat: 2. Call OpenStack\n Heat API -heat --> ins1: 3. Change the image of VMs +heat --> ins1: 3. Change the resource of VMs heat --> ins2 ins1 -[hidden]right-> ins2 diff --git a/doc/source/user/etsi_use_case_guide.rst b/doc/source/user/etsi_use_case_guide.rst index 4b56840a8..78fd187bc 100644 --- a/doc/source/user/etsi_use_case_guide.rst +++ b/doc/source/user/etsi_use_case_guide.rst @@ -97,6 +97,7 @@ VM :maxdepth: 1 etsi_vnf_change_current_vnf_package + etsi_vnf_change_current_vnf_package_with_standard_user_data Container ~~~~~~~~~ diff --git a/doc/source/user/etsi_vnf_change_current_vnf_package_with_standard_user_data.rst b/doc/source/user/etsi_vnf_change_current_vnf_package_with_standard_user_data.rst new file mode 100644 index 000000000..d168dc7ff --- /dev/null +++ b/doc/source/user/etsi_vnf_change_current_vnf_package_with_standard_user_data.rst @@ -0,0 +1,957 @@ +================================================================= +ETSI NFV-SOL VNF Change Current VNF Package with StandardUserData +================================================================= + +This document describes how to change current VNF package for VNF when +using StandardUserData as the UserData class in Tacker. + +Overview +-------- + +The diagram below shows an overview of changing current VNF package. + +1. Request Change Current VNF Package + + A user requests tacker-server to change current VNF package for VNF + instance with tacker-client by requesting + ``change current vnf package``. + +2. Call OpenStack Heat API + + Upon receiving a request from tacker-client, tacker-server redirects + it to tacker-conductor. + In tacker-conductor, the request is redirected again to an + appropriate infra-driver (in this case OpenStack infra-driver) + according to the contents of VNF instance. + Then, OpenStack infra-driver calls OpenStack Heat APIs. + +3. Change the resource of VMs + + OpenStack Heat change the resource (image, flavor, external network) + of VMs according to the API calls. + +.. figure:: ../_images/etsi_vnf_change_current_vnf_package.png + :align: left + +Prerequisites +------------- + +The following packages should be installed: + +* tacker +* python-tackerclient + +At least one VNF instance with status of ``INSTANTIATED`` is required. +You can refer to :doc:`./etsi_vnf_deployment_as_vm_with_user_data` for +the procedure to instantiate VNF. + +You can refer to :doc:`./vnf-package` for the operation of uploading VNF +package. + +.. note:: + You can deploy a VM directly by image or volume. + Therefore, when updating the image of the VM, there will be two + cases. + + Use the common VNF package and the flavor_id to instantiate, + and then use the VNF package in the corresponding link to + execute ``change current vnf package`` operation, + you can update the image of the VM in the following two ways. + + 1. change VM created by image to VM created by new image + + 2. change VM created by volume to VM created by new volume + +Change Current VNF Package +-------------------------- + +As mentioned in Prerequisites, the VNF must be created +before performing change current VNF package. + +.. note:: + Currently, this operation only supports some functions of + ``Change Current VNF Package``. + + * There are several ways to update VDUs, but in the Antelope version + Tacker only supports ``RollingUpdate`` type. + You can set it via ``upgrade_type`` param. + + * Supported updates: + + * Change image of VMs + * Change flavor of VMs + * Modify, add, and delete external networks + + * Unsupported updates: + + * Increase or decrease the number of VNFcs according to the VNF + package + * Add and delete the entire VDU + +You need to upload the VNF package you want to change to before +executing change current vnf package. + +Details of CLI commands are described in +:doc:`../cli/cli-etsi-vnflcm`. + +For changing current VNF package, you need to prepare a JSON-formatted +definition file before running command. + +``sample_param_file_for_standard_user_data.json:`` + +.. code-block:: json + + { + "vnfdId": "5b09fc55-5324-47b4-9f3d-70d1ca59a765", + "extVirtualLinks": [ + { + "id": "ext_vl_id_net4", + "resourceId": "1dad756e-a9d2-4c49-b490-d26940c6cbaf", + "extCps": [ + { + "cpdId": "VDU1_CP4", + "cpConfig": { + "VDU1_CP4_1": { + "cpProtocolData": [ + { + "layerProtocol": "IP_OVER_ETHERNET", + "ipOverEthernet": { + "ipAddresses": [ + { + "type": "IPV4", + "numDynamicAddresses": 1 + } + ] + } + } + ] + } + } + }, + { + "cpdId": "VDU2_CP4", + "cpConfig": { + "VDU2_CP4_1": { + "cpProtocolData": [ + { + "layerProtocol": "IP_OVER_ETHERNET", + "ipOverEthernet": { + "ipAddresses": [ + { + "type": "IPV4", + "numDynamicAddresses": 1 + } + ] + } + } + ] + } + } + } + ] + } + ], + "extManagedVirtualLinks": [ + { + "id": "ext_managed_vl_1", + "vnfVirtualLinkDescId": "internalVL1", + "resourceId": "4daf6f6c-8f19-4cc6-96b5-0e3ccc9c7c93" + } + ], + "additionalParams": { + "upgrade_type": "RollingUpdate", + "lcm-operation-coordinate-old-vnf": "./Scripts/coordinate_old_vnf.py", + "lcm-operation-coordinate-new-vnf": "./Scripts/coordinate_new_vnf.py", + "vdu_params": [ + { + "vdu_id": "VDU1", + "old_vnfc_param": { + "cp_name": "VDU1_CP1", + "username": "ubuntu", + "password": "ubuntu" + }, + "new_vnfc_param": { + "cp_name": "VDU1_CP1", + "username": "ubuntu", + "password": "ubuntu" + } + }, + { + "vdu_id": "VDU2", + "old_vnfc_param": { + "cp_name": "VDU2_CP1", + "username": "ubuntu", + "password": "ubuntu" + }, + "new_vnfc_param": { + "cp_name": "VDU2_CP1", + "username": "ubuntu", + "password": "ubuntu" + } + } + ], + "lcm-operation-user-data": "./UserData/userdata_standard.py", + "lcm-operation-user-data-class": "StandardUserData" + }, + "vimConnectionInfo": { + "vim1": { + "accessInfo": { + "password": "devstack", + "project": "nfv", + "projectDomain": "Default", + "region": "RegionOne", + "userDomain": "Default", + "username": "nfv_user" + }, + "extra": { + "new-key": "new-val" + }, + "interfaceInfo": { + "endpoint": "http://localhost/identity/v3" + }, + "vimId": "defb2f96-5670-4bef-8036-27bf61267fc1", + "vimType": "ETSINFV.OPENSTACK_KEYSTONE.V_3" + } + } + } + +.. note:: + * ``vnfdId`` is the vnfd id of the new VNF package you uploaded. + * ``lcm-operation-coordinate-old-vnf`` and + ``lcm-operation-coordinate-new-vnf`` are unique implementations of + Tacker to simulate the coordination interface in + `ETSI NFV-SOL002 v3.5.1`_. + Mainly a script that can communicate with the VM after the VM is + created, perform special customization of the VM or confirm the + status of the VM. + * ``vimConnectionInfo`` is an optional parameter. + This operation can specify the ``vimConnectionInfo`` for the VNF + instance. + Even if this operation specifies multiple ``vimConnectionInfo`` + associated with one VNF instance, only one of them will be used for + life cycle management operations. + It is not possible to delete the key of registered + ``vimConnectionInfo``. + +You can set following parameter in additionalParams: + +.. list-table:: additionalParams + :widths: 15 10 30 + :header-rows: 1 + + * - Attribute name + - Cardinality + - Parameter description + * - upgrade_type + - 1 + - Type of file update operation method. Specify Blue-Green or + Rolling update. + * - lcm-operation-coordinate-old-vnf + - 1 + - The file path of the script that simulates the behavior of + CoordinateVNF for old VNF. + * - lcm-operation-coordinate-new-vnf + - 1 + - The file path of the script that simulates the behavior of + CoordinateVNF for new VNF. + * - vdu_params + - 0..N + - VDU information of target VDU to update. Specifying a vdu_params + is required for OpenStack VIM and not required for Kubernetes VIM. + * - > vdu_id + - 1 + - VDU name of target VDU to update. + * - > old_vnfc_param + - 0..1 + - Old VNFC connection information. Required for ssh connection in + CoordinateVNF operation for application configuration to VNFC. + * - >> cp-name + - 1 + - Connection point name of old VNFC to update. + * - >> username + - 1 + - User name of old VNFC to update. + * - >> password + - 1 + - Password of old VNFC to update. + * - > new_vnfc_param + - 0..1 + - New VNFC connection information. Required for ssh connection in + CoordinateVNF operation for application configuration to VNFC. + * - >> cp-name + - 1 + - Connection point name of new VNFC to update. + * - >> username + - 1 + - User name of new VNFC to update. + * - >> password + - 1 + - Password of new VNFC to update. + * - external_lb_param + - 0..1 + - Load balancer information that requires configuration changes. + Required only for the Blue-Green deployment process of OpenStack + VIM. + * - > ip_address + - 1 + - IP address of load balancer server. + * - > username + - 1 + - User name of load balancer server. + * - > password + - 1 + - Password of load balancer server. + * - lcm-operation-user-data + - 0..1 + - File name of UserData to use. + * - lcm-operation-user-data-class + - 0..1 + - Class name of UserData to use. + +.. note:: + When using StandardUserData as UserData, the following settings are + required in additionalParams. + + * "lcm-operation-user-data": "./UserData/userdata_standard.py" + * "lcm-operation-user-data-class": "StandardUserData" + +How to change image for VM created by image +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Execute Change Current VNF Package CLI command. After complete this +change operation, you should check resource status by Heat CLI commands. + +1. check 'ID' and 'Stack Status' of the stack before and after +operation. +This is to confirm that stack 'ID' has not been changed before and +after operation, and that the Stack update has been updated +successfully. + +2. check 'physical_resource_id' and 'resource_status' of the VDU and +VDU's parent resource. +This is to confirm that 'physical_resource_id' has no change before +and after operation, and that the resource_status has been updated +successfully. + +3. check 'image' information of VDU before and after operation. +This is to confirm that VDU's image has been changed successfully. +See `Heat CLI reference`_ for details on Heat CLI commands. + +* Check point 1 before operation + + Stack information before operation: + + .. code-block:: console + + $ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status' + + Result: + + .. code-block:: console + + +--------------------------------------+------------------------------------------+-----------------+ + | ID | Stack Name | Stack Status | + +--------------------------------------+------------------------------------------+-----------------+ + | 16358585-d7bf-4702-abe0-b0f4007775c9 | vnf-b144a27b-164f-4a04-bb98-578a2363bb9a | CREATE_COMPLETE | + +--------------------------------------+------------------------------------------+-----------------+ + +* Check point 2 before operation + + Stack resource information before operation: + + .. code-block:: console + + $ openstack stack resource list 16358585-d7bf-4702-abe0-b0f4007775c9 \ + --filter type='VDU1.yaml' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+---------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+---------------+-----------------+----------------------+ + | VDU1-0 | 09b59157-19fb-4254-bb49-e5dd74634840 | VDU1.yaml | CREATE_COMPLETE | 2023-02-13T08:04:09Z | + +---------------+--------------------------------------+---------------+-----------------+----------------------+ + + VDU information before operation: + + .. code-block:: console + + $ openstack stack resource list 09b59157-19fb-4254-bb49-e5dd74634840 \ + --filter type='OS::Nova::Server' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | VDU1 | 283bf442-9671-4d29-b936-4a04c6b8316a | OS::Nova::Server | CREATE_COMPLETE | 2023-02-13T08:04:12Z | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + +* Check point 3 before operation + + VDU detailed information before operation: + + .. code-block:: console + + $ openstack stack resource show 09b59157-19fb-4254-bb49-e5dd74634840 VDU1 \ + -f json | jq .attributes.image.id + + Result: + + .. code-block:: console + + "c0b684bd-445f-44f1-9ab7-1e151a090ec7" + +* Execute Change Current VNF Package + + Change Current VNF Package execution of the entire VNF: + + .. code-block:: console + + $ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \ + ./sample_param_file_for_standard_user_data.json \ + --os-tacker-api-version 2 + + Result: + + .. code-block:: console + + Change Current VNF Package for VNF Instance b144a27b-164f-4a04-bb98-578a2363bb9a has been accepted. + +* Check point 1 after operation + + Stack information after operation: + + .. code-block:: console + + $ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status' + + Result: + + .. code-block:: console + + +--------------------------------------+------------------------------------------+-----------------+ + | ID | Stack Name | Stack Status | + +--------------------------------------+------------------------------------------+-----------------+ + | 16358585-d7bf-4702-abe0-b0f4007775c9 | vnf-b144a27b-164f-4a04-bb98-578a2363bb9a | UPDATE_COMPLETE | + +--------------------------------------+------------------------------------------+-----------------+ + + .. note:: + 'Stack Status' transitions to UPDATE_COMPLETE. + +* Check point 2 after operation + + Stack resource information after operation: + + .. code-block:: console + + $ openstack stack resource list 16358585-d7bf-4702-abe0-b0f4007775c9 \ + --filter type='VDU1-ver2.yaml' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+----------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+----------------+-----------------+----------------------+ + | VDU1-0 | 09b59157-19fb-4254-bb49-e5dd74634840 | VDU1-ver2.yaml | UPDATE_COMPLETE | 2023-02-13T08:10:35Z | + +---------------+--------------------------------------+----------------+-----------------+----------------------+ + + VDU information after operation: + + .. code-block:: console + + $ openstack stack resource list 09b59157-19fb-4254-bb49-e5dd74634840 \ + --filter type='OS::Nova::Server' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | VDU1 | 283bf442-9671-4d29-b936-4a04c6b8316a | OS::Nova::Server | UPDATE_COMPLETE | 2023-02-13T08:10:08Z | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + + .. note:: + 'resource_status' transitions to UPDATE_COMPLETE. + +* Check point 3 after operation + + VDU detailed information after operation: + + .. code-block:: console + + $ openstack stack resource show 09b59157-19fb-4254-bb49-e5dd74634840 VDU1 \ + -f json | jq .attributes.image.id + + Result: + + .. code-block:: console + + "4718c711-16ad-4778-a2cb-33b213567e16" + + .. note:: + You can check 'attributes.image.id' has been changed from + 'c0b684bd-445f-44f1-9ab7-1e151a090ec7' to + '4718c711-16ad-4778-a2cb-33b213567e16'. + +How to change image for VM created by volume +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Execute Change Current VNF Package CLI command. After complete this +change operation, you should check resource status by Heat CLI commands. + +1. check 'ID' and 'Stack Status' of the stack before and after +operation. +This is to confirm that stack 'ID' has not been changed before and after +operation, and the Stack update has been updated successfully. + +2. check 'physical_resource_id' and 'resource_status' of the VDU and +VDU's parent resource. This is to confirm that 'physical_resource_id' of +VDU has changed before and after operation, 'physical_resource_id' of +VDU's parent resource has no change before and after operation, and that +the 'resource_status' of VDU has been created successfully, +'resource_status' of VDU's parent resource has been updated +successfully. + +3. check 'os-extended-volumes:volumes_attached' information of VDU +before and after operation. +This is to confirm that VDU's image has been changed successfully. +See `Heat CLI reference`_ for details on Heat CLI commands. + +* Check point 1 before operation + + Stack information before operation: + + .. code-block:: console + + $ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status' + + Result: + + .. code-block:: console + + +--------------------------------------+------------------------------------------+-----------------+ + | ID | Stack Name | Stack Status | + +--------------------------------------+------------------------------------------+-----------------+ + | 16358585-d7bf-4702-abe0-b0f4007775c9 | vnf-b144a27b-164f-4a04-bb98-578a2363bb9a | CREATE_COMPLETE | + +--------------------------------------+------------------------------------------+-----------------+ + +* Check point 2 before operation + + Stack resource information before operation: + + .. code-block:: console + + $ openstack stack resource list 16358585-d7bf-4702-abe0-b0f4007775c9 \ + --filter type='VDU2.yaml' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+---------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+---------------+-----------------+----------------------+ + | VDU2-0 | 1ddc79f1-33c9-4e44-8aa8-1450a63471eb | VDU2.yaml | CREATE_COMPLETE | 2023-02-13T08:04:09Z | + +---------------+--------------------------------------+---------------+-----------------+----------------------+ + + VDU information before operation: + + .. code-block:: console + + $ openstack stack resource list 1ddc79f1-33c9-4e44-8aa8-1450a63471eb \ + --filter type='OS::Nova::Server' + + Result: + + .. code-block:: console + + +---------------------+--------------------------------------+------------------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------------+--------------------------------------+------------------------+-----------------+----------------------+ + | VDU2 | dd1ae073-f7d1-4619-b6b6-7d6f9a37ce88 | OS::Nova::Server | CREATE_COMPLETE | 2023-02-13T08:04:13Z | + +---------------------+--------------------------------------+------------------------+-----------------+----------------------+ + +* Check point 3 before operation + + VDU detailed information before operation: + + .. code-block:: console + + $ openstack stack resource show 1ddc79f1-33c9-4e44-8aa8-1450a63471eb VDU2 \ + -f json | jq '.attributes."os-extended-volumes:volumes_attached"[].id' + + Result: + + .. code-block:: console + + "46a5bc58-ee2e-4a18-87ad-1b3efd0fff77" + +* Execute Change Current VNF Package + + Change Current VNF Package execution of the entire VNF: + + .. code-block:: console + + $ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \ + ./sample_param_file_for_standard_user_data.json \ + --os-tacker-api-version 2 + + Result: + + .. code-block:: console + + Change Current VNF Package for VNF Instance b144a27b-164f-4a04-bb98-578a2363bb9a has been accepted. + +* Check point 1 after operation + + Stack information after operation: + + .. code-block:: console + + $ openstack stack list -c 'ID' -c 'Stack Name' -c 'Stack Status' + + Result: + + .. code-block:: console + + +--------------------------------------+------------------------------------------+-----------------+ + | ID | Stack Name | Stack Status | + +--------------------------------------+------------------------------------------+-----------------+ + | 16358585-d7bf-4702-abe0-b0f4007775c9 | vnf-b144a27b-164f-4a04-bb98-578a2363bb9a | UPDATE_COMPLETE | + +--------------------------------------+------------------------------------------+-----------------+ + + .. note:: + 'Stack Status' transitions to UPDATE_COMPLETE. + +* Check point 2 after operation + + Stack resource information before operation: + + .. code-block:: console + + $ openstack stack resource list 16358585-d7bf-4702-abe0-b0f4007775c9 \ + --filter type='VDU2-ver2.yaml' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+----------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+----------------+-----------------+----------------------+ + | VDU2-0 | 1ddc79f1-33c9-4e44-8aa8-1450a63471eb | VDU2-ver2.yaml | UPDATE_COMPLETE | 2023-02-13T08:10:36Z | + +---------------+--------------------------------------+----------------+-----------------+----------------------+ + + VDU information after operation: + + .. code-block:: console + + $ openstack stack resource list 1ddc79f1-33c9-4e44-8aa8-1450a63471eb \ + --filter type='OS::Nova::Server' + + Result: + + .. code-block:: console + + +---------------------+--------------------------------------+------------------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------------+--------------------------------------+------------------------+-----------------+----------------------+ + | VDU2 | 0d19e66b-9016-4d34-85ef-d918e62e8661 | OS::Nova::Server | CREATE_COMPLETE | 2023-02-13T08:09:35Z | + +---------------------+--------------------------------------+------------------------+-----------------+----------------------+ + + .. note:: + 'resource_status' transitions to CREATE_COMPLETE. + 'physical_resource_id' has been changed from + 'dd1ae073-f7d1-4619-b6b6-7d6f9a37ce88' to + '0d19e66b-9016-4d34-85ef-d918e62e8661'. + +* Check point 3 after operation + + VDU detailed information after operation: + + .. code-block:: console + + $ openstack stack resource show 1ddc79f1-33c9-4e44-8aa8-1450a63471eb VDU2 \ + -f json | jq '.attributes."os-extended-volumes:volumes_attached"[].id' + + Result: + + .. code-block:: console + + "88a9df83-1546-4e53-a38b-62dc17f11826" + + .. note:: + You can check 'attributes.os-extended-volumes:volumes_attached.id' + has been changed from '46a5bc58-ee2e-4a18-87ad-1b3efd0fff77' to + '88a9df83-1546-4e53-a38b-62dc17f11826'. + +How to change flavor of VMs +~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Execute Change Current VNF Package CLI command. After complete this +change operation, you should check resource status by Heat CLI commands. + +1. check 'flavor' information of VDU before and after operation. +This is to confirm that VDU's flavor have been changed successfully. +See `Heat CLI reference`_ for details on Heat CLI commands. + +* Check point 1 before operation + + VDU detailed information before operation: + + .. code-block:: console + + $ openstack stack resource show 1ddc79f1-33c9-4e44-8aa8-1450a63471eb VDU2 \ + -f json | jq .attributes.flavor + + Result: + + .. code-block:: console + + { + "vcpus": 1, + "ram": 512, + "disk": 1, + "ephemeral": 0, + "swap": 0, + "original_name": "m1.tiny", + "extra_specs": { + "hw_rng:allowed": "True" + } + } + +* Execute change Current VNF Package + + Change Current VNF Package execution of the entire VNF: + + .. code-block:: console + + $ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \ + ./sample_param_file_for_standard_user_data.json \ + --os-tacker-api-version 2 + + Result: + + .. code-block:: console + + Change Current VNF Package for VNF Instance b144a27b-164f-4a04-bb98-578a2363bb9a has been accepted. + +* Check point 1 after operation + + VDU detailed information after operation: + + .. code-block:: console + + $ openstack stack resource show 1ddc79f1-33c9-4e44-8aa8-1450a63471eb VDU2 \ + -f json | jq .attributes.flavor + + Result: + + .. code-block:: console + + { + "vcpus": 1, + "ram": 2048, + "disk": 20, + "ephemeral": 0, + "swap": 0, + "original_name": "m1.small", + "extra_specs": { + "hw_rng:allowed": "True" + } + } + + .. note:: + You can check 'attributes.flavor' has been changed. + In this example, it has been changed as follows. + + * 'attributes.flavor.ram' has been changed from '512' to '2048' + * 'attributes.flavor.disk' has been changed from '1' to '20' + * 'attributes.flavor.original_name' has been changed from 'm1.tiny' + to 'm1.small' + +How to change external networks +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Execute Change Current VNF Package CLI command. After complete this +change operation, you should check resource status by Heat CLI commands. + +1. check the number or 'physical_resource_id' of the external network +resources. +In the case of add and delete, this is to confirm that the number of +resources has been changed before and after operation. +And in the case of modify, this is to confirm that +'physical_resource_id' has been changed. + +2. check 'address' information of VDU before and after operation. +This is to confirm that VDU's external networks have been changed +successfully. +See `Heat CLI reference`_ for details on Heat CLI commands. + +* Check point 1 before operation + + External networks information before operation: + + .. code-block:: console + + $ openstack stack resource list 09b59157-19fb-4254-bb49-e5dd74634840 \ + --filter type='OS::Neutron::Port' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | VDU1_CP2 | 6b72ba80-3287-4d8f-8ec1-7e6aca8d39a0 | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:04:12Z | + | VDU1_CP3 | ae68a952-e571-4fa3-921a-d86bd85e7746 | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:04:12Z | + | VDU1_CP1 | ead7a816-097f-4a0c-ab72-48a90284c0c4 | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:04:12Z | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + +* Check point 2 before operation + + External networks detailed information before operation: + + .. code-block:: console + + $ openstack stack resource show 09b59157-19fb-4254-bb49-e5dd74634840 VDU1 \ + -f json | jq .attributes.addresses + + Result: + + .. code-block:: console + + { + "net1": [ + { + "version": 4, + "addr": "10.10.1.48", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:8c:c4:3d" + } + ], + "net_mgmt": [ + { + "version": 4, + "addr": "192.168.120.66", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:b9:21:b7" + } + ], + "vnf-b144a27b-164f-4a04-bb98-578a2363bb9a-internalVL2-3qan642mfebl": [ + { + "version": 4, + "addr": "192.168.4.21", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:1b:ae:ea" + } + ] + } + +* Execute Change Current VNF Package + + Change Current VNF Package execution of the entire VNF: + + .. code-block:: console + + $ openstack vnflcm change-vnfpkg VNF_INSTANCE_ID \ + ./sample_param_file_for_standard_user_data.json \ + --os-tacker-api-version 2 + + Result: + + .. code-block:: console + + Change Current VNF Package for VNF Instance b144a27b-164f-4a04-bb98-578a2363bb9a has been accepted. + +* Check point 1 after operation + + External networks information after operation: + + .. code-block:: console + + $ openstack stack resource list 09b59157-19fb-4254-bb49-e5dd74634840 \ + --filter type='OS::Neutron::Port' + + Result: + + .. code-block:: console + + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | resource_name | physical_resource_id | resource_type | resource_status | updated_time | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + | VDU1_CP2 | 6b72ba80-3287-4d8f-8ec1-7e6aca8d39a0 | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:04:12Z | + | VDU1_CP1 | ead7a816-097f-4a0c-ab72-48a90284c0c4 | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:04:12Z | + | VDU1_CP4 | 6d6745fc-868f-42be-87fe-89d0970ed9de | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:10:03Z | + | VDU1_CP3 | 306c7b61-34a3-466f-93a6-37625c336dae | OS::Neutron::Port | CREATE_COMPLETE | 2023-02-13T08:10:07Z | + +---------------+--------------------------------------+-------------------+-----------------+----------------------+ + + .. note:: + The number or 'resource_status' of the external network resources + have been changed. + In this example, the number has been changed from '3' to '4'. + +* Check point 2 after operation + + External networks detailed information after operation: + + .. code-block:: console + + $ openstack stack resource show 09b59157-19fb-4254-bb49-e5dd74634840 VDU1 \ + -f json | jq .attributes.addresses + + Result: + + .. code-block:: console + + { + "net1": [ + { + "version": 4, + "addr": "10.10.1.48", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:8c:c4:3d" + } + ], + "net_mgmt": [ + { + "version": 4, + "addr": "192.168.120.66", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:b9:21:b7" + } + ], + "vnf-b144a27b-164f-4a04-bb98-578a2363bb9a-internalVL3-5tpq76i3eddx": [ + { + "version": 4, + "addr": "192.168.5.87", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:24:27:44" + } + ], + "net0": [ + { + "version": 4, + "addr": "10.10.0.223", + "OS-EXT-IPS:type": "fixed", + "OS-EXT-IPS-MAC:mac_addr": "fa:16:3e:a8:df:00" + } + ] + } + + .. note:: + You can check 'attributes.addresses' has been changed. + In this example, 'net0' has been added. + +.. _Heat CLI reference: https://docs.openstack.org/python-openstackclient/latest/cli/plugin-commands/heat.html +.. _ETSI NFV-SOL002 v3.5.1: https://www.etsi.org/deliver/etsi_gs/NFV-SOL/001_099/002/03.05.01_60/gs_nfv-sol002v030501p.pdf