From 928056075248b6b517c7e56d58ca6b6d4e9d3703 Mon Sep 17 00:00:00 2001 From: Vladyslav Drok Date: Mon, 22 May 2017 16:09:13 +0300 Subject: [PATCH] Revise deploy process documentation Add more details about the node deployment process, when an instance is booted by nova. This change covers iscsi and direct deploy methods with PXE boot. This change also updates the sequence diagrams for deploy process. Co-Authored-By: Galyna Zholtkevych Change-Id: Icaec14d10e702627bab0763e40efa77131564dec --- doc/source/conf.py | 12 +- doc/source/images/deployment_steps.png | Bin 77412 -> 0 bytes doc/source/images_src/deployment_steps.svg | 2766 -------------------- doc/source/user/index.rst | 266 +- 4 files changed, 193 insertions(+), 2851 deletions(-) delete mode 100644 doc/source/images/deployment_steps.png delete mode 100644 doc/source/images_src/deployment_steps.svg diff --git a/doc/source/conf.py b/doc/source/conf.py index 5436dd77a4..5e64aee492 100644 --- a/doc/source/conf.py +++ b/doc/source/conf.py @@ -11,12 +11,22 @@ # License for the specific language governing permissions and limitations # under the License. +import eventlet + +# NOTE(dims): monkey patch subprocess to prevent failures in latest eventlet +# See https://github.com/eventlet/eventlet/issues/398 +try: + eventlet.monkey_patch(subprocess=True) +except TypeError: + pass + # -- General configuration ---------------------------------------------------- # Add any Sphinx extension module names here, as strings. They can be # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = ['sphinx.ext.autodoc', 'sphinx.ext.viewcode', + 'sphinx.ext.graphviz', 'sphinxcontrib.httpdomain', 'sphinxcontrib.pecanwsme.rest', 'sphinxcontrib.seqdiag', @@ -95,7 +105,7 @@ exclude_patterns = ['api/ironic_tempest_plugin.*'] # Ignore the following warning: WARNING: while setting up extension # wsmeext.sphinxext: directive 'autoattribute' is already registered, # it will be overridden. -suppress_warnings = [ 'app.add_directive'] +suppress_warnings = ['app.add_directive'] # -- Options for HTML output -------------------------------------------------- diff --git a/doc/source/images/deployment_steps.png b/doc/source/images/deployment_steps.png deleted file mode 100644 index 3fd0986a7667cac65bb9c10155953459f2e3f946..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77412 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 z z!AfyPrirhfFjdB2#A9IidW+$gxd`X&jN)i{8NqU&ku{S|X5kp*OsKmh6AL18{&P`ayWA!O-d&eS92Wx@a z#!}lyc2sJWG(sZfJ*IfF^ueWLhRP4%Jk0leBLw@_lzro9cBbAp5V zd%&FbKpUm%Qe~`VJA(zcf=HbC`M9Bl1{#gKnRZ{P<7o4jV#BMkf41pLfdq2B5rq-*21 ze(!1M+u^|Rx$IV4?d_|@;S;TwfQ?@YTP<=7hc~ENh zk?w0qfUrtDDDUc5lWKv_x*3CcC0w9%gUI#7A?%t-xdLlk*zUiz9YR%(A%-hIpv9!Y|$k}pcBU@pvbCC#KM)Ip7Xl${wF*B(`BFYesT>5Q? zP~k4T#28j)%wUn3;6NMZ1a7Z-=+oGv2jZ_*9Y`RNd=^wcpZTDnwu&*aLXLX#sWAn}?t{JW!f`;-xBqnwxY zWzg_rGtlte$wKPUnC8ukh>9WX%16M|dVS{E)LIMaz3@KQ?oQfOf?9(q?r$d8EH>6z z!*8&rGaIfE6_gNsVW!gImts)e7=nBHEvFMEtmZ}$7k;p*_>F4}qV{sdkOBXHJXOK2 zUJuaHLzS^lQIH@?@bQUEjyK0oozPElf(l=?SAfs^)n^Ta*v9HH<|DwA{k`OhJm+qZ z^6Zc`VFucud1hyrYZK$feCm&(lK5IEJC+?&$?x$3vo7Lg7~sD#a@Nywq%CR@YV zB)kqS|Amr7(5VBWBro#3a+%cf3L$d>O3!T9nOc z$q9&cg8siWQFm%~Wtocdp81!EU7QG3ncV7Ss5`X^+=9%gIjTl7X1SN4IO{;^ez6&9 z-kNgc-M8~<^d86sz)1T6;DcrQu6_RDnLOyyj=8B25CwS6i|6OuK*ttkJ2{QcIEx22 zip_4V>v9}&jm>!V!?}o!Weieo158`~nTS@0BqT0lFYm8ig7EkIOl_&k7sEsoo5~W` zT9x@pz9_rkhjIL-d%Wr8y!7Yc$`z`nWZLjq<2OL_bUvCV`KtAN9C)RE@w>H&DOVAV z7rEVjW`f)uwJ-0eCu@=8h3`tzk_&la;`MjwT)0U#yey#7bIE7ym1*+gUGjYYg?nIX zXA3YFU(+1(5xK2r>y^Riy7g3GDoE?U931o;41%Z2WJ~61<1WYRY<naa6SxN1AKX+s#=Vl3_o6;e-Q5oAu8oV6@RNsj_VVtu67s$)9f60Vr_nez@Oy zfqtE77h?8fo$*~AsK^I)s==%HM_yKJqpv~Xs>3pfKID+!E3oc1ZMel2P%%bYH~JpX ziVELn`vD7R;F%gP6GQCQcN7OHfNR5IechtBS)?d%V5?ensr^C+nyjp$SW-iL0&T_} z4*XyT%!ZbZVW@uNW~u>uutyWiWU`}WgIS&}HPjaTzJY^nz3V~UG;!l~E}ayae4FQq zncXyxg}}qJZ3QwMIlrsfDk}-FIF^t(I46YZGKhBk)5%)n$x=o+ZllPQUrYQM$;d{y z>5~}FTsqW@+SFNiGuQm_Lcah{k(jFk2k+Two~hlv)p+g)Oxwou&sn2AMVL znMw^k@~kl)r&fd=v|{3v18yyay6ubzoS1|1ZA&C9F2B3pc*1$MRas#GV5x(7aw{mn zy9HpULg<}RXiPT9xMqaVN;z}F8lB;eVCGPm+R#9p>s(?KLq!;RkdA)j@XOJ_*GdrX zqZkMA8DbRPqnSvK@1YZS!`zbi$w(G70d@R8OSZ!z9eA3s*k~!1vG%jsQo1cH0R1H6 zg7B?4m>CDU7~vQcblIn4XGV8nh5A*jVnY1&H4P^88PZBWCYPV@nhVS4;vpSpqqtHJQg+jL5k_T; zf5y`_1_8fcaFoF`-vd2!ysr92{2a-!H3Ka%@L|x#$C3JxzZ7lOO0w2jN5i%r=xNr# zuAk_aR)n71a3Ekgp#)whLs#gZv4~Y1r{cx!aJJD|YGlL!Ll4O4Ibk{YU+ zW43pC!C2iD2d&aCT+}4UPG!S;d{;%rkw_ky=|7IRV3RUwz!!@^=E$YA1x8JG#q2u6ArI;>rEPt+o(pl)I@?K0ba zGNK(DW-Y5csP&Fv)*MQqE-MdJ$l$`la)N@+k`J2{P)4wIj<#v$UFUz(ml(AcZ1!^) z2w$ED(cyuFmi0)FW}?O)L(ccTee)P-cKKz$rpbF*cdWPD-7OWRdPN_cHZ^LqO~bhU zWM>Wi3%Rx?1=r5zav^d0MKX^I>+D~E5@)fy<5*jzqAqOZU*#z ze#boT+Cs=7I+0A;QD5~ZA{(UgXhkL}FRe&q+Nm!M)Gf>byWjQa9#1|hx}XEXbJcV7B6)2xPUA>?vG znqOH#9W~=G0-RgAG`&v^;?iQCXkB;ihvnZ6)3BMf7TLpps9C)9_FU_0Nd?GQO-e|o zQG>wy57d0i#wybgM8q+N1jjTDqecs3C<)bt-qMDbO8jLhHHWgIvhp&zQ*%6JBuc4- zm*Ubk%o4b;g$77~!4>ZqASK*Q+Yq1}e+RZ2{VYzkEz-=PowIYnMP71_t?`+{c0 zdHk2$?n4|N8+nb?WSW#Op4!m{t^u3AL#1S%9}suJRtj z3Kx6#XritGNq`o4N+XH6Fz!mwo*==y8K6q-G zQuq6%5dm#;h-u4F>j%p>wZFDoS=0vkQYcuH=^|?1i2N4*o&Pk<@T%SVL{UD2J&l8Z z3SKW)R^VXtP2dopVRPVQJsuDxhu>28r13cu$cRw5vbfh^4? zE{!{Ev8+7g09^V}CrDS;poOalFJ3Qy_iS{y=E>wT5>?-s60^4vdzO7y4o;!oD_>246|?q&lD(j_4vD(G4Gyx(`ub)EPBy4LJ_&O62!kcebGm3N{P zXz4+$>C>^3pSG*@LdgHI8whUj0q?)*MS&^$-OLufSaqV1i-_aE1GgbjKlO@CB3!?FwY_U? zjPONNu*xXPRP-+!f&pKkoz~S##j(UQn-cNU zyNx*q4bY6pUYk{t1R{U)rGqNK&zRA`fHqwnq52tK+x*`3Jox?i_CILp2;r3rgpjzw zReEn+bjHT)lid$cvp59&3t9Z>tw5%;;0P}y*odg8!R5TTFu@gZLw*-tixoj;9ZjUa z{0gh+p?p!&aCDdJGC2}kf#b2-w{oe!#R9c2nb5<(Gl;O{M4tjP^W-np-MT`oPpvMX z*uR$y)LTP@MuMbrMy8`Jxz32DoAHsmQmE_By%2KKIO~$ zdI~7E><~f}$qP^?r6C*t7k`h(8KUF0z3{Gx&|)*v9&N7Sr=vLh5Rd3!9*{+y z=9jB_<;3RDPGLF^XtD`H`sv+I8S~le(_nQ4X({D*sF#11g*MdRL$f5GL%QGOYl*za zc(}B{@?>5(KE~rVLV6>uRTB88NCN5i0OKDfNz44HAgbyVtpVXx>TY(YcLVv)BHbbpdB$h8a&igs^4ZM{l`J zAQ`RAl4QUIk&@964ZkKtZXe^Q?qtKP>!fiLwYh&*2o1}V2@b%?@UMP{3C|On(`4vM zpbO40)vfY$1@dF&Zx?Dw15?>0ExP-wLbkq*AW`BE$%vXUmr;v6`r&Uvsy{?LpA_|1 zant?tW*|zA6Dt({m&T*>oksKg#gr`1zOMFdTNU?Y2HG%fVUHK8;5RAt(p`8xg+oJ< z16k>%)3M&b*9g1#n*vFSszZB7#@JMR09niIZk+^?HrjpmkqQW!oiS7(pTCl@v&a({ znUi~*kW-D;;m0S;m$gP+e87rB4nLT%oFIha!alUFuxjU5iLZFX&>2tdnKi7pa3L5HczN8Ei}y zjD4R@a_U9b#HaHXN3-S9Z!TZtEA0a2ERRRHTe=LyZ@LK}6!{Ibq6GSBj}f@d^yyEr z2#gY>fcTZg&grhY44R6X=%sAXq-N^Mkj?C*!|*P=C&ojQC93QA!=*e+|Z5TNId;!TZFtSHK(QOKB;V; zr1;5TQ?%?aTY}j>HBN?x2H3$=#et35Ddu7H&E4?uW*17)AH{qrR9XoVVtD&`)r$h;#li(C|_o*rN;tiyY9k%t->l)f?+$3 zSdH}^q-{VjoENTdL}$V4poI0x$rjwd$|eiTu>30E)0bKnV@(u7tUb7J`9;g{tG-Y_ zR~1*MYYwG+o)?thcm7fup!QJ$FH0&D{_M}X-W0l?@rFVhpy~Cdt5cCUZR50QJ-`L0 zIZXS-d~=ELkY5RXd@l@ca70x-+QI=fxlr|bj|39iX3fr(l|)-xtv6Wg3xD3~NYmXi z%OgH<|3h0de{ThBlS26a_yM2qxmSiax8A?XaCX>>p#-D?oHvuDaK&Y$kT$V_h9I{? zF6O4(%ucU641}r(S{dO4>0n6XcbFHr3*89#)d10f3Bws&lNF2fuazp6I(q1w3D4}p zt`HUk{3GCcYX=l1U)&hrrOF?ZYM>%uYguC0b!kz(C^)JJ0oSIK{!HE_kW-cuFRh0g zJ>wlwcU*z9`#~uBLzjzK2N(7g@_-N-9%jB3f^s}(m}+cZWrTcmQUzP{y>awX8B0Ya z4)*xR_Ar$)m%pVc|M~`(RC(O8odY2i>~n^n+7}o#M9n%V!7&=4_AQLj9ZGFc-*Crx zR^Y}KFyD*kA{2Ft#Y$b=Vtnkj~2K6d7hF2#ht_8R*HuMxy1$WV9e(H5$s&l|PqXei3F5Meke^sbQ3UAs3boDCKcgpK`s z*@XHI;@Qo1TL!I7yq1SULylIn8dVn;&(A3;B7a(!*^MRYYU4xixVhPcd>Sth#`Q`cR@L&-Iu6G0lVT{v9JVigrC^ zC@=11;{tDmBXt9qfK*1a#%}L6VUMk!t(HAe?rSwCTkFju;TroxlZB)T+hXSFUBRz^ z-4@rta?*M!dmvm=DT!tu_M$4DWqRKub$wBt=TnyOngku24&O{vPoUe51}ykikJy-D z99OZn8kTeCHJbe3gAT@0=n$HGn9i$*s?JqM06G3b#0$9M0F3namM(vObVwLS?$n3D zKptabhbx)_*CwTvsh%BBBOyO2ZYMF=gHC0?QWqm*txwSq=cb)c{A;W9yOw#&SA7g@>qgaYx~>?}*%#kdL(HOrR?J2ItN+p~8GSU+wm zg5}7*iJ&!J@tJf&J%>-H#uACFBAgo4=lP6EJUk3r!8JyEmY7*`7cN4Y4R)=`r*{;8 zXFmG$F6al>AB0YL3p3&^d2}%ofh{kNd5UkSf${7H+TH$-_)y0*05xI09trBm*d+;V zv=OYACEH^0up<1flI4O{Q3h|%*J;!wt+K9G0UBfFUrQ7)sV-G!;?-#dSZJ1tmnk+E z0FqiaAboB6n)>h}!SmL=loxYm7_(BpFvq~Z&p{NH+{E~5i#MKU&FjKc77(E7k|A-U$@C z0Ij%P@pthPM&Bgs3T<`wbUz~@34Ngqw@aCyDfoAFa0A^$TRO~;F=tbZl^}cE!}BFa zk$AD=DEZleCv$NGHDr5+{W+)!t=6+W=BO zHkvG4o>($cy4KosQwe3qe#?sGk)O8J)}y)hY>!yg-2(qN2^5HHj@06&Q!Q@(t;hZ5 z(4lT&Y9T|-p;Fqq-muk{t?Er6g#g-@kShVZkew$R;68nU&axrni)@m4VaCa3G`2Tx zYvf=fTL|?=taF_=kUDoVr>dVf_?z9{fWM{>XLFLHO^kXMXU`EvpBUnkvrg}eCamU! z5Rm9sHA7|P5n1^;F`d^Ib0e}O`YEnePjAP8uzBajOJuAVxj=q=gb?wfax6Z586|C4 zSLl>KQ|z*jVY&#HxZ%AW1Qm8T@4IgGWodqgt115^l4;%Bc2P2^Eh$1L9uMPOr8c#r zL$3;Et$qn;_P0TEBsSC;1vAE_Qc)mN;twRiQQ-h6RF&<8Rd5bzuSNRZYgCp{7=4}# zuK>={z;3wjP}n^>cZ{tU!OQ2BI0j)ggqSdgaDL zZLZF#3nCq%&|eO~J4f*Sz2BZ^qP6<1#KYOQ^Hf>)Qy;4Q381ATm;b+|LMfANXMw;$ z7Spa#N76@vxO(@?vAe|H2KkjZRfxgm&C9kREg+01Rh_qiNSOl`&Qs7PfpZ49UcRIw zv7=epv~K&`@O=g}+OECV@(}8l9W2*=N}h1^37%%tSk|n#I>R5IKyx)BE#Mu@ZdOh`B{LN+JgxZp6bp`l+Bd-j!Rl|FavM5G0qFmWA}9gqY{5~rXd%ptj6NBS znELC<7ieaUgfn0HHG1f!rk+y9^j@H`NO=Ov$OMDT3S)tK4{mexP}q&-jcJx}W3wS)mN5Zq#Tc32?o*>%0OgK2K{-EP?^1f(97UG+l+@xaiepor0DXaRxR@Yq!QBtI8YRh`DTeH12SH>fj)J8}$hhR}i(j-l4wV@?AoS zS;r0W@M}j&j#tqqY?W0;kAZ{C2?+Y^+FOG4?4JT$qJgMQM(@k3uSyBB_+XJgFqK{@ z&-`HOfUDlzG(RXb&Pu);UfU?L%EfZ(^$wk-gc&Zo*uol-#9OP6f4p`I367VK!HDQE z=Q_EYl}9bnZ-E-x6vG>2RbYvRwjuZ%PrSeGM0=A4=p?_iM*>~FXm4{!Qa72W$VdJ;4yTCNzWC_h;(qHMXO63MH#{p3NyVV+<9L@czx6W)pXbf88SYmaOpIto=)(~Oq*`%oVLrM|+ zL{gtkgmttU_I5B_=+P+G8>^~zrd&H*^lfG#gXv7|zMrq^St@G;4&n@3z*OOZwYHBE zuR(oHZK)Zp5WEpGI5k|&=V`vNtgE`5OpSJO;fr#*UMcE95c+Q*&tWV^@Y7MAjJOT4 znrvEy;gtX6rZnZ?VeNGo>Y5{}D@*dvO?Sy5+-pFnaf-_zW>7Jfb@}v#xb*L!C`FhP&SB|7 z-jr41lWOQs;v}AfpjNjz^81r^nG&aeIz*jeS4~bJQt*}|!@#Lo#^7@03W9=iOU=6? z)OxGDaC-5{*n^}FAG%7WX|Ihc`r%)IBv#}YU_Gk1R!Gk<1q{2}hs20DKWC)bGvW)a zR%a+V<^TdK7<}0nyV1j!E(`P;NK1}+&JevGOGm0#czgup<8I$h1MA`5*;v-hk>Wi_ zeSXB7wbf}|=bz4ePucZdxqr2!MP&JoeDBQ#x|naO`grCo+}i2D1&5@-TXzGwUfBTt zl6@bp}P7*L<) zJ5KSo&iupAyg)!N&^tVLh@q}ZV8x6=6oZf-NRhVJqopaS(ydOFw*iWRBC2E(n3=ub z)6`q>a-?8h!J?_SQ{eEukB<~AVzz+8LA$M*>OW9&8hFcC0Zt+rn@nDM*#B16^3I!1 z7LjvPDL%JNovo_=Wf`DSgk>ms7aLrPZqS_|>@ws6O5>&E2YakWSAh7nzToGxE=9qd zqi^{#gFMzdEsa9)7>z$bd<)#OkkNNEVKp%v5oa*N2*@Ilur|hOEQx@tP)Q&2 zHAZu7OJfPR?&hoQW+*cmVc6zZ*+A0PI~}R)rJ0E!lI1rCgue@wGe30}bgPJow>h{g zuUX{XTj*2D71u zq#}jR(;Wz6?X-K-`vQQ+Ab_>>KQPMwh@E0^j*Q!ZG!?2?R@Mi@khI=b4T@sG%a1zA zSeaLD2s(VDgo+v(Wp}KsD-`{9zv_HKHCb|e*RC;1181lgi?y8;z<8AC8?6iF8^iwU1 zoJv>uy6swy!#{6#ysx3m-oA|e%-O2cD47X52@t>>x`zD-SCjBGa>W}CQXvo;5P`jI z67sOYZchi8so;A-=Z5OC0l~>Ds4CUD0y<))iz}Cq7*}F})RcFg3o&JOboCuE=A1fD zteqDb(!E~Cr#5ieLW5HPe)9FaRQSV9Ga2j(juWcur|~4JM#o(FfN@nUI-u}mp0Wme zrn!{;HJM~Q+e5>gr?^t%K(Be+o zxW&iFm6Xtih9p6u{+2&FfCfQ=2-1I5bqz@dM>(2hS9trM{jjV`F%Dj3ds+RX`m`I2 zascJdmFNUmk+IAF>7a~@cIIYMQuPqdfT~GBYj~)-X~NiP)}-BJpW+_76TD!2D&b&>5kYYR z9!RR8<}zz;S^c7HOweV4Tfgc^R5cn23PV-o$8Fw@bV*G{+{^e`h`1X3 z2$;kZUUyQn_74>h)O2Gmdl^5Gp^*SIezEdrHeF6r!KE_BPO}jLCKxkL)zLlz+u5nyiQ}f9LJqM4qh@Jl4 z6a8;K9sz-vKdN+?sh~eY`*=5+hN0kbZHE1~vQVAL3~Ev3==W{o_^@N}7gbB zY!#UdH$}bRJI`L`GQHozsjA-u+lFCdiOVznjW?!avX4D#C)i(h3ua=b)ERl;3bDaZ zIg|AM`vQMK;^jP!SmHnNmCHDPFcn+pt7Swfo==5BqZRDk?_S>q18xv}BnLf--(A_O z8sZK32n@|Hit5u;OODfQRp2v$ExxTtyAQWboM(Fmob4~IYBkK%CxTyGoc5k2RDwhY zqR^O>XelMou0ceB@_lv6Z%Wn_o0uiLl+BS(r~H#@hWYzJ<;1>E@0q3h2Ya#u{3g#P zV;ZO~wfu)TG0xj^Qyns;Me9i{Vl`+NT;^@S6Ua@RsvSuG#hn5!x=UN(V{fKXZuthQ^O|XRU+Y zGIzgkQ*ew=SoYP;Qi=nJ>o}UU9Vp>uA5_->b`>4)fYh{5vYgI|QFh~tcWg_u5~)Wj zPbOrEMN$ez{_&@B~0*soN z2|WPo+&Ju*ZZNQqG(%D;a0Yw0jTZm9V@f0J^V2WxSPQui{Mn=f8Z8Ev96#>^o%Y&_`q7~LN#OeV_J?I{+#LR2K^o{YJ1h#Gi=v{k5DKVpLM%_fktmmossu&dOo5FgcY6^cGLsaJNdL8c1D zjAbuPXs)e1FDy#xd{@V!z!4Pgb-DQD_)$OX1b1CMnu=U*E#JGyIp}^~*X*Bj9qRSpMA;<^E3i@D9VY34i8t_>hE#t&b^*1-=F} z(xfWIz~CrSYes2#0@f^>RF=&83V4q@wKRF((iSv?Q7&i77Y`O18LxLRS(s(lS^k#| z5ZsY{K3^b4Bm5RcXn1m~)_hoBO{sAa9agJ($nanbtZ6JGyQjz%jG#Ytg9w z>?EZGEDkgT<|k&KTD3BqEp93#T%vqP6Q&l zb-Ci|LL-AK!Ag5z+VuX*v}rro=T=(_SeOsnt`u)muU4?TAfgVjM+dVZ2MZ44qpV}G z>yC=<55O(BxYw+_AsClQTZQ674M%27Re6jawEa@lvqIxi&S@8P=j&?Uk}bD#s;<@i z7Za4@fX3(jNnV0@E!@7#ZyDG9@MmD(y7U7-;~Ub8y9m3n=$2r!L771Z-fFi2w5UjKwh=+otlt=e)PhBvp)di^?D?Z45|K z7uDVny56@;}{r4fjLGgrck6u1R~QWr&ZSGG{RSCl)C}} z4s1Bf237J4WA9LX?+BEmY?d4;sUCQ z&6(j`fw0yIIi=Z9m}rbuMgec zuad$BDDSAO&QC{IWQ*gFi}!Z}d9fW`DiRI;h$QfD;?I;NRN#p-PFK-$Ejco9Yb$Dj zX1>pq=6Z8clH-_>x0=>5chy>|7n^wMSGk5;|FC1_pGy=t_nJi=cPrGetHaIFLcDI@!Kp8^keN9YDwTYV8g1@sfD`Xf@jj*--t=H zFrrnl0&}USsI5)|Qhk__M)j7!eW;4=B^OHy_lLRG8*qx)`$cJ3a>mA+x}g{`HflNB zQEb=D4hJvrq5ocwfuWP~<(K-+N~VgkdQdBQ}ir_S1c3;lETOaC59S0 zjnLQ#+YQ;A;vWGpD{R$R(xl+#LJ@O!ZMTtnDy;m7u>!R zI5>R+`0@cKIGUOm4FQn53}Y9+1UkXBL18$7aXs##uD+hb zwzOeu!#caV^SEN1wM)i#e^h$7OZk@{-#ep&A1{czVC1O0UZ}Y$4$wjI_o}6zB|sLE z3cozwI;;J1Dz}TVaEM5l3m%8<`|2kuH9O@bC_);OQ)$(b?d}XJi#!jXRLvp6ai@5h z;I(3sw%6qpAE?+G(Ehy&Zc5oZLSm5zvf;&ODLR70X;gKlvB(W1$ z8wg>21Bx>UHkHU=3?1%_nS6i+E+!pxy6eDzO?q$9h z-(T3lTBK1GCC_aZ1g-DdbxLH1_@ht-+~!{K-+SEr_~+?ta^E!AZWx)0a*BRsSI9E9PS0anD@YcF_6AFZn(?-f^8p*K)qzM zgD8XIcvx`={CB+9_uT4jqhRyLB^>1pi`?^}5&cQ>aBQ4)%a?qb)`nr@7+C>#0yN65 zByhk1tJB8c2p+{f~WLX{7DAgR*gbis5R&u>wiO|osqgAHUiwwP(d+p?^0Q-|&y zUEUoU@|u<}H}Icko>aHncYx>!Wq=g7{}4IHr_oEM`@(FIaF`R#z$Zh~5@U+To7u7E zYs}ZOdLhBWk7nBB+N-Ik?1%(%xGg83m#MURuCjb4GM^3Xv1XDijafP9oKyZyPjb82Tb!hxx&YGQJ z)fP9LA$wew*?|!S`bxuR&0M1$e$7@Q>=0Vy;IKiPsmo=#rWz8Ya)X#fxG=K*D?^^} zG#rVa*CT@uwVA8br(UyTV+YpQ*pLSdva)2=?>}Vf@*Ze_ijzuFf@2jDW~~c=H=oO{ z1RmC~yw^PsA7e$76w9^)3zjm={~YW zEcSf3m1y{>78+;nx$kT)*IyU*{?H*_osMo3y`fPyy$&TLai);x{s8B5ZZ7s{2MVkv z?}mtgA7494)s$@r20AB-DR_niw&2?Q|+30VR%>x`>qF1iOc@PW$eT zGnRT^4#$U}jKYX5MYRsp_wC3VR9c4lz>cLyLLqCrR@vEVCLWD|n&@dwc8O@8o!^ z0XRZVi-6ZaRmp-QamALGaQ|gjr;4O8WJ|Y*81>FNcF40a8Oe6tPKGAG_MYK4oV?Wsg#K?`ffD8Izum|CKf zMzj8dFf(o>`zQMRp`fE){_F%E%REiJ z?_`DA&KutjDvy1#JF0bE9(*NF=fI}}EKanP2WX&luwqhH5fax)a&BeS=vI)oR?n7X zi#oWDnRb=f*lDEC1Sltf1+*2YhP_B@e2#y95xuw4GZr?tY_Q8vMofRbzFSBKFU*Gq z{LqOum@Z0{lEqlZKe zU2M~6*L0B2duD~aL@>;A&{PqE26rgS|BXp7jxE~Py$o+whB=0hUDVgFWKZUb!U;<^ z0~s4u1sl84@e>08vrr1FD@8Ko&U7$ z5W_p(|IUElD5%_>agnls=zOTKr>YSJGno5o94(BA5mwx{^!+_a@&fP|7{cFa4i$*l zlm(-;gPy5L_sG$?PJM%#Az!Hn;6Lbis{y@AC@LSaX~zMI?9$Y?!a7{la&LbH?xP`w} znv*aCV2RnW9$|W402u6$Ckqr5QnqGqKd84kC8nQX07ZsByRjl8Yrh` za?Sw~+5flO`f9sJ81`=UMh7SgYj@vWK|i!}e0=uXq#OaLCE%0bTcOeo_x{*uwhnl> zfGv2x*EMeO|0w4WJix_H$-o>Z?ea=~p##`RFKq&-2lAVzKS$)KDJA=rpXYfO{`ifSVa;Xy`yWv7H98gyw;;bWqU%U)}(>`^8 z$pFb_05SZ(Vk_X250|SUQOUMz9H(t*YW?EX*@d}Mv@vB)7Im~qyEzx@L+x#ECXA{6 za3=ZG5Aod~1CfGyN6PE{Q2|8^LVKWOmfi*9i=?RY#jFg1QEef~XjA3F%H=Y^75{$5 z+8sFrGFdfyH?MvaYG&+tJa=icIF6s|1)bE_D%6$L6*}s!AUP*4enPjBN84*h_I5l} zgcP`pA7*fVzMVcE#Fxi*cqnJU$N4(qUit1IMIjzPD<@qF#@^r4&Ae4j7Xar1s8m;) z>lJkH3Iig!JVzqToC1IWR=RoIiBSSp*DQ;PKw_&PKb5(0#xQDT3PqHR{=R-T%wafl zHxMr0vK13Z@u%_HD7Z0JR?^zL#bk{;(evLB#4Rb=-NdWHk6{cRf{zaueOk0cO8C!* zVw_k@>HDYDL|VqqEU}2|isjmD$Pi=?9xC|hUOgbg2U!jcR%zZdJ`GDD%InXAy}{Xtk}4O%rOnTi(XveFi*V_t zf&~nw*Pjg&WK}7FORq*v|yL4pfXY7i`#Zq?y4~F$Pyk@zL zrFNQXSSwQ_yRI1f;5Uj=K_PjiY=U7xgpOsu?QHz&U7WVysw_}qcA=FtCI*x2dPcVSIHT|kMJl7KUX*SFC@hVwZa#@?iKzq3V4IMnLVjIw}|&Xo2` zOm@qgl=VkVl!I8Mh10+-e*vt!TL+UBKtqq4$N1@4!J||aZRj-Z%I!4^Z`}Xdk2B=5 zv3^@J!tUmv-c62eLIBTRMeB;tDMQ587VHfT!~>}QUZmg^UZmi`a!jr;~cAM?Z0HoGs&x>$SZ*)MxwjO1NH|E;@;M}Wh1{yFHxrDI`0sx zjDILEt=`;^!|{j#WTOpO2tofVD)!hJ`RUKobX5x{w^KeQ>X-75c=404NVN-6JH8wf zs1{>(g|Cbwq?B{y(N_RK=}!Pq$_cj|rD0W1xE%boZWX#+P_PCDfAJ2j{`(6 z@S@K{9!Z05KphD2Kl>@TyhF6YMg*ZEh&e)5&#mPbgf)X7{Dw2&;*$5&egpmZkN63U z1*!Yf;|(YKim`BIy9|Seuf5n*X&F8Mfz({(Y^5wnoWn;m@;XxAPe#=kAr~cZJ~?px z^F2E=%q(g}%l_3RGm&DM5y1dTf=+J`oiN*Qki{u($EY84kj3lFaZ&7fCdj zh`tTTmS(zK*ZR4;a>e}SON9%ih8@0NDL_f5y>@)&+jDY}z_K_qgKp|{Bk=A&X3{5E zt4z&!G*+cn)@|&@GL68;k`#c@p;A(u%RKZ75ICuBi#LS> zN^SuPD+-CgY_Fb8nz_?$%iOW3ty5YDy+SWzw!WV5UX^Pvno^yHUWaL&(#vsi#3*dv zp4E8LO2I8o!ZF#sbRG50k3k>jn!{TZXkgCST;Z7H{g8`2tQN;-;`M*~sLuO$@0C<9 z2jFFig^NIDY zV&IRhn~}OKqJHlmAm+QyA>?OIIHy;%?{Ark)QddBqObnE`+2zh`?EwlCe_Wk!0~tg z2KbFZk^Za zv^cxp!7WN)bZJd|P8_%Yu)V9ZFv%5;Q^|#Sa#Qt)qV?wK(T#gcQITD|Dd6)NC-($c%W>;wB7aD+U>lDS?>{hu} zEiMzq`nOY*K)I{z?qp7yit*b3Lf7Z!G_e@xs%G3qfBcd@Eo6&^v9jG*Ask(Hl5Uzag59Epz(O@By&Le!HIxt>XHE&r%VSxIvJ&KB}k$+jjR>EF^6hisn}roUUu`z5e@@9`2U$XKfawWkGfJbX9(4lt&GoPIA|(3nBSI<$+&{V zC<|_4BYyY#g!7wr7v(TPwQaOspEAv`{)d-@Acr*g1ZBB zaOjc~dYgW73h)l}BCAqK_yNyN_c-Cdx>MfGRFk4%5}Qxpu^*GvPd~e2&sQP(K?~9s z6$WgrXiH7=ROXbq%B(P@z(rXQe(2aXYqf$7~{xPfDWr*F5f6008l+#%?KY&+9Gkt~tch3Gp{Nj{Z z=rQf~*HR9Rm_pIN3@Meez`Ii9{ZrSu7b!o1%1$O0!mh7)=8P1DCDZlOk8c<@EB)*X zNejwET;_FU4!52A3Vh}v05gf$Wy>k`(Vg74FCP`k@5@3cnIe9@8Onl{{Ahg84+v@a zrCsGR{XXUUw0xvy+GbRqk&3Q6i(eQoo_vLtUOpN`#L@*1(8PM*rF@+jVFup(*0p(F z{_L`X^6pu?o6$$Y1>15ag}C5X|LG<`el7auU}7?jX}sO2Hfa2}&9AH;1Ou9~HE8Mr z?k*(wkJD_$=+L6_Vusg@*P+|^aMXwGCdacjhjaceFMN*jGAqSGUKV7U8JI?cx*!4t3Stf#l{2Nf)=K5LXOb5MfN@iClz z#7jKc=gOC@XvR71?l>gL#@BWFMrG?jev2RO-CLVw)VX3a-3ladIBP z>*w7x1Wkz&Ij6t8OTrp08)p!*oF&fR(8+OcTOj;~ zBIfq6Wat7ejoAF>d~gNo)oH-3Uar8Vx7vE(HeNaWLOI!Xv}Nh`-MP_DJ>T03{;7Of za7EgY0x%#IaZaz{{@OQ<8UM0jf#dxt&7%GLEfgd%~#EJnsZgzoO z^QU;q4v zi5GP$mC2L(7)@f5s9WVts4ZNHd~s8`r4M21Z`#n}a}T3Z-F+$*X zoYxyT1bw;n;b7~OEk5$U>$?{~!*<**jNsJ&X8!iaR`b7_9Q8kZPR@nX^P>i8^lIM|Ca4z0M@r>unOONJQ3URf zv}C)T@=Mhx(Ku`gUwrMxFN_{I^8||Bjn>%Vwt)r$R}*ide4O0jnj~A~pEG&YrZd5? z0*r$h-=C&GCt^g2BSLT-W;=&fzgu$h!o6ri+b3qn%K;(7|IZ@565T(H$m7a8;W$J3 zsLqAS2}gk=^2E}F71n}jC6E4XaUw&MaZ{T54eZNG{PWoD%SSr`i~{Q}CH<}~za|0+B%f{WOo~Xs90*IGwP;J^7hwlYBF zD!ZS#Ngavj`J+a!izpYt2~TniZGa?H+}qgg)=AQGqD=?o`7!RN%u*ns|Ds)r@)OM; zj&r&g443`a=32?0OfMTTM{?1pfgNi#hV!MaOnQf#1Yc6yMU^n;=X4YPV32OUk7|rX z189eJ;c`0>4h}^dBXgUhwFNS*jfT)9_BSe-R^Ur>j&(FT_z$tMD?F!O zIO%n9`<#QVm{V}5-G7hPW0L{(3{wD=`rSM>~U-N(*Rsn`+0d`?J)uc#(ZGJDkQ*og2#00yI z*3#$xHsla#y<`)$%i`r-YeZwd}INP2roCjy)?ZI9B8|>pFXk zygbb?ZkatCJEtF89)EzLh1b2Y$;X)__|wK)yeyC3QM+4q<2K$o3@u!>8s#pu9&zx1 zB_K?A$tWMm0#=QrqvmM04uI$C~*!m+Gd9x z+zT?MGiACSz!E=;%i2YKCPJCGeLsC7EZ;dyw4x@4vZ{Hz=`-f!}-BkzZZfGHp zz!r2DL2oWKci@@b#NiC-!RJ}dfqN=rK=n3CHpL?Fw)NRHP)7rn^T?=ONz!*d^i;Vek%5&z2ki&o3Z>6al}`S*-yBHUH_+8W@cKToD_twjiQQ1g|No%FoQ+%hF4jjlA5lV z@4F6KKZUw?^#ikts97JU5+u&rR!bF_dO2!B{ZX?vAQZGq^Y>-K&2ZLoZ1{^wzeM z`htxZK7-5L65r!w5_??6Z%o5xE)FJdcdx^`hYr9^52f^>IxHwe-p4bt7+4bmMV-QC^Y(%s!5AmF#q`+m>!oZorB z|My;N&M`;LvBtQrI`G3bp<0cmaNWK<^h^{O75Qv29tB{^DGG2e+Po}R%?0W9fB zPSD}`oTfEC?#vaO+PltaFjYs|ihRE#c%sPLnEQ8b0QS92M-su~7bx7X&v36~1m4YE zzc%f>Yc4Sai>aS@`?t;y`7@Te4P0r4KTM|w4z{Hlo?&m)dI27Bw&(qLQbjMQ-$oJzu-`qb@c4=3@PwvuTVr034;-+WnO$!_nZ)J= z(Wo0H#i=S$2&M_I!jQ_ECa6ZEO{V-Rf?h|)r_Ev-AoA(*U3TsNPC^tdhXplUZo&~z z!}{Le=>vD}7?2a$s21!>?G=%K44uQjxf1@34=}aya1i-f@)vzlOTa_Fuho@;0u8x` zPHAr5L}{k3vYzVmVu{)~DCI7RqDFV%^DmqOh^+#EEr^0>w<*K{@Gg#Api#7{n!-5g z;|-%0QX|>?=Ls1gp1%f^09D(l2xg+Dtt=}wF5h3$krWoHUEDExK-gKYsJMX zjeMq+g~FD2%6asNQuW~AKzP{ad$n7w-%bmY#LY!L7i`g1Tk^R-UfHLs8Iki@fl~Xf zui@hnOg{@@gnC6gje|6uctKLouXPxuyRIU|9(+CYb8mT@y~Cdq87>_mO_k>zIK77% zbwqt7f-2@X}Eni-dE_Ej-G^^jR`w(p;{zWTXy4tp8Uo(H4=oJ+?>@tM&vQ|DQ5Q$T=GoF zg4$J2^5~N76+ZIT7gupzhoyRY;uwZd4trj9o`44Jxdj8CT&4QDn%*GeJ4RU}$q{a2 z6)0hFgVbM~N*4j%=t!UAb!2gF1;ihFv_gH+@aRlm^)X(^p`Z^kNc01JX zP(MgV26PM7MzlT!ApWXKuhas!Z|8gWJ`be$$F_$KDbe;A87z)WcFIQre$}GmDW9b7 z-4V?%YYILCDfTNqKmnS~R9*h|TLYNf>NtkW0 zSeETPFhF0XzvG4Y$3XNzk(ENvC1aCf`C@Xoj6^DDzAfY3*bRq_ z@5s^V`{k2LH<9ofjH2>(Np#*%9?CCU0Mh=hrS3|)BcA%7@^+I7=qagW?(>cL(HK^a zcNXZ15hT8S!O&y;>OlUI0Qk(TM?K;b)^pbN$b2G*etZi@SvGU4iAIVo1g1@@+lFjO z!xA8!VzEOxh4Rz=A=_K5@^ay8W!F0Qa{+EE0o_k_TphIB=I(U^nwQL%nWi@8#DVWm z0n_}7>KpR{@mcbZ%M(HpBXTdZoyB-&X=On)t`aYV^pY<$Dc0Wxy_O?0{6 z;JlcO{F^nhzd4PD;t9IEai$M_DY9?}zJ{O&N8i9$=XOAH;rEZqyl;D#YFGqB(Z$^z z3=FBsJ^2PfNkxs_f6U8G3aWV!URHZQ$QJ~eF_wsqYKljm?O^krp#%+(?<=lCx>)C- zwfLA9#Dt-jo0&cb5houKgD3D2DH`bZ4W=rgE)K(0*Q@GEC8E(_F;gyg0lc;U^J@`+ zgO{`$#70m3ekz7>c=KDuFz;t)q0%6rLtVz1F5Vgi0*GF(fCs=YpHB;CD0TVz6gV77 z7*5roE_S!(edi9VP6NS=+`O-6%?-?@LjW-}XS@o-M29#+)s+fgLFf;vv`F?{`P4#($X#IUgxfoSp$Gd2ySWd>PP60ky9_domlxvWsIuIKx}3SD$7Q0(k(p(=wI{}_w{4H zd!2B(j<8C*=0xH;@Sl1A{NNWL?CeS|NoE;*u<(LDSbYH6sc*Z1iR{pUx@2}%NRJBV zd@}AUgqTiVgI=Ii0Bpgp8f-7EI&hMfwoo>-QkR2e5sSB14b`8P6(~54E>dSwl_>!ixA5noIf_K6rjv)M zv`xfARaPN!#HCyi_~O;}cxMvVap9ES+$sPr0ic9auSzKHr;6VBX(*KK(4h#XXK)X7 zL&5j9>Q$<1|2`}eRu`_~b-2jcTOE z0ao_cK%?YB0YLm82h~6musb#lPn&I(5alyY6FwYpcgJ;hf7O$Nh8$y6qOOux90{Py zqFKpb&rleylS+U2y^t`eYHB3#w7<+2f1hTN71Yr{N`7!*vQq6hpL!4IXwd2(^?y7q zTuhU=FoRH|;+z5in`d>g7f~TNV)y+J=@{bG-D_eBL>kV3Z!2P*eUvdASj}y`GSWjf z2*l-=KZu%hSGXn%xTyZIr~>u^ba1)nw4PGNM<^!P=|;Zj42GnQ_D z(o`oTl0}nXX-`wG4uDQA+3Z&Wp#htuvN7UXU4La4@UeFQvCC~M(JDtaDcY%&Y19E2 zWX9nU%sY4I>+7Y+qivK>7pKW7DT__^`~8u)=Z)J@vn8tDHMA4v0EH;M=b^ME+~~?xVVvDMuhEr&->X$I-}Hvq6N)}f4yDni*9bO(U5YVP zj+|!vk{@Q20~>Gar!d+T(%j+a6_6N?r-`||O1Q+|aXTX@U5w4hnS?26QUIPYvgMEC z50~p1ieBq>Pr|+orrpsac@6Ho`1Ri|AA}2sdP_mu`kg5Vu2}dK8)V``1iJ}pgt3p2Q%vQ6i ztd_S^hh~qp+!%njw{k{w&Udh(=h=-{bSaBkLO}n6S$?kG_TF&x@M1aZ;c8Jw^Vk8+ zjOweD$RC?ETMo4|clF;-YWZD@x08@i4aUEP7N1>!O}ovk$4ZufJaH5%L=&8|D#{h@g3qxYIp zzcr_f0tgwpJRt!mRhKT;Gn1xjNO?HIq1h5MGgSrh>(9@HdnW`%BLcQufP1KpDKrI< zaCJub+Oya6+H+{=ZlG-nwJ{8r!xGh&%_t(i-MNarKz=t&U10%;<@xcJ19W8dC97tf z>lo;4EUh`3|AdDD&@VI}9-1nVQvJ9(7S>C$x(Fi2e=ZbEQA=j%fW|klBNqS08p2$2 z27*X-^igsy`%y-74iG7ac=}y%NJMJ9Ha(^ReUxby)}z$EV53tUx^c#+o?{TICL5oI zg@cg+!UgH&dQ11m!-A@))W0_Q3(brwwH zry%F-Yf$!g#~v3tVlZj41*|p(t@57QvqIU@rk+ocIeQE}0KDM;k?{uz1|QwQ9zkvq z5%xdc!D<lQXMq(?7tU&htu^N z^cM*8%cIELn3dyKvug)v6VmB~WOp&@pdKDU9oGa^*i0nw!w7wR6=)z{2V>))-ss%Ff#>>6!nsW$=wnh-M`lsr+MsZ9)Q<}3al8m#Aj}C}8P=}2N@&&U zEY?Yj2ijN6$!(bhpUfk5dA?c%L+=r(TOh9rPDDF@`NwL^FPtsYPp zx7}ACst6%4P&>WcqY*&pR03ZJ;mO$5XqclFj%$1r8`P4)GP{Y&CRk|mvoEV;0QT=C zp;i$cgTVUsD#uoz`_xWeY+3w_sGkuF>)7%-Tdh?;vfpACiIDb-zS`fPp5IsdYmW>Z zFs;V_Aqb{OkScHtR!B)}%=~R8HNaVxreD$rew#r)uuZhYR6`dRx3Fr3a{TQ8!HURg zUC{jEm7j!vXjf(E13dn>QcD|4I&J8{Y}$EgX?N4!As` zjN2OmXD#*RGm>5qEVZbfBVv+u6{{HViUT~{!mjUv@U)ce+NN8ZR{w}a2jbrjEZDh`(T5g6awG5si;Eyh5nr&slZ zcN2K7dGtT-VZ?u%h<&>X|A#nO1c>=P)6t^@RZOSwV0>rtTOzG?Mp;Sx10+b0n8HGI zUzOgLuK}CbydR3pq@BhMG2AP0%?3j#9-}43e%2*0nRjC}q8Zt`6JG91bWMQv!4*>83?P zbS_M4<&82J-WyrTI>YhU`@tW)x?rEw<*1R_gGjXoe`EdL(s?>Nf1w){BtkY!WI~_} z_JauZafRC1J{#K~$AgBrA2yg)v&2P%&m2+_0eD+w>l@1VNuy>Dxe#bNxS#|$d%dW* z_KG0uYDs)1O3tNn*y6!p7`yBkCB91q{|Gk(mCyN3Rm%K7^^E9Pz}Mqs^Q2>Ps2DokL>`= z>FA(AY}W9<1KH6wb%} z;-LhH6o20 zHo`kC8q&_WUb*?=%=MJ+&QrgA8c?~V%cT;ZmyAjR(EQ(r_E$DDu3b$r18&aE&=&t1I-p~=3_%*GsCOiY-zB9h5wCfk`BL|soraD+(QB)~XP6%c|IkCX3sIEJO zO{8S0G9ZW{Wzv*V-I9rT2uyPvTP~PA@4AyQgm*hg6(XVtoQYRA?=6+%X%OReJd~Ab zO(g60uQpXjvylQ{^N&7=vAsP+o28-)6QAD}l1T%3w~Rmpla+&~6zOk7(1#bdHky

t%ok_$B90c~Uz$j>_Suw>gwy13vcR!^oY=-hp8Wqj>YQ#@FwmjkOhgdmwZD?9m z!uD&h0!%&WH-)Um3bgdh;rnn9t@}k5qM@vCqyy!NV@u=re$q4YI%Q6}HwK!;F!+i% z!eEFYW~P~pW2?h(KU7a)h?LTc6~|VDrd#Xp;q=*z_;gC_NHXe+xt59|7EmC$BKh^# z&z&$6^6ZenU6SZcWSf_$IAa!>hELrtxc^-fvo#{nbMXWE51Qm^i8OCYR93KUnkg@Zs zwuZ_ihkYZV^$+^N#@pn;0vt4Sm~(c(Au6S}SNPXHjj-tfNL~jYC_$g;J7JwnZA`sb z4ZdwG=U<>|ApQzuOsIqmNh^%Zw&Ww0ultWlo~R(5%=_Qm#ja>|{9fmYiv|ONEx07J zSE9vcX%zK_{)N|6;B|!vrW@1xSOv(N<3l7FPUXYtN@`l}Bhsh{=mOZqQ3^n9V!5-K2nn6=hR7lXRa3DSQo}EyxOM;3 z+PmcmJqkR2Mt>OD_h#r&3bMK=orSr-&ew?EL71lz7iJaRSh&>hGI3*c?y;Y}J?7Y7 z>XA`nb>jEa1T~uIhx!j-K~5(NRlM$Z0C$Q+u0aA+4j%{e^1Gb=2C-u~fj3MXM{gA6 zce=|+9mU{X3PZ=HTPKL1i4PqzoMx|T57?5`3?xy|%^luHh^TG)Pq4jz^7Y=zlL=*n z#-flG?rC$xH$?igunB# zRjbq*E$AE4yBA*3_8Iq&ffF-jKGM$&JF$_8|288;z&JlZmA`Rn%wj4?N4wChVhE|0 z!SQ%}Nzr+7Nk`8o)x#mOKmdydyatsq$NeLG1d&$eK&kodNp@?vIGC|m^$C8CD0 zhlh$pK?0#^Hfn@1(6Pzk0q(!^%1Jl|=h46^7Kve*sjIK|J5Q?b&*x}mL<58dB$?8{ zMVx*;y@cu+5Dkxl9wWN;Zg)teBa_>Cgh}d3vr2E@*~(8Enzypf>8Ijy+IO9Ezp}h> zT96zW%tlowyQXY)qw;r~_I!}BUEit8z7e&fIf#~{7MvFP@Mq2`2p09=<{IduA3-w- zQ|NK&!G)zg=};=-0O*zas?0vhsAcQf!?+E_W-#A_3UBKZ79ig1T!vWPjdq{BaBRnKr91C5ay zD|u#?xcT}b-{623iprY_s-o^gH5YR0fB$mKc7zQ~lS#YdtVy`i6`s?Ak zGAIa#^@J!nerYA52p0`I9PIE$EhPObm_Mz|q}r3eD*}2Foy?28AxA*YAPPiVqoc;1x(r0C~!D;VVe4b8Dq_ zXi?lyFWzj>o)mtFfDzEcLoNKpU1;<|H>w|)xSiD>pC5zI;+WJ~NnMtm!Ha~X1Hpc~ zX09Pmn!9+!Jbpg-bu%@|@@e3WJj0O{GJQf--%mJVdyf>(LkA-g+K&|8KJ`FHKb}x0 zc1{rehk62ywb-KfXxOhLtB9I###G7qK0sg}EAuSWWk9g?w}O5CjNb2Su;v8g3=B$8 z<@9rbBBqmbYHb{9@+Fuc1011oeOzsXyM}$^c%qu4D>Oa;eH$6}Q#&Y=_P~Hq1L}P} z8ZK-7=tUybelr_}-0KW{J((|OSmRTWN|DlRw+9p#l8t_x#PShe2@eZ0hanQS%571K z9h(`8om#G5(q6(~v%7N`xPB}2Rb`{y2EH%P5_!99&uN^4hO@n;6fpg+`Q)mmxf%f? zBe+L#n(?eI(jM|~d>ti)oHaJI<5PwD+4`UrQ%l#sY0-bXI6BuI0kXsu<98cNIV?zd z6J3(xy75(ej3k3?#$;@t$lE8A_lU7Er1O-^@&|*RZs?fDh+&k704<Kqs(95Dek zIN}BLlywaehCgx-ZWN#lErhrhg4HjQ#kX=k#6OGuXTiUHfuh6%4;*kF#}F`py{ zG`eWNH{$yV71U8Ns??M@!Oj>Id2d1MtqB6MWdi?BV6YVy8IQwuE8q#dc!sAl&lOG` zA1r0=J+K6T$c!pgw>(G~%{5FIp#<1V<(F>`}ddImliOd1a}`F zUFLDXi}Pqlz@UeEv$;7S@!X-in3q|swxt7Pe+o5F&rZx*p`T-`nT_8hABZoGdA?)CD#1 zB?YoK`y%&({d8qvp^I8!tC^CyhDB2l&?uh3Q(p#ovLtle+kdZ{#E*NZ-%yivVQx+aiaS)rg*13)*hhkKW;=qc{X zG-LWH=wpX3xw$6-@_nUkWPwN?(|xc27-na~`Vm1vIFg#Ge(?^Loh8^Yxj*A0~|JN8K=k zb%n0wp^>P`OQVxwNoFznEsTL8pgtR91p+Dq!_m@M7DO@Ow{-Af4~(9ejgn*szpgDo z(QU>`2R|p$t8N71D`>s<#=nLwrG~poKjp~efcrvaWZq`tVF@9pMpmMb za&a-xqR9g>qE>?^Qp$ZBcfHU6dWcKdGR;Zm8*1J85C>1a!^$^gne;KjzuZoe*OkqGmPLEMsJbLR-pB{M zI}KEj1kZ&e7Y;iPH;9#g^1Gt#I=n8o@%+g(o&9>xwbEcNrd04}pBM3^84h*V7NxE< z`^M+86p=7q?T(0e*+!xI{VNtWJ?4j;&-{Ui9JpKCzEzO8v5|VMX&Frh3?I@~E)j-& zqG=*VNAZo5(IBAO){l<(XZLRoXMW2$t7d&HaR4eevlU*qMdfFYPRgpw-i{CpIYasP zDsSkQe#B%*>IV;?Z@WD#vX&pN;E#%)gBkZ7k-Bk174uCzZ`(My?NwQyjpuz0N}yW& zl-4}6TKnvOFm$!1YR%+af+%J{j$*%^(ZqNi2itry(bD!q_?)PgsKAkTN>mK1!D*bK zR6rLSDte};FjzzTK*cw`T-1s!X6Hujm%Wwso=yeqZud=1b~P>5qDWkNVo=1^Z^K`z zo8)eXBN%EWs=g*iVbSGM;^TJJsVXC+l{9ePoZb!5i8ufQ&Lb_QEa7yymc z>$^CiuY>QIZ# zTRiW$=fDq##$dOsWYZ@@Mk}63_$B+>8L@G{mRfp{dY#fb5|6R7xqF^dv-dIb^MBsZ z^fMVBTG(uS$0-_@HH0ZTV%tM$iZN)%aX7Z(`E#{&Z*`YcpRb}yo6#*BVN|=)Iofn~ zzbS>h<}zntB||#Pk*nzLWk&WAea*(@;a3fc>#BG7)e#!g3mmG9K41z5k>l|FMeuwQ#uK$H4$VdgU{ z5E+B^zw)s^%)0+fCkaIxSh5#``5klFb)uBDXZy^?&E9^MzMAqBf)8iZB>DEvLgvZ5 zYx}2_3?F;O5cNPRF8?DfC;mQe3t9rpEiGmIb}q&=+su!+mG3w|@!ri$>@~*3*Mbap zt=yUUe=Sbj_;mQsn`oM98L%?VQH#;vLjT$BA;L~=P9$OhUlWm*9lOfZlp}YEL{G`{ zet~g;E0`Ji7f!|=?wI}ttP>VHE-7s%w#1~P=Fs%S#JN~hjqq&$nkX8=NnY?Bho7UG zBMS50eDSmC`Oorme-$&U0(wN40*ineeJ0dkx7NVp{6IENvjhFfzF(vDdg*3vsDEm| zl-Zs;i9~XX+-Rt7FPM6o*j7yzl4wJ;2CVqx9U6EZYSo%ju&*Gi&S<87l z_jzm0L(11cGN^vHK9lZTCk@>>G4_jqltYDiKW}yH?k^eR#>PLjG#eG?7y9zQYrTg% zm$I!r_>liFuN4+&c@4e|p#6PHcEp}e+1yjGo*G{;POUGjgvNvMEUZtTgA$08&dGxX zu-Yr&fz6@2@fOS?365|c;B#tcTYN%y^1Z3L+h185MV$9D>IzYI6igINtF!lBu(kap z8g?1jgf*L6r4zDS8%aP|Yjr9Ff}n?4J1{==+jmUXo2`gGNw^=xKI!EHmZ(J*SR&zE5~$w`kCj8; zCoQqN_Ww0C2U@kanaeNthS!?XIb)*tbNgfj9nSQu@8u$yow`4)DArs?WSNTA(Xul&7>C}135Bm5Ef?3X7@STtwWaK@BZT=Y zRrMC54;*|9?O}qSF`1BxBQMJD;7obiBW8X`%}@{{yXsHMQieK}@#>X)4{zkUQy+S9 znKrC$|29=fR7}Pe?~9$Mw3h6XttVn8JF;fdRh&2dyC<|N4|c5)X*0v1RySs#0b;)W zakhe}z`a8&@-}P=QBC*Gugza3X2#&{Q^HQ|p4=LqmBv_$KXW8t4)lP=bUfkio;e9- zx*burft7Yd(v-{Ue?F+A3i?$S^jC8}t|5d86WT2t9di(3KCPe`;fnD4Hx1|_7&H&Q9onGYVY?2#u!+<>GJ$Ta=y{t@8V5qsu?_=KyXn)~NxL=iIS&Q$F#yob237Tv+A?%vh%`5B(jxlnuDmzc0-CyX1RX+;mw3@6ot}h4%;!r;y0dt2$IP@%O#gs*ry3P>JJpnqISnV$y$HBK${I=FZaok*oy_%ySCuCI1{q!f&{f z&p+3HXQOx?Bx+hIOh{>Hq^W$r-1q2JgewgLvvX56DY-j5}Y==fLy~eSE?E=AXoUfB~xE@+|^EW zWV_2K-_j3TS-2}cFl#F|72*(shwnGp$C}Nsdc$O7N2WjunQmPonGsDMJZOdt#&a8wkvOa4vs;9=Te1PYpp?^To2eXHkht;!-4tI_)6O5#r z7v6+n2@wlK_a_1L)UYnzzSs%ycN)jLW@EFQHXA-KnH;u4^leISvv%>cTxldt#gkTQjE*8$9@2>>y5}yi;FyMV++Mt0CA5- zF(5OfMWnZbc%&~1v`@HlzAZME)od$%*mUZGkJL3k-k3FSd$PEmMs2=I(9Kl+ z#jF!qt~9zbSk_~4_K6x3h-UoS@Jq-s=~l}Y$6isrgl#D*AW>?uVJ$|f!Z{TWc&4R! ziVM=WtpNsuhfc-DV`Y_?`SamA;~W!6CSz&Lee{Gr>38=x6f;@oYCL24b4Nxha?&$q zGbQuGs=|wRI&J=zU&+$8G#Oh>W~f(~B~LC~^tI^uTl!fuTKt<1@H;Kkux?|C3kFDT z566C(LzhS>?}cp^&Ry&~afDb5L(8zd^par z6sftKdh*P@-!s_67;Z;n6D0fqbud<1TcyOLy%!dfFjG$Dcw_a*9G|DMVeF)VlP<}` z9PD95!5PZ4>d@DCy<8QIOYYDwCPkjU-#3bL=%mGJnl#RPeyy!iG##py0A>f`{Cu1K zfe*?9(Dl2jIijqQn|&TS?S}HN82QU-4?5N`;XOB%s4I-DXb~D~trH?_+$j9-@`smQ z*YWcQXgM=NO&#iF1KvG-qEI? zWc1t0Vrry$w{Ukj$m$^%99`z}_>LBkmP75s@u6?PD7}o5?=_$7iz6^J1EqNfkj3Qce7lp?({V1N25y%)`O??p{j0iuOcDTD0on{K? zI1wi=@yF|T_QISQR2pACxpGx_h{^5u4Vi51WQoo(F?X*n?xZZ9AevXa8QoOk&5S4S zEFf)tN$h<+#^J1oUM+TrLDR41>2wm|3G6D#z(I|sb#0*nT>?Tk?qAG>w`V0|x1D9I zR+hNYhYvFbmC~s)U+_P^Vef8X;EtO60N7g}+4`hX3bmMZ&diX7xoRUlC}aF<96MKA zr-sBdPA(muM8&hkcRkOTRxAkWms+TGpM!Y73uuGTQrrZ=I8Q}cce&N``S)!vn;kt% z8CKUunUnnc^xQ@ax6eM~et2m!h`;t%C~j*(k+oU`zHXn4Myf|61_NE1>@%mz*%S>- zsu6*9T)&8Fue%+t#I9Ek93Gqtde98NELNFBHC-D!6?(=M?K7X-a$8$-m*fZDT^WeQ z+vHlU8SyMY%n~gpv5mL#O1b=T z+^aE;usfyZxP>MiL(7{chO5_?m54orh3fh61jYVsicJY&E*Vfp#_pFl@rM()`x#$2 z|LXGQuC6V^+sE)0HoxoT!h^yY0smVcAAihJ*EriyOE{1A-$fcOzeEqTj0w%I;MV^UlH zIV*lGWFV3ON1-2QZDLlc8WE&+L<(!nYt{2n`B6G@Z^q}VNnKQ^dN%R%H-ly>@h8## zY66{=Um3!2H``HC80C+b5=A>=a^eI&qv7=Y%yNm4APv(E-AAWK@dhoJn%CpM@9GFanq23Vuw+VrS+ zO%*wAyR)ae$hfgzR1}>MoV0bVt~xwt83@}B6HZhGvh7pHaw@tbJ%-^sZXj~%4PooJ zdp0}0D~XO1ODh{uhFnP>~O_5xI$5e#;aAg}PAo_1huzlhd_+8qQnd>Z9) zX1rSnP+Q6V@fPor)`P%sGOW-xbY+|D06>GTX&avS8T%mL=tsugXsR3vFOv_X@#lVdTnP09oSA%9Mn*+^s&)m?>HkLxKOun9>J>jq$o$K2V zQW;5swj4{|#_USBRk+NFwBT_${?uYzu!icNMC4kRPP<UPDX!GM}x&&h#n-lZ_ca*1W6HJOumRW5rABED$*?~UFd2?Dr> z9gM}Bj;!|L0QVtWH|8d=e~;|NiyvDoWaow<9S1J%la&qR(YK-KzycsZXR2r!ab_U% zkYBNTlW;Ajk&9j5jSU@=!ehzZ$<2%*f17Ckn$ep+|MMYGLwn@!o$vfJ!k=hS(@N@$ zVE`yc`MuE<`2TEl^^dy$*ZyXsXD$V-X*j+potF+fA#>Lh#HnvmHndJ1nkaFxZ$_k# zhsQCdO#M9UCRr@n8cKc`?KTPzr(tt+B+?|)O z*Bl&J~jLmqc}axpGZ?Q zov(`P42W^|lcp|ya+~fsp(3EO4ZmL3vf{&K!eqEf3EUM5FjN)g#KRr-Wg^E*8TJMj zCA60%=Qiz@Idf(X-<_OD84Zmd%XGWAIaep%r`zT&r}u}h(tC{cj_UMqGkba*eyPks z*Zo@wR>gX~wjYeW*>~f8t;h!aEsHr?3;Z_VSHsKy?Noh9FpeRDy_8*#XEh>+<-tlpMJ9b z*XY3WB=$EtV5WHpE4~(4dq2^0G926DdQkyd;Qy>^8;zMEgKYV`X$xD~H2w&MME*4M zd1K;yF(eAai9f&+EF)y9YOqMM^3)?k7o}dJYn_#v{D`kU{;~Xok0O@8`b$GpBp5i|8xgPx} zI5WpxnT3%gMRxTEbnW3$JcFTWVsd$bal`b0;$HGo|y4TaEN)Bvg*L`(dz4LK- z2LAV9YricN^E$S3oV+Pye>-Fw&6i$tSJe|fWChuAU9qhr%~v~e(^o`1FI@kJ)a=|U zk&p)5$bHh!+7OPo1+a4YTAJbw0v}#}op(InEmw5BJO(0S0UxcM0nqM(MIMrGVcY=L z-`ZMc@h6O8Gt0}J0VSl@qW%woDIR!+G-kYfXjM6WCqR(7RAb=-WPULfVjBF$Fc$3I z{4%${_JG0?_uITG$~gHYci&x!(jf7S^=u*JvR(4uaW+bv)hXw|>F#BwB^mJ7#htww z!N7F#B@diLa4FwGwR1}@ds7hvoH1{JM&Tjk=jhapIa7y6e-u8KpR3Ll0FCRCdBy9L z34Qzh)^CIBXdf!M*#fCnyWOz=bLx#xb3XMH@C=#(oD_<{p*#LLbTUuek1j8DusO-u zODxOc=ZkD;5rJ*%d@Pbg*#2U;L6->vDyVMmDLLW492c*AO+U`yf1d>aXVy>lW zb`RIAF=2>e4&|(T*N*FP?l-ax3m4{Tpi7J#wzwtuzjerFyGQpwZZ>)b(%PzVo)~aS zUoX;(0jESMNd6q6XGWr!*35d|_A}FgHLU+r*R6-Mmw!!{5BgqjWIH$CKv?5% zUdyxcvkGH4&4jZq9||;g0x982*?s+CQC_yNI@GLT$`Uf&)y*kjjRzBEyd4>V3YTZM^&q8%Zm?6PXL!Q2P%k!U_z6z@_UYB_)qlD^9^qe(dSr94YZ#sD8oz z0~~PP-!FxEy!?Dc9Ircr;8K=qD%3GEfn|(DzdXC)HVBfJhI^K>X25};nY&7+lJn*s zrI#5-S3kc$J16`obun&QT65Ccn~%zIAjZD{$3+{@p{WV~DJ@Mh`xV`zv-h}25+=(q zz;E)11NCOWMhPCKtU3ZT^{$(VididtH43hMUd8IztA7m{+7@a;c~PbAkHjoJrmB?j zCRxU7@-x*yyG#)P8Y)d4$Jj$F>&-c^Imu}Rd!mNO5K-+m z;z2x|oc_W$BvZ{~$!TCT?UlP4m#pwc`zr|`z#GzI`IKdkF21cDuaVv}OCyhV$1zW% z%x&WFPF;tFod_WQC9N{qIi_!vx713}<#GfKmk*)ZHV=m+t~E!*OzKVy7bK6;NLNWY zo_F%yjow|dILw(+dpXlt6tSv@*Yunr=7|&nzl-iz}uy z(ogPIRNzRv7pP{Q25H0uFU8uXxe{f%=pXU6;Qs;TyawXJ=yScQo z+q0wKBxFw1`)1dxF41Xoq1!(`UJ9V_OqS=Zc;|>Tust%h$M!0$<)g$ur5oRESOFJi zG3>a{uLu*ak+Q7vc8Mno^I~bwg4<)d-uEetOm15E{P)k%Je|+8;xezQpaF2;+FzAa zAyQ30+Q}~CO?87azmma3)6ppJKhMnr$(jd;EqxOB zn?R-5co?C0<6g@GnZBV4Rd8&NhmuEsQ2mk({ZSS0$|2`-$;qB)g*)pGRcl!V;VBu_ z<1g8Rk$M8hEAXe_CDp73iJjknLtGb4p-^Lkl>B5O>`3{0hAfyNuxj|4LKaT1n1!3% zSUyBJVH3_C>D35L3m2xqcp4=Ji1qdNFKw~K>t5=XRK7X!mS?c9eP|t&oMX6)l9A`v zZ3S1$*6hSF0L_ha00DvBgJX3mWy@(M98cp^RA+7}r>Jm*FDi=9wH%B3G)>1{ukP)} zj+WZcFv-~!HH)BZ_Om+uN3Y=8#&8E`#$&%^BUQxH10tx*?IG}%<>yh%Gr}Tn;kARs zrS^iS8nvnZo$Kl7Q6F=QMJIhqh=IPJJak8oIom#(EwPD?AYV2#*MUG4@DNxZ5}-+a zgkCl9xdz2KpF{c*@D_Z_CrRfl-QuBpKnwRo)X4&SY1hpe$hG406qykBqmN)`r(EapFg-`}?PF}nH zI)=jowi6Q5HEnZQjnw9gi@yy9^VoWfEKlQplaej7!v(Y59U~oAYulbQ)=Bo0OKk3k z-%buqc=(mJbQv{ekPd@J^ARMD@YW$yt<6z;&y*vA3oPY}zL6nu1$g-h47_xI zojo|NZ{g>+&LKdfY+S!_;B~%UjwGLNS6pZE2l zy_zTeIq`#*t$*=j76=4wp;}%mU02I%d~pIuF;=0EFBqr@1X(Jbf~?5wy}@}r&AQHz zz_T?@o5b5=0LY}kQum98oma1tpL-qPh-6lH=a8K^^gw%@kbO^(uknP5Vq(!%KX)QI z@!82*TTBux)2NvaecZ#uq4Kh~Gdr5))n#S|+Q>0vN7A@s;tqS-6N|EMXlybwu)~}Nkn84*{*V)rT9013KPg$_3s?ygSzlK zxH|jY_BhvRMqWTjj3IC!vhOlg zd5g&yM}i0rUM=VSU%ncGyzB1Z0Fzhs++W8sg1^Vg*NHo&PvbBcm9M|QN8kC5tOfH_ zBo!>C1@ObXaN$QnjI5!b<$ZEa4Q`-bElo;-|3C=(3j2DVrevs-ivjrIb8yX%gtV{X z7S01E8Q?KNg=M6x3zbKgxly=w+;>sFPAqbU;P$DjFZ%lX`!Y>_4`c-A@rm~V?$y%d q_#+{pdgUKA_J7sOH1$7H{b#M*`)2V>ot7IA@Y!zfVpmG=j{OJ5#|m5k diff --git a/doc/source/images_src/deployment_steps.svg b/doc/source/images_src/deployment_steps.svg deleted file mode 100644 index 1561c9a9e7..0000000000 --- a/doc/source/images_src/deployment_steps.svg +++ /dev/null @@ -1,2766 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - Nova API - - - - - - - - - - - - - - - - Message Queue - - - - - - - - - - - - - - - - Nova Conductor - - - - - - - - - - - - - - - - Nova Scheduler - - - - - - - - - - - - - - - - - - - - - - - - - 2. Apply filters & - - - - - - - find available - - - - - - - compute host - - - - - - - - - - node - - - - - - - - - - - - - - - - - Nova Database - - - - - - - - - - - - - - - - - - - - - - - - - 3. Compute - - - - - - - - - - Manager - - - - - - - calls driver.spawn - - - - - - - - - - () - - - - - - - - - - - - - - - - Nova Compute - - - - - - - - - - - - - - - - - - - - - - - - - 4. Get info and claim - - - - - - - bare metal - - - - - - - node - - - - - - - - - - - - - - - - - - - - - - - - - 6 - - - - - - - . Plug VIFs - - - - - - - - - - - - - - - - - - - - - - - - - 5. Fetch images - - - - - - - - - - - - - - - - Neutron - - - - - - - - - - - - - - - - Glance - - - - - - - - - - - - - - - - - - - - - - - - - 7. Deploy bar - - - - - - - e metal - - - - - - - node - - - - - - - - - - - - - - - - Ironic API - - - - - - - - - - - - - - - - Ironic Conductor - - - - - - - - - - - - - - - - - Ironic Database - - - - - - - - - - - - - - - - - - - - - - - - - 8. Deploy - - - - - - - - - - (active boot loader) - - - - - - - - - - - - - - - - - - - - - - - - - Bare Metal - - - - - - - Nodes - - - - - - - - - - - - - - - - IPMI - - - - - - - - - - driver - - - - - - - - - - - - - - - - - - - - - - - - - 9. Power on - - - - - - - - - - bare metal node - - - - - - - - - - - - - - - PXE driver - - - - - - - - - - - - - - - - - - 1. Nova boot - - - - - - - - - - - - - - - - - - - - - - - - - 11. Reboot - - - - - - - - - - 12. Update status of - - - - - - - bare metal node - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 10. Write image - - - - - - - - - - - - - - - diff --git a/doc/source/user/index.rst b/doc/source/user/index.rst index 8697235d56..8327bcb467 100644 --- a/doc/source/user/index.rst +++ b/doc/source/user/index.rst @@ -183,111 +183,199 @@ These pre-requisites must be met before the deployment process: + user-image-initrd - Hardware to be enrolled via Ironic RESTful API service. -.. figure:: ../images/deployment_steps.png - :alt: Deployment Steps - Deploy Process ------------------ +-------------- + +This describes a typical ironic node deployment using PXE and the Ironic +Python Agent (IPA). Depending on the ironic driver interfaces used, some of the +steps might be marginally different, however the majority of them will remain +the same. #. A boot instance request comes in via the Nova API, through the message queue to the Nova scheduler. -#. Nova scheduler applies filter and finds the eligible compute node. Nova - scheduler uses flavor extra_specs detail such as 'cpu_arch', - 'baremetal:deploy_kernel_id', 'baremetal:deploy_ramdisk_id' etc to match - the target physical node. +#. Nova scheduler applies filters and finds the eligible hypervisor. The nova + scheduler also uses the flavor's ``extra_specs``, such as ``cpu_arch``, to + match the target physical node. -#. A spawn task is placed by the driver which contains all information such - as which image to boot from etc. It invokes the driver.spawn from the - virt layer of Nova compute. +#. Nova compute manager claims the resources of the selected hypervisor. -#. Information about the bare metal node is retrieved from the bare metal - database and the node is reserved. +#. Nova compute manager creates (unbound) tenant virtual interfaces (VIFs) in + the Networking service according to the network interfaces requested in the + nova boot request. A caveat here is, the MACs of the ports are going to be + randomly generated, and will be updated when the VIF is attached to some + node to correspond to the node network interface card's (or bond's) MAC. -#. Images from Glance are pulled down to the local disk of the Ironic - conductor servicing the bare metal node. +#. A spawn task is created by the nova compute which contains all + the information such as which image to boot from etc. It invokes the + ``driver.spawn`` from the virt layer of Nova compute. During the spawn + process, the virt driver does the following: - #. For pxe_* drivers these include all images: both the deploy ramdisk and - user instance images. + #. Updates the target ironic node with the information about deploy image, + instance UUID, requested capabilities and various flavor properties. - #. For agent_* drivers only the deploy ramdisk is stored locally. Temporary - URLs in OpenStack's Object Storage service are created for user instance - images. + #. Validates node's power and deploy interfaces, by calling the ironic API. -#. Virtual interfaces are plugged in and Neutron API updates DHCP port to - support PXE/TFTP options. + #. Attaches the previously created VIFs to the node. Each neutron port can + be attached to any ironic port or port group, with port groups having + higher priority than ports. On ironic side, this work is done by the + network interface. Attachment here means saving the VIF identifier + into ironic port or port group and updating VIF MAC to match the port's + or port group's MAC, as described in bullet point 4. -#. Nova's ironic driver issues a deploy request via the Ironic API to the + #. Generates config drive, if requested. + +#. Nova's ironic virt driver issues a deploy request via the Ironic API to the Ironic conductor servicing the bare metal node. -#. PXE driver prepares tftp bootloader. +#. Virtual interfaces are plugged in and Neutron API updates DHCP port to + set PXE/TFTP options. In case of using ``neutron`` network interface, + ironic creates separate provisioning ports in the Networking service, while + in case of ``flat`` network interface, the ports created by nova are used + both for provisioning and for deployed instance networking. -#. The IPMI driver issues command to enable network boot of a node and power - it on. +#. The ironic node's boot interface prepares (i)PXE configuration and caches + deploy kernel and ramdisk. -#. The DHCP boots the deploy ramdisk. Next, depending on the exact driver - used, either the conductor copies the image over iSCSI to the physical node - (pxe_* group of drivers) or the deploy ramdisk downloads the image from - a temporary URL (agent_* group of drivers), which can be generated by - a variety of object stores, e.g. *swift*, *radosgw*, etc, and uploaded - to OpenStack's Object Storage service. In the former case, the conductor - connects to the iSCSI end point, partitions volume, "dd" the image and - closes the iSCSI connection. +#. The ironic node's management interface issues commands to enable network + boot of a node. - The deployment is done. The Ironic conductor will switch pxe config to service - mode and notify ramdisk agent on the successful deployment. +#. The ironic node's deploy interface caches the instance image (in case of + ``iscsi`` deploy interface or most ``pxe_*`` classic drivers), and kernel + and ramdisk if needed (it is needed in case of netboot for example). -#. The IPMI driver reboots the bare metal node. Note that there are 2 power - cycles during bare metal deployment; the first time when powered-on, the - images get deployed as mentioned in step 9. The second time as in this case, - after the images are deployed, the node is powered up. +#. The ironic node's power interface instructs the node to power on. -#. The bare metal node status is updated and the node instance is made - available. +#. The node boots the deploy ramdisk. + +#. Depending on the exact driver used, either the conductor copies the image + over iSCSI to the physical node (``iscsi`` deploy interface or most + ``pxe_*`` classic drivers) or the deploy ramdisk downloads the image from a + temporary URL (``direct`` deploy interface or ``agent_*`` classic drivers). + The temporary URL can be generated by Swift API-compatible object stores, + for example Swift itself or RadosGW. + + The image deployment is done. + +#. The node's boot interface switches pxe config to refer to instance images + (or, in case of local boot, sets boot device to disk), and asks the ramdisk + agent to soft power off the node. If the soft power off by the ramdisk agent + fails, the bare metal node is powered off via IPMI/BMC call. + +#. The deploy interface triggers the network interface to remove provisioning + ports if they were created, and binds the tenant ports to the node if not + already bound. Then the node is powered on. + + .. note:: There are 2 power cycles during bare metal deployment; the + first time the node is powered-on when ramdisk is booted, the + second time after the image is deployed. + +#. The bare metal node's provisioning state is updated to ``active``. + +Below is the diagram that describes the above process. + +.. graphviz:: + + digraph "Deployment Steps" { + + node [shape=box, style=rounded, fontsize=10]; + edge [fontsize=10]; + + /* cylinder shape works only in graphviz 2.39+ */ + { rank=same; node [shape=cylinder]; "Nova DB"; "Ironic DB"; } + { rank=same; "Nova API"; "Ironic API"; } + { rank=same; "Nova Message Queue"; "Ironic Message Queue"; } + { rank=same; "Ironic Conductor"; "TFTP Server"; } + { rank=same; "Deploy Interface"; "Boot Interface"; "Power Interface"; + "Management Interface"; } + { rank=same; "Glance"; "Neutron"; } + "Bare Metal Nodes" [shape=box3d]; + + "Nova API" -> "Nova Message Queue" [label=" 1"]; + "Nova Message Queue" -> "Nova Conductor" [dir=both]; + "Nova Message Queue" -> "Nova Scheduler" [label=" 2"]; + "Nova Conductor" -> "Nova DB" [dir=both, label=" 3"]; + "Nova Message Queue" -> "Nova Compute" [dir=both]; + "Nova Compute" -> "Neutron" [label=" 4"]; + "Nova Compute" -> "Nova Ironic Virt Driver" [label=5]; + "Nova Ironic Virt Driver" -> "Ironic API" [label=6]; + "Ironic API" -> "Ironic Message Queue"; + "Ironic Message Queue" -> "Ironic Conductor" [dir=both]; + "Ironic API" -> "Ironic DB" [dir=both]; + "Ironic Conductor" -> "Ironic DB" [dir=both, label=16]; + "Ironic Conductor" -> "Boot Interface" [label="8, 14"]; + "Ironic Conductor" -> "Management Interface" [label=" 9"]; + "Ironic Conductor" -> "Deploy Interface" [label=10]; + "Deploy Interface" -> "Network Interface" [label="7, 15"]; + "Ironic Conductor" -> "Power Interface" [label=11]; + "Ironic Conductor" -> "Glance"; + "Network Interface" -> "Neutron"; + "Power Interface" -> "Bare Metal Nodes"; + "Management Interface" -> "Bare Metal Nodes"; + "TFTP Server" -> "Bare Metal Nodes" [label=12]; + "Ironic Conductor" -> "Bare Metal Nodes" [style=dotted, label=13]; + "Boot Interface" -> "TFTP Server"; + + } + +The following two examples describe what ironic is doing in more detail, +leaving out the actions performed by nova and some of the more advanced +options. Example 1: PXE Boot and iSCSI Deploy Process -------------------------------------------- -This process is used with pxe_* family of drivers. +This process is used with ``pxe_*`` family of drivers (the only exception +is ``pxe_agent_cimc`` driver). .. seqdiag:: - :scale: 80 + :scale: 75 :alt: pxe_ipmi diagram { - Nova; API; Conductor; Neutron; "TFTP/HTTPd"; Node; + Nova; API; Conductor; Neutron; HTTPStore; "TFTP/HTTPd"; Node; activation = none; span_height = 1; edge_length = 250; default_note_color = white; default_fontsize = 14; - Nova -> API [label = "Set instance_info", note = "image_source\n,root_gb,etc."]; - Nova -> API [label = "Set provision_state"]; + Nova -> API [label = "Set instance_info\n(image_source,\nroot_gb, etc.)"]; + Nova -> API [label = "Validate power and deploy\ninterfaces"]; + Nova -> API [label = "Plug VIFs to the node"]; + Nova -> API [label = "Set provision_state,\noptionally pass configdrive"]; API -> Conductor [label = "do_node_deploy()"]; - Conductor -> Conductor [label = "Cache images"]; - Conductor -> Conductor [label = "Build TFTP config"]; - Conductor -> Neutron [label = "Update DHCPBOOT"]; - Conductor -> Node [label = "IPMI power-on"]; + Conductor -> Conductor [label = "Validate power and deploy interfaces"]; + Conductor -> HTTPStore [label = "Store configdrive if configdrive_use_swift \noption is set"]; + Conductor -> Node [label = "POWER OFF"]; + Conductor -> Neutron [label = "Attach provisioning network to port(s)"]; + Conductor -> Neutron [label = "Update DHCP boot options"]; + Conductor -> Conductor [label = "Prepare PXE\nenvironment for\ndeployment"]; + Conductor -> Node [label = "Set PXE boot device \nthrough the BMC"]; + Conductor -> Conductor [label = "Cache deploy\nkernel, ramdisk,\ninstance images"]; + Conductor -> Node [label = "REBOOT"]; Node -> Neutron [label = "DHCP request"]; Neutron -> Node [label = "next-server = Conductor"]; - Node -> Conductor [label = "Attempts to tftpboot from Conductor"]; - "TFTP/HTTPd" -> Node [label = "Send deploy kernel, ramdisk and config"]; Node -> Node [label = "Runs agent\nramdisk"]; Node -> API [label = "lookup()"]; - API -> Conductor [label = "..."]; - Conductor -> Node [label = "Pass UUID"]; + API -> Node [label = "Pass UUID"]; Node -> API [label = "Heartbeat (UUID)"]; API -> Conductor [label = "Heartbeat"]; - Conductor -> Node [label = "Continue deploy: Pass image, disk info"]; - Node -> Node [label = "Exposes disks\nvia iSCSI"]; + Conductor -> Node [label = "Send IPA a command to expose disks via iSCSI"]; Conductor -> Node [label = "iSCSI attach"]; - Conductor -> Node [label = "Copies user image"]; + Conductor -> Node [label = "Copies user image and configdrive, if present"]; Conductor -> Node [label = "iSCSI detach"]; + Conductor -> Conductor [label = "Delete instance\nimage from cache"]; + Conductor -> Node [label = "Install boot loader, if requested"]; + Conductor -> Neutron [label = "Update DHCP boot options"]; + Conductor -> Conductor [label = "Prepare PXE\nenvironment for\ninstance image"]; + Conductor -> Node [label = "Set boot device either to PXE or to disk"]; + Conductor -> Node [label = "Collect ramdisk logs"]; + Conductor -> Node [label = "POWER OFF"]; + Conductor -> Neutron [label = "Detach provisioning network\nfrom port(s)"]; + Conductor -> Neutron [label = "Bind tenant port"]; + Conductor -> Node [label = "POWER ON"]; Conductor -> Conductor [label = "Mark node as\nACTIVE"]; - Conductor -> Neutron [label = "Clear DHCPBOOT"]; - Conductor -> Node [label = "Reboot"]; - Node -> Node [label = "Reboots into\nuser instance"]; } (From a `talk`_ and `slides`_) @@ -295,48 +383,58 @@ This process is used with pxe_* family of drivers. Example 2: PXE Boot and Direct Deploy Process --------------------------------------------- -This process is used with agent_* family of drivers. +This process is used with ``agent_*`` family of drivers. .. seqdiag:: - :scale: 80 + :scale: 75 :alt: pxe_ipmi_agent diagram { - Nova; API; Conductor; Neutron; "TFTP/HTTPd"; Node; + Nova; API; Conductor; Neutron; HTTPStore; "TFTP/HTTPd"; Node; activation = none; edge_length = 250; span_height = 1; default_note_color = white; default_fontsize = 14; - Nova -> API [label = "Set instance_info", note = "image_source\n,root_gb,etc."]; - Nova -> API [label = "Set provision_state"]; + Nova -> API [label = "Set instance_info\n(image_source,\nroot_gb, etc.)"]; + Nova -> API [label = "Validate power and deploy\ninterfaces"]; + Nova -> API [label = "Plug VIFs to the node"]; + Nova -> API [label = "Set provision_state,\noptionally pass configdrive"]; API -> Conductor [label = "do_node_deploy()"]; - Conductor -> Conductor [label = "Cache images"]; - Conductor -> Conductor [label = "Update pxe,\ntftp configs"]; - Conductor -> Neutron [label = "Update DHCPBOOT"]; - Conductor -> Node [label = "power on"]; + Conductor -> Conductor [label = "Validate power and deploy interfaces"]; + Conductor -> HTTPStore [label = "Store configdrive if configdrive_use_swift \noption is set"]; + Conductor -> Node [label = "POWER OFF"]; + Conductor -> Neutron [label = "Attach provisioning network to port(s)"]; + Conductor -> Neutron [label = "Update DHCP boot options"]; + Conductor -> Conductor [label = "Prepare PXE\nenvironment for\ndeployment"]; + Conductor -> Node [label = "Set PXE boot device \nthrough the BMC"]; + Conductor -> Conductor [label = "Cache deploy\nand instance\nkernel and ramdisk"]; + Conductor -> Node [label = "REBOOT"]; Node -> Neutron [label = "DHCP request"]; Neutron -> Node [label = "next-server = Conductor"]; - Node -> Conductor [label = "Attempts tftpboot"]; - "TFTP/HTTPd" -> Node [label = "Send deploy kernel, ramdisk and config"]; Node -> Node [label = "Runs agent\nramdisk"]; Node -> API [label = "lookup()"]; - API -> Conductor [label = "..."]; - Conductor -> Node [label = "Pass UUID"]; + API -> Node [label = "Pass UUID"]; Node -> API [label = "Heartbeat (UUID)"]; API -> Conductor [label = "Heartbeat"]; - Conductor -> Node [label = "Continue deploy: Pass image, disk info"]; - === Node downloads image, writes to disk === - Node -> API [label = "Heartbeat periodically"]; - API -> Conductor [label = "..."]; - Conductor -> Node [label = "Is deploy done yet?"]; + Conductor -> Node [label = "Continue deploy asynchronously: Pass image, disk info"]; + Node -> HTTPStore [label = "Downloads image, writes to disk, \nwrites configdrive if present"]; + === Heartbeat periodically === + Conductor -> Node [label = "Is deploy done?"]; Node -> Conductor [label = "Still working..."]; - === When deploy is done === - Conductor -> Neutron [label = "Clear DHCPBOOT"]; - Conductor -> Node [label = "Set bootdev HDD"]; - Conductor -> Node [label = "Reboot"]; - Node -> Node [label = "Reboots into\nuser instance"]; + === ... === + Node -> Conductor [label = "Deploy is done"]; + Conductor -> Node [label = "Install boot loader, if requested"]; + Conductor -> Neutron [label = "Update DHCP boot options"]; + Conductor -> Conductor [label = "Prepare PXE\nenvironment for\ninstance image\nif needed"]; + Conductor -> Node [label = "Set boot device either to PXE or to disk"]; + Conductor -> Node [label = "Collect ramdisk logs"]; + Conductor -> Node [label = "POWER OFF"]; + Conductor -> Neutron [label = "Detach provisioning network\nfrom port(s)"]; + Conductor -> Neutron [label = "Bind tenant port"]; + Conductor -> Node [label = "POWER ON"]; + Conductor -> Conductor [label = "Mark node as\nACTIVE"]; } (From a `talk`_ and `slides`_)