From 5a3901e36b394bd4266c01fa47ddac66ca52bd01 Mon Sep 17 00:00:00 2001 From: Edgar Magana Date: Tue, 31 May 2016 22:12:00 -0700 Subject: [PATCH] Move DHCP HA section to Networking Guide In order to support better all networking documentation. This sub-section has been moved to the Netwoking Guide and properly backported to Mitaka. https://review.openstack.org/#/c/323528/ Change-Id: I9b83ad6f7540a679fdc07cde7eeddb29696823c4 --- .../figures/demo_multiple_dhcp_agents.png | Bin 52475 -> 0 bytes .../source/networking_multi-dhcp-agents.rst | 484 +----------------- 2 files changed, 2 insertions(+), 482 deletions(-) delete mode 100644 doc/admin-guide/source/figures/demo_multiple_dhcp_agents.png diff --git a/doc/admin-guide/source/figures/demo_multiple_dhcp_agents.png b/doc/admin-guide/source/figures/demo_multiple_dhcp_agents.png deleted file mode 100644 index 38670395630643e349f5d2cff86a03b4c02045a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52475 zcmeFZWmFtU(<2fqY@ve z0nT1h3kU{=fbskb4wjOJ3xWYGR5cwn|kNCbU2*P9ekHdjOa_Y zHMIXZoQ=(Y!~{BuIfF$1Qc0zMp3KH~4S6{(+_7U;z@s z@EJ{jR$75>3!Og~I%E7?#n#+WNjr$!J12;D_2g7R) zE+a!W&UYr9oZNg&|CP-D7)sIt=xFEQ_M7EE_WL=TRZIZ?g#K!;dF?29_V+ImP;LY>$L#p`8yGTVuNNMB@jV)}Sz3mkr z(|^MGoAJcHGZzmt^Dk;Yd;NDJ7Pde~ zLtA5$Kb39qf3564c>N9izmH*P{L`t89ZU=zP2T-t>`&;w(fF927e8x@e_G)W=s%6~ z%i#ahn0$YDg4F-3Z2trOZzlgF{r}NNe?$K#X&yPyw)4)=(NGkms(%@mg_DPw^_Ou$ zEdI0azvzhkRQ7+M@(&kzrt(|Qf6zpRT%Mn+6o@ku0nl>ypTPeSOVz~HQP$AS!~ys(zj}5yVMDWjLjPaq{NL>S z982EN#za8g#L3YCw56+YW2TF(OfpJ@H;^KV-JyZQ7_!GGuN zf9mTGI==-eKUMYz6chppz=NjauW(8L-XTa@01QkBOiJ{Psw?v|5B5v@vGux_^|1CJ$iK=Qe|7PDFC;0M zd?vW_wc#UYd~);PGSg+R*iq%ko#M7toTZ5W+&Ru;65*P=UUvpf9UM z7|i;Y*piTceEqv^6gHGAiOK)D&)>ikGzjuxuT4=&)_-*m1>Pe6M)etkgp723Q9?eD zP2~6Sgr3PB{~Y@Nf~*+o-$b1P+Sp_}%k~5b9;x5J>dHgp(TD->>|h>oWS*qz9iU_@ zVaE~z=n{keBtA*yM`iABe31!7W}gS!9IkPS_(;9hkM=(HoUT`$9^p?N6skcu&(_=# zzVB|e!t&%VjLht77I``;N7o7{#w{iUs+EU&VIqwT!Sjf?zEG0&RpM@I$x z|K0zyX3BN7&W-f`bOfPCO8bjle9y;A+}WdPZAg2jGk~9^2c(=;$?)hXS0oWH1{zwF zRf+s(N!UpfkjEXI%_X$J{WMsc8ioDtsKe&Yaq-lh$Y+ipY3F|Z|{2%1u{O*K>u*r&; z%(U-b{lS4#fG-8C+Y5pX-2e*7=-Lj|iMMmYC+98Ovp)1NX5o;lzDQ(9@)RsiBq=Y` zLL?tj{1Y66SI1%d`fl@1BEe9g`bjW1j5zD2gl=XW%E|n{$k+ZI;Gm9s zGBnoFGadwl5h@Q8*#r}L5Ui=9EmV@RU2%jB5+(-&`k{Tk3et0Bt{`79Z=d;4#r!wKJ9;hETy*q|QrwcmlrRwnTe%cf# z9SBU5+IlVeW7141<~?&>cqz;Z=1nl%QPKnAMHunXWX>uQ)?69k>2B1q7>Kg8FB^0bfiA_}eP%h$T zkLIt&A|f;NMhrG*BQ8#HRDlnIuFtqH+Ux#m%nW&Z@D+>rKno63hR+W-CI_j+JMq=H z?%U7g#XZ(tog8HV37+63knufk@-LD%C6MLbf zXZ~gk8lQ++r*AAs*tevk9YV!d4d;Vg29 z9CX?oa=>46!Vlzt;T_7QG{^*rJ!)@_m0-UhqwnB&or&ANLdzQ-b2J$S2ZF`qq^{cQ zPWr0%HR<-ZSc5j5`ZUmbpf8_dB=c)lIKj?BUML;5sq~q95gH~myobtwY>4qdBgBdh zCO}9TRQG~fHuck+IqZ4IW!|MrqSd-OCHYmyko$QziGvH}YJC@I^lO(C8iFlXoc0bS zau)5`BFo2C|G^Tg;0C({g_#&=A+VKA>@+Xa0mx`HMt-?+-fxR-Ij#5VC1_6JKy7BG z$Zc`3~A$vE6A2!jwF9Eq7NH^Cn>e z1_{Ar^Wn7-j*4)b4#ZX&)NKPH=Q(W-%Fn{ zSZlVbU|3;qE;042T(G>su%&(D+5ZZCnT)HRj<`EGPw1!{Zr029J2pM_7=1fCa4^qF zSsJt{D-uDhPb(8?$7%ej#x|3eLf`3!Tu8Slhk!qTbPv@$@ZX|_$3?^5aC!J|bB`eS zb6b+cQB0jQK!TI)NNGxB-6+yJe>_LSObf{mI}Ba-f|Z^P7!0Jb7KruR670?e=%Uf9 zr#wBF(+|%vWhpK2hbF-de|@6=FT) zCk*MlH@0|?4F zYy!FD%o31}9|Pi-K%iCagcY>tJ{|^20e{6xKgZr@1TB0{*Nf64zgE7V;D<=xP@o{M z;kfSaVUS;=j8K=`5`Wz|>+fK2K?+ipS9f!8@!RS`ZEpq^KC4~Iez1-67>1{j`tTQb zt1qA))YEtgkxxQ8CtdXELgqhBb2275oWh!1uX9Viu)KUv{!U4B3)U(15V9@Y6j1jsW)hMEx>^zc0i+TX{5}p_wHb|EA2)( zFyex%)~0R&$wcdf=YXPV%f@0#uSRe%9?}jH0>UwPc-metk|dh=^n`U-b?&FMmLWp# zA_ewbt#gNKRMymrwl-tM%u`sdXr~yb;QbmU+U&X;811#77uW$D=A&7b=|pm)mGyZB zqgnEXdbNP6&rn74jV~>o9a#qU_H)n5H8->Ri%M8BHtO|zxQyN8RXF&rZ#CyO`Sz3R zXv+WtIqG?*(=^U%ZVAJ^v@`_!vpaR**s`g7-*!@8Az?xYXMINtRcJ=$mlzb68mnlW z;TDO}PJtZzbjvIfc?gOy>|Z@=@*th6UFM0-P>TpvJa%ug8Hb^?zwk&5K{B{lz6}#q zGxxYx&90sew3hhsydf;;0%Q6te70}^Nu537kCbT+`kD39PO!;S2M_v4Xi z16*MePRH>q2<~YP!6o~58o)=CHh{l+1!d{y`xFjbk_kkeL&L?@L@4|OuTO2@c(7J$ zsla7<^R9d5p7sdja#;=#DlIozXQEP{uc3lh&gse}lSrXF6MTKbfdx;s+Y`dJ%j^KF z(Cp zaVDRHsPB4l46o>+N-@EoH0Y31XV!J$YU!Y>dYqS*B}*z22DHn`)d_dzR4>o=w+fqc zc=(U@uTAa{>YPV<6ita4G)Q>H!>!gA*-s-2q`0wvn<68qCxU>t&b=}&EzYSNQ{kMp z3|}@hi`?LaMvTiwBB@jd=vu;|zEmLFO57@MEp#6h_DyeLcVg}8*i7ms)ey5)4{n*| zoc3*PWvduWI7VyRpKboYbHj@QT=u*gY>4W4*wUXgS#VzZn%9AhS2ED@*UTV=Dir`1 z#Mq&%P17#5?lomN1`Z34#4|*&602QCUa!~Zpv@QAs4*A})MQsWPx<3Ij}FO;871G& zRlAMip7;^{P@B>So zT(32I?Dm{{J*%naW==!Ts^J0cFD>j7fD5Y7OFNtwavxQ>=EZccukq;n&8qn)GnCJ& zCu+Lxca)x~*g1#ujSyOQ%C*Ifs*=Z^t5X`#vEcY>Sl3`O?H=pTjzF?cpCu5xvY+ep1R*ikV#n{~j$VoQ~O-)u-wq-S!aY8rR0tviR2R0%cr zH#>p8BWNdzH3BmNA_0bo31&gNeb@j6>{R+PMc zordQ&skUOGRA>0;PWh6Wf{}69q_4aeLLGtf$00IySZS>OOPZ;~^NOKL<9Q8Eq_piy zF;2vHbfiK!9clUfC+bHU?*@{4wz%xms1z;qZP;19aNDPXP9J1P@h@k3Gqp})DMO#q=0+jbCQMy(R!+g5{I*sSu7by3 ztIge?KV{>Pp&G;IKm*#Of0|BYsv|ml>BfJufXiuhkCKMFr&shSF2qUX=0=iKWB2M6lVDH ztCOKQW*&WDQkkY-d%z2eqjl#*I8EXsCxMCjaU<8Bi@jt)ySG{^+e7IQis;+M$BhxL zg#_4otN06L2S%0!-?)04_c=4c9>v=<^S_|WPrt9XW#gNeZQ17)+%af*=*o>OMBnT2 z|Ddq73LFVIT}1tgRP;#){5g#I6}|W>pxH|cWm>AdjACI^n`!*?gN81w+JRz+GQ-AM znlfmhBl59`yXqUEkiQ&*j)Is}7~QuXa;%i(orlKqFXd$K26}GIx1`=aNO}#j^$$^; z>1LvTqGxtnk-bb|t0|f30nmrK9L;9e49Ln10-Gj#yK;}y*7Fz`GOLD4e>BXuKduT? z%(8pmd0AQkOMNYuzX zO^m4EU*4ySt0YQVRdIG=*$Xc~7iZnNTAKeZds)3zsZ~?r(DO=oZk>&>B)VZ4iGYJk z;@hz(E}VnB3>8ks?5w8e)n37D1CYA$J#UP9@L5s=WCcr1)?tykHw2o&G&I);Q|WM! z^iIh~J55PZf`Dmpvp{DN5u5S#S<)9g+qFQiMdIbN3iq?DJOIbtdnX$SjGg9#!GW>o zqtP#eu0}vTNTyYV8h;ZbkK!bh42)kMmk__iy_4Bvvn*|9=oh8fnh;HUGy0i)Z?mP{ zmTJP{qS;11I#D67p_Xrd5CSEIU{D_al985Hc$j@A%fca!>Y*@;3U{VVC#3$yRc^QF zjQ)okWlFbT#IlO2zLFA4B9l&0Hx^EM?^2|)JO?dLET{chmSH9r$XRg9M=%+CgEq^3K9mC$%&S8 zj4L|n*idh;)g)1Ez~+qJe-<=&7yczpkDWyd3!+6PtEf0ArZ!~~zjd*f_G180THsMA zW*RzcqNM#}TaFx@lb32z;8$8vohv%CCkN+q`*S9jZKV#ocK_R(3{k#&6X5EDZmq`g zvdP9S$SMHw)BcVGF;0XLEJ|6eEMW4<5fu93Y0B!(ji&s>qMol{>rIX`+tmwkclnJIp@Ix_qK;nxl>W6}_YLy#m`!pBdZ*q|KUD zSFM3n^(4j!FGz(XuzGqMxIvB(s~rnDphCYY7vG+70RFSn`fXeq#37o z*vztiR8An_1#yNS7ZBXJBsm0HKe7|h3v?}%iTpuXK8~#ecqr(m927ybrETkf`GT3| zB~p9BcG=g!aj%utytE!mFhB4JQdOc zY<%7Vizm%wJb(0=FMD$&S_m+L@7U1?bK-+a(N|zF=3yBl`bzbhECuFukFQsJ%HU*( z0UEh&MTiPPxNSd%F(YjVJ$BNQg@jWj0!Vz$q>iHfuie-p2Uc+sM7Is#o({7&59=$Q0lb%biX$BfgJs3Ikp{JMN8(VO(rTJ)B2D zvG!$qpX@fn4>H6Ye)f)`T5-(3=4bF51n5#xQHh((*z(mASu=%+pEoejmwKo)sm{Jx zPrILv6CaMMojXpqBbj~DpHr8;{R}=caCigr>F^tPreXoaPOXD|_pTHNL4%N+CrNeW zpWa;qrx|1X?ZXreVk7sna!lMo4ZP*esAxm6GDFzFXBjHaso9n>&gH@e4|{R!13u-!Bg^^f&!!Ot zPMft}oQD2XlT*8V5hrf~Ld+j!sGb1WL%P$hDs3E5P8G%90@#Fq5JeeP>A?ADVphqO z#@Fd)xY_T@<>>ek^EnoB&<^L`ESh4~BgTACdDCw>KHr|Zd6<%G>&g*V#@n=QuT#(W zVu<5dk^B1#L6cSYUR-M+KZ8!~rmji*`NLVow3+D_K-mr92fX)0&j+kFwU?-oAC^0r z`Pg3U$r}z2u>`#&PiH%te~72~bQ;v(-2l0BP2Z7Hh5gB8MA&)MIna7BG-v@nc8(0a zagsV67c6yuolWlcD8F$<0tXF!^$c(3(pdDukO*Y6h{(hVxp~;RKJ~>(R~A z>%9jM(N6Fl>b(QOj|Wj4HX19;0x8g@(H8If6n6gFZ}_QkFT9&TE^tq8C2x!x%ybUH9eVDp^sq~#7rup14oIxjUg^TE14*b3k2j{@XNM}*qHekIC zAU%36KzEy#=A43n&{WB+Gdz;%=NQnwrCS?OO%3JF9naxj7L~|*KX?iNR1hEI>^3a@ zh|_Nf*luFz$KmEjFLof1hwhk`GlA$)JTV<#k1*`l`tS#DS0SOs z54d2fgh-O9aZ=^<*DkNs+cTCCa!LBcbA2HWbzdW~3c5m4e|N{eb_~r~NdVKVZ#%uc zd8ho^J<^>p7yl!`VM(-^696F)D&Kt^%-PQF!jHU=^wbmh_!;+nAl7`06d8?tkbk6_ z5W&v@s_2edpYePu#va~5Zh0Ilgo%f8nXL}mY{MKGC49X&O682FJ3Wq953zjpJk{_^&7aBpFSnnFKAFHcyh&x89-qM5%a;o=e3^L~8jCdvs;jK-` zkMhv1HuB^n8XXpSvSAygH)Z;D-Ck=-mRmlNGeP7>^Y%~49Gk;BpvN$e75@ff8zo)cuI&RkM zXKw~QZLG=XhBZvJ=xaudA4$2xn`f~n)karlu+4U6HG=0)*tXp8~ zK$3PjEtr`P4mP!Gn<+uFW-+35--ohC*02Kemw3rczvx)L9B!q6k=*E>5pzNv}g)Jv-Z zwe&dmnbh`cHMuLR9f=#3nCl(v-w?CxvBt@kmklP^JY2^aj)(x&m*!9 zmpgtO(w6fgCzV+o@2QLl1E98D~D zHvy5!vu7x7w)$jKyz;_L#|AzLGH^qPI=_*ZeFcvob2*5nWsbv&bFM+(8G9g+3plkn z;d?t)VJLr%RWQ`1Nhy&no3;S2ko`Vxc+dxOWXNS3u)t*>N3@#2g%T=xa6Y73eFOd31dKGg6S$W4aHI++aX%mZA>wTj@S`LE3@M@XIH|3;_T0{Xq+qccj(vIIxFf(chUlBj=07nrDWolgIuMyJqj#O>p42P;hn_+$meFrn#5g&GW*RZl=99 zhLAgFZoBfZ^t{aHhf38@RaHGSZKsPK4?^9CO2`qmN6iCIE#f~C7&n;UR>bOFKNLJ` zYcW4kWOVU=RYvW=S)~=;%YK<9rA_mtjhE?5A?c1K{jwkwC(N$GtJ^z$6ML%Oi+Td% zvZ!fqo29c<`cO+%j*IV!l+Sw#=u*m?W_WMEeb|-*TZewwB1xBokBQr)QPX$}y-VCt z9IZF!eN4i8;~8vk7F9TN^;*3qz#^gc{10OQ9PwcjTnL&OD<1B$^m0D4s;RMo z5-oH5VsIL7Z$h9M@122qw9B(Cqod3=+7hJ{f&FHqu$)anQ)B+~U{Zt@ho;Svs3(Ev6X0L%AAr+7nxq|VNf;k81Ae7--QfLH&6`*d3t5OYXR;tl2T#NxT7~dCwtNKA7Y$)($GuVtE zU;|dUh?lms6jWCo=$ml{XQ1g3RBQs17vFvG-E5e2lYVn$vxCE;*S^G_CyN*_q%nb9 zX+D)t=ZHnSpwf}RbA(-h{J~(`xFu}WZMq?bzV9}7eM&XlbI>T|yn@T+_*#!GsR8Ju zTJq^fZ+EIKOxlpSOjT|9?sh5|a$1O>XMhskM7VWvWeVC|u4_>VC|!AZ<+|L02kiTq zSX{M4E2lUv7&#pq2bu#HswfAI_0}80spb&sjN5z8+4$F(FZM=ZDjv#baSx@q>Kp|G z7AnD-f^|cvK2>wtECsMarf{9}*qaWJTRXXT*ed}868mzlzx&Kq6W)iXQcz5~Ejgz3 zwvbR8nh3o>JWS7qb2U~=I0m}?AhLI1E#YhZ1TtkC)PqWz)yAg0pDjvT5W=QwDFoa# zm=izQX>U#m`C5;E)P@^?#2YUTnZ3e%aA4xqSs!Dn%B`Eb72H`L=7wb79Eq$LtdVek!yD?kE zm-$Yuw>Ja&Y22UFR1mMfPiW9>$d1mJMW|xsBIsbZ#f%}ns0+C7n!s|n$9ka_yrit! z+Mw^=dfTm&nwWHcUX)I#if4<+84@#xv^(YVAR;sKMDyg(#9?FPw!p~C$1_4w+j&`7 zTR|k?(qk+FU4$><(Vr*%oMIPVg~y=jYQaKa7M!0Tq6Aa=m_EknE@&!07d&3hA;~!B zzZJosVr=VMjXY_51CZLv=$KoL2*j0J0vAXo6&HTlV1OEliMxVGgnfo4i*Tq4! zfo<>%#m>b&j#$}e?Q5eo|4e&<&uHTdZ1H=TSax&pe$ucv*<3T9Uen3!qa!#16RH3- z*@aMPJkwCjuOy<)3`;+rqjtOFBgpE}0|k)NG`@cM*4v+7B+^~cx8?4-?1bFo7`@Y` zf@Dda7+JL-rBKXF#oeqSi7*T0>_FTY%%cM%qfZYC_V_s*S8G z*bfFf51&UfWg2HvJXLh6ZM-l;h5--Q4<}35*NF2<#)t|dcD>5$8VaFL^;BIV6wJwzWP%crq>R9ud1eq%{~Y%N_{BUZ?n1+&&98;Y4#+ z9DJ7sBC;7Zm?{F=!V#$8WB`j@<~tU|A-T_sQ{AI{Gq$L49!R2B`F0f+Jvg%;`A`*1 z!ns^dWBJJxS-=G`cZQ?Q_oGW`E|hn>^ZS7~Hqtcv8Wh+rYGFn}QRje!@3o8F+34YE zz5JP{$pB?GU5FP&+K-K`>hmhM-jm25U}H(H#fb?4GNOf()H zUg>%u99 z!Q~zNP}hlKr0r?!~&OPd1B$q_#b{yxX2GlO<$nSe9Gw!i8^b%G}XiIXi_4tOTn66V1jKB5Y<=u61 z& zF-1w|=Sz6)pQ}txS|C-iO3L+Oy`tO}DIHF}c!k-bMn{!H>T&_@k-L7;ep*7!v5}J+ zWpDyR%~pz9OVQz}q_Pn)G3YN^G z+#IfiZLJ?hwUJwq&QbS0d^ihbg=yg`3lVcCJn3C^oyG|YFYlPB4%LXlQS5HTWoyQO z#b?E?PV_p@A)C-66{>Gw2FjXJuc&MWFN(g+x)i2As)+Xvg&k4Y+o(rf_{rmVy02vc zP!HGolrbssniL_hHlW}5-_BR_e zNs6sxDp(UYu8Q4h_Yn#{TJ*~xQ_YvzDss44anSYl?Js<`{TiqLyeBJ~!6tXUpFcq6 zdqV;T3Po->z@M;o1`{s0xy8%_qafrZN_%tO z*nd`8(toIieS9@+h7{;_TYJ;v_G*PO?6;eqwmgi&dBdCWBYi`J6rQr#owS+;l}wFR zv=$05I;^i#$CGNbYo2rGm9XcS$c=-Wsci`6MZc%Qko?;8(XKvH&TdD#z>^+~o)!t=p(8_R58&~UmBzg`c z{<`cyJz2mK)+>k(TJdf2mZN*05J#GiW~Y4;vcdMI1kPHUV^%yT>B^=$upFBvlabg0 zK)SQb6O)iSXCo3}5UY@XGkZJsT3HwDmJcW(uj2Pb$y8w7y@tr9l|FqwcOef~EwXA% z;9jxnReuhG-n@oeO)6{&vB|{8kO&8Y`u94DJ>2OSx^8S}N3zpLyaZWhlV9qkfl4z< zCJ?%GqCWj~B6gY5t@{hUJoYH=Q)JSA*M9oVldfJD<;ilvz=(XME%alB)zAy|fY(Ya zb+_MB3*eQemkU*cAC(!f3@N-OhlEAMz%IA&lHTsDM;O#4ffId@jCWuO9<+z__ zDO7=i_%;QYueNY1QW*a@Ala6M!kDYZ@)C-Xz>kM)m?%%oK5d{3DqJaXqUH3xj5*}K zrK;Y`@rrphbv10KFF5qPwEAuDRc-6iDjc{e*I%OEmvGOB1?O`t~2tyo7sA<1S4Hq!OxV+z&>?29#k^Y;z0F@=r`v_g}BTB)wH-jVWEQk1Kc8&M~-Dw|G_v%ogk|lsvjPX@5lX0UPm-mybKBcR}1)1$Q=5GSsK>E4U4C@ti*LuLW zER14b*V%!^)6JV*A3_(Oexu7Y5&=L|mJ#?a=2yU?&~)#0E>u{Kq08RPs1rU-vEs%P zYx6$B!HP&1=x(N@kXKKChxNR=knH?TU-sXi_RF|Xq~EAtys=JUMq1EW3Lj+F*GN() z)Ia0rz!b|lD9h+!*dt>EUv5Egca~~zeVY;Za$+WTWkU~5Z=(t6#i9BOS?sC-Zxel1 z6-w<(k^uFDJelUdF55un5vqZm)CWYHJAQoyDcE{T(ULKRG!iW^A*$m&8sY1>hABw{&wh^3)T)8++3k zpRQPM4WG}b8N*LK(%J5eUnhRuZp=(djh&E*N&v5rksD7ClYiR26v4mz0 zInrbK`b8pl@@pU-2XS8kM`~f|-^t?ZnJZRr&&#r8Y??>c8xNztLhrtCCI0gqxk>ti&zH&U0PI9N zUjM3UbWZwM$-%>L@LZTIy|hZP(?6~v*~wQ|7^AcFW5zL3D_ob+zbp^hM!zh_2wB~w z{8V!k-tyR(ZSp~v&gx?7y|C~qEyl^^+B#iGuWeA?-erA*4&@oPXB2d=Cb&BGVW0jb z+Kw<*V9nsj3sE_4n&gqynOW_m~3qF0@9AKS`Kb~{~2Ie##FKdd5wG6lYjN0_qUS#KOx zFQjFYU5L4Jd)B|V6WQC$L|ndnQDM76Y*f8X@$eWh$Avn9m3!QR;u2*WlXb*;`dyIP z$c$xX+a#5du;bd!D|F5ycl5I7{6E0MtmcRZdSJU9TXualBSfbSO!G-3Ne z`is0!LjjJP78X%}wNbj{%T7MRT?f__6Bm(wmldP)A_^LtF+%rRbVBV0ydBvg7J53U zg6$W%TH8ptP6L;cfcbBdd@<=v3cd4cz06#Bl{kt+p+}B%;?_4fR3WnWVKyVO7S znSYGFP%n9(K^R4vt659jx&E!#o?{J$?|jsNl6%EcPKJ8yv7auP+lD226Y)*lTp$>u z#tCc6@}&o&%*2w(ArjMgQY{PH_EXhClNo<_&;-YtX9p=CU<8b9xLp}roMAcnfIXy{+=9M_k$N_#fO=QA(J2gyN9}A${$$s zdO@+=j1%4(PNNtcRP0w@1hwD5MIDAShfN`oZ#^w7qUaD6_8D~k)SnSYP61CRJ)HSnWOFl%JgqrunB5QIv$QLKFVu##ErIG z8z3Gmz*Jyk9I_P;^k4|d9@BTFd?`=l#|`~w>UF}?UZz^X`L-g}m~lKw@+^!6ae3j) z#o)k#v{A#VzFB@S)cl(CEndNlpz#}S#iORwey8$1vx7%vtt0I+i8r)jJpQT?%Zc+cI7Wk#0x zxIDcrO+&w9ay9jI5~+ass0n&DRzi^2Fs$BrSFir_5;y(rN?r2THJWgXn^$BWV79Hf zD9VsA#yu24R4Tr}7gdN3P_hD2k`q4Ng({(C-NSXBWM>rea> z1OUs(Aeea5mNU-5YQ=|%ql(AOk&T0Z#gE3W_jA;{73VfL=NNjUzPi**`$gZnLHoBL zwc>F%cT8K)TMr5t26sG_*3@vDk9D~$emGac?)m%9g$KM_hJL2&k^?!;^x zu=RfrV0oy}Z=1`!Hr}a~)2y;)nf88SbS7*|fp^Ovk{ZG0 zQ+_(!8VlQb1X(kh0F;)dB*l z1uk_W6=T%-?_Jk$r)^#ee(ST{T`H>l3}lepWrKz6?{}a04h2=7O7VnDsPD^!^KLEp z-aBLgGRE**!LiZR%yE{17*`I@QfPs=M6US&X5^DQtw4Hw*a{N-v#)C9 z1=r*nL)L8YG;PB#Cz#`P*%cNq>A&wOdfS&E`hm)R1<4iXu=-*e?eS79Edm#H?u_;h zfTx!z{HF_kpQ@rDMh*Gw%SN){EHPwNs3?G408mMOA`u!G8ICwQgT zBwbw}<*f~=Ci+9VuY2L<@nikw)eH8c5S>QR^$Y(p=Ho&=AE|K*c2aWUwQ7CWbwcwm zbExJp2`YR7MA0{}db=t3?{Ykf!ro46MQrRKuTeW#z*#Oq?io^P#*}qcb|QCOG~gKD zy9gC;%f-&tv*5=mL^SD%U=8a@e1o&rVL?IQ*wILv5spEb$f0pTI~!R*MIBQFCcLT< z%eAniRpu8|b+NXeDrhZgajkuiC#Lw0Tl|9N()tbf@N||ORYrE694BJ)EjZs}hyLje zQj}7&6OZXp*?zayNaDAOpKIPa)Q5;%H>M^o9{uEN8ujhzcX=5xF(EI5c)blCXUNW5ugBO#_i)`PpJ0 z@S9oM(Wiw7E^R*~M53xu!L}GmA)G*u*i!59*^@uh=75q22;0?X1)Lodt7um+6&W{qwmqWB{ z8Z$4YQ9><(I2^q`HaW2)C$UKsxpPRw;LOj#qWI zpX#)d1MUImR(y;;M~YGkcj3#*bw3gghTfL-?LNg8(&+QeGA=keNFD=&V??<&mD6w$ zEU!~~gJ@|9E7NKdEaXJC+|QJ^@ZZ~R)AcvD>eO@BY(_RtqnE40W{HwxULlO+EbSVa z548vp4rWVQCis_=OlQsRB77?7*MHvR+g_rdVBqw&F_+)hmK37m>{3&F+GoLz3Y#hY z7*0B4SS{1JN9FzlAKmiQwWA+;x1!=|GugRwV{wV1K{fzYx=#YU$@{JF$uz^bF@A+i zp;9=!U$KNxSA*ZzSFc~>1{W9}%p6oCt-BFwBP5Dm5Kkiy2)+%x7KCp|gt6#zTLc{aOGVQywecT}HV1}{&d@e00;iqYqb%;c$)aE~_+gg)7Q z1h>|!L2p9vAF~{U)m97(0vK-)JpS!LshRgH1g<4SN0_g>4Okml>Vm_zQU zy=9_1j?h`S@x{HwmyQ(BioEVgWhu7;29DBN`Q6GHJ5o))Zk>$TPc`Uy5j;nX!$m^+1-}>q@^#vdYdX1**1Uls|$%99w zIkvz-Vm~2G#NcA|JvBb2yV8<^$D7i3YHXNIG`+_br5cN1x{hi?vdLZaY#c({+l{qt zzbe5&9ZSfkbbQMvx29FUm+^z<(G;92N?$@`i$(H)5A}L!idfSDw<-Tin;FT6_1Kja zy>{rC$lWXBQ)^wi2QD)_jxU)JB{G-2f%&WElw%05IhUqT^d`vDbI+(mYri5X@Xw;g zn=y2Mh)Fchz4|*14UoSyKQz02?7veMD1cKsI&O>4=knwPa#MM=y!S@w7%i0Z;bS%h z)8^JNxGa)``+9m}Y%2S)78Tg?0Jn3?8LX?D^6sK19R*QX{u4m5z*B}&{AZ?5<@r<~ z-Q3L>eH5&^wl2w}n5d@Q5V2u)xIW7?u+)7TI@VqB>H}RZznxjPZG_3?XmlRgyorS2 z_Z+0;uT&^_OU6syJ{Mm&HW`Rwp6FwGL+^V@7lzoY_MHiei>`h&sL(hNoK$S+5-Sv- zh9@hw*wV$y(ZHd*PD_IH>XbZNBgN0ob-McF8iS{Smv=)Z~P(@~F> zkR~W&eDO5Ib-|Qm{l;@xkxwWy0_Lo0!0mm)zgUp*1{k6Q7t=uJJ zSy-99$hGV7UjFPjiht+1=>|ZR-i2UMuP>j{W3l8)ro6d`^A)z*BRIyO`S@yZY&|{* zBoM^?%rUfWQLk<=MsGHS=6k`A8P93Vo*vyN6F znEF)1Zpmo^$OIQsIEChrc8lcS)Kq$G8MhFnwMfVmQMwyq-Y1#`NqSu1hbHXha)F}4{%?vt0x+JlKWIscBNS#`j6STVC+`r@7&C+mEieZpq438sLm z&tERnD{vINp)a&{Z8l{u*%?!EcOgWVXYMUzb>F9?`0X!Uk=>i(^VwuV9S^-y1iR20 z@|@gDGjgzDIj{$B>2-w^6yov8zRHE;*v49m_@kcqJU=o51)V5=WJ^{n(N9cpB)-$| z2MrPW6+G$F(WmgE&~cP>cIX{$n~R(4vR0FDK|J1Xj(Uh&;x@RKeqo_^`yAWv0ISt;MbXbja?#x|5u`y)pMN_;)cb;sh3 zV}?{4=w#~LY#^yH>9W!RfQa%05lOvKPGw!mN$S{39iNd|@vHItUjS+CmmCv0f+#7j zOU-sSY>`WPvLnd)$ID+3yJm-w1-pC&L|o92hX}W!z!ff73R*X^Y5kU}1`RvO@SIhf zzWuQLY(wnvy|Q2b3*fJm+zksT!{+UI_G#}QsWhhu-6TR$sPp{eHS?<7bAoRHFaGKu?~^CBAe=f%UNSSoPUOoKS5Zs- z6H8GLREh}@xLNL9rJ*e(F_U%IvVq7S?XygZh4_uJdVHw;K(3H)P%5q$Q>)ZY{}=++ zZ$LcD7WCLHSOoEpC(}ZDqz3Sa`L@aX!Wy4Yo)z-^GVNdvF6sME%zYlewk%TFbgt}D z7nM5=5s3V(QT)UYM#5RnKiRoWZ=FGA_}py=2TIlAwc0eX>4IK3?W5s(9&b$1kv9Ci zJrWSjk`D!Lb35)Tl626@o#H`kgUP18o-<3KK>DS;=M%Xa)VqxHqFu?96%1xA|A!Wo zaga^^v_sYpR8+uQpW&Jd)!!}H)(d*1d3}mOIrNYBb%lb@&+amT4E$KXE9V3N63*)Z zO6vT#{2?jSK8ha?tB%Ygx5>E59|P9of=hhkZnOQW$stu10wtS>Dx~wNh}ijU;~~zo z@wzSI#Q)H&kQ1!z?QY5byQJpJ$hOcI8DJ0)2U=x$O+SP|VM1%#D~p0Z@`$PtzF&Nl z7<4bG&Z{jZR?8O*;R`wSuKc340XII^8`DpRr{U5Y0Z}c1YlQWfUfTCatJ+h@V@{FYA*ov&QO|b#-AkEcy+!Gi))_hAIVsr& zuiR(FFfciy5`?W@hGc-%qB^f90uLs>a=aJ5Yi0YlO%e-?rO+)|$j>d*u@gZLUQj7O zf&Ga9=hHTRpqjqd(?iFq1pE!py-M2ZM;Jw8`mSDx`|`;-hGrW)dpsUA2+*bJaZm6| z9XGf*c&^PkuVw0h97r+l0_CFAZ)A|vaa z%9HUt=kS9i5*t39Zx?>#cQa^UZK@jyr^xjo$@8a$`VardwGqkoG;hA!W$!u_xvt9n zC57dC4gZ+Kp+Xmi^$mWyK)OeTO+fWw#D4X_M@K-RSSL-pk;V!~rrw!W=0cHM#136o^WDLziW z>v_|XF__pu3f=8HWTsblv#T~6lu3PXg{Mm-+Eh+FqE;6$`DaI*pACmL^Q}+p6i4zs zNji}tVbC_gj7u?X7o<;{mvpe^D@5$bLn3MSh&S|^pZxp+H*${RdDF(g)ub=`bI9bWr!wX5y2O7o0?6PUALdA) zrponR0b5HFX)xc`=K)!wqi@3Rr*iB0ItssY*ZLZC$vPXH8=BJ|1sujsjnh&Dmjt{g zW+ix+GUmc`_~WhM5=HjBT&L^iq`F!R8)ABj zIBDlSb2Bddfxyd7N~Iib2m4wG4j!b};{4F9G1~;VcHZ&ibnY@)RbQuw zn6}1HN});YQDJgA{KS5?{1i&iw zB^VL8FT&}%GkFYaJ=LqUmtC;JBqKQ>Eplao?g!kU%M?d(Wjc2V$s%%8l(iZ5N(KoD zTlnYEJ*VuVuRf?Ld#XXrGZ`=(ue{D{M5w!BftCL}2Lg%-aNszsEq6a2Gjo#-iZ#S|kmgqA zk?BYW5FU3PCrwH`1SWjbMTg2_0^sDj%v!GnYWlz^k4Ty8eKuKbbtW*eq_b2a~kQmbyo z+uIW7K%Af|Fv6LOY+>|eilm}eR0jt2h?jcoZ=}D?lOILFOnsbG+<*~gs)h@SPQyuH z43Hj;W%R_UY(%Z`D#WhO%Z5<)WC1N@m)S|w`(40`PZAwIZ9cr`GC}uxhnGV`L8z@Za=}S(Nn)wC zmU1RoSTV)MVr{K`Q*yW?niQa3h(mE~8xu)~~M%=G1;>me20$MGW-)wa!QKzg>PsQ@!PY$vEWd`6_*%VbPs6|)Ck@m%xzF{hBuVG z60I)FS=M6dXm5=t@(^$C=*x_wJ`>+d zlD~@tg&4mpLyNzaGw}Z@!*#GI3qifT1f}J*g4TR}!LG*S^6tU-N<4QkMcEZaIw8}S z{8A+xHZ7Q8mahE-m2SM35!U{C)W2lL=6YVIFol4l)}ERoW4x^$$qZGFXgPG-4qI0f zOfuRs3RtrSfVoc5(A|_XA$o?(A9F!Jb#jGlNtw4c??S$_wIyssmhOHjgkkhLG2Obd z2sjJmxoRM)YDL3JOkBDuq>*FtQ5UnxrdMA0Vpqk?V%gO9T z#=gHx;&9?@iAW2xl)YxKSEz>*pB?QgGT3Fza?&JYFK>6;K~Wh4gycly+so}RxzGsZ z?43+CVk2Nb`Cm##M6XgnwFK34T|{ATJVyyJ@~}fNvAhmhKJFS@qXFa zv&;6ZIMFL0r_C$$^?BRIT~yvVmJ6|W#mf!tS!f4%cA;8vcDx2G6FpsT%O&hSBhu;q zHc+-9&+pi-c>3CPSh-0gQ??k_F~6!Yk8R^gPMqpHUj6!9f4p9Nr@sJm$8r9SCr#Rt z&cdoo5t*%fOI@02JC~d+`>XM2J&QfgGfv=6e!Z6U_t~A+>14?rzzQ@*ZAs#1c^ONWbPSOz>Owi3(d|ZJwUJK>-ayNs53IgVx2I2yz z&WHP2&ccbIC07$zu^Jy9L7~SzzFIU7P#%Xp2Td5PV()2vZG3@l!8fS{tUicu6*4Ya z=hZy?L>qViGTAJ^M0sKwP=EaCK}oOsA817!2?1yq2n72-%2RQ4T3(z}z8U=9WOdMC zgN2v@62Ln+eEu)&!FDvE@|m55Sr_~@wNE6jr{c(wu{`(`WkTb?5537|3?Y&OsOEf9 zxoj1MCR?_%4$S);RdAQJny9ncl#?v%2^jWG6lnZ(>cI|_+}TdPQ#}=bU;IMQus@uY zh{BCZ^M> zM|)GMA4691-+u!aTr%zc?YbFOJyM6Y?>xW}%AKEv)U-s$a;Zl2=w<<~2(WNIdA?vL z)S-&8>9b~>L7hTBqVutZ!sLnC8;M#wKH92EHWgA*JNniAb#ZE6n*!;oy3UQVn>IO& zyx3E0Oi;EOjQDV$cV0(^tIdt39w3?XuB*~E2DKV<(amKU&1$YCc$PYs5=yx&cVn0w zk67UpHhA%JK=H(z)r-jSgx8<$@`wJ!zSy4ED{G*5INyTF*WYjZWM!b0=iVK;9JnEN z`l*u@Go4#k6Y${@7^HVD2=ryNL9fX!X7!vE1q+f5T8IWL76lWFWoim1hdRj{bhKsm z`Pzm|m@sc)*XO#G=&8^PQ)o<|{2&*Xc<=P@}gk$|3{g+T94%=sw@8gHk zH^3>D7J`-%aWlR8YcfWx0eh$H?uNNT0F{kri~|c|X}mVELK)}*Yh^R z?a<|9Y*2l<@8D)v`sy~UzkV@1=$gk|-%1SQ37RDxf63RJP+xfy&F`dO0>L6^QJ4-z}`eN)O=;e^EZV9z@`buiNPz-pIiF@%8Nigj^)!VLQki^kFGkuU$0 zLpo!tS6B39N78xs@VLJTCFHJL`f%8lo~ z&Ks2VXd~YUqqVtdYzpMKUb>stLBD@)tY!J)3KcjUW8$Gr0q$hc(-{F}vKFyS^L6!7 zc8C&~8`A!Ep@NFH8Osg}^LxSLfSeNac2D->Tjj5DCNMj*OR`| z*98cX6>n9(SKdam*MxB1ET}*V9`Dp%OyCVNUmwGyOA8i1;*H|nOH7Qji#$Cb^+MGi zso0Z9BuzCl`5$=B$5nitr*`ZGsk*VAISBX|vZ!(AediUFGc>n($p>Ku{ ze3xxAGVZw!dvzKo95$<+^RecyYZZhDZwr4;m^i3CIP@be_|}BY0u2*eO*jv*>la=y zjcM-I18yC=ywXXion%-gXix(s>m67!Do0J8Mbq}{>)0wQZ<)-g4-)aF+`Lu$Cl z?WcV%KOOXZ$!l33mOC@y-{O%l0D_3C%o4G(4u9W&=uxWw0zdLy8K-Z}6}NX<9}5S|C61`M9GR5aT{^?5yTXveUk=V}RS!rlh@jU#Hx*^}GfybD+;4bf04<&C9=1nlQ7k+7E}Du2dkE&VH4h5BT8hcieG=M0y4ZvRXS}ZCgQLuDp)#n+d0(UR*!ps|13 zgtIkRA>Dz)yAbwnWNdhzYVUY#LXStx5)V_h)@O6_#!(miR@VzV*+p8{58*a>Ute{LTHqf?C{w8H=g(_P7n)pzF8=9r)!QX0p4>>ImJ@p zi>DlZ-@t0tzd2zC-K;=?2jwStq-pQq6Ogcp%Pm2RHEc_3iY%mgShFbJ zoQdeuFGGI=MI`_RKV9HG?DS^UZNrM^`Fbv?f*!F7+IbmW-V*qhEVz{O@rSPN9k2YZ zRXt`VvFUq;bo}`(nac;{Vag_}Coh6Y*y9*#l>^K}@^PbTZg4bvwW>lQN$5IGrr?zWpEL-@Nf(gx9(X91PB$(_Zxr z9_7cIr)xCHR6a7nL6=)zL-XNHy?JPbNnD%}+)rIL)ihK_DD56e(RgM(q8>9$mcu%ZW08$K_y`XT(5 zG|0R3lIs%qqn<{!^E1$P9W8J(71x}wpfPc;EFfEwoVO%@$X8~y^hK+Zk*XG1n>OY& zbuxjeBgZShe0uAD(h8P3&b~qU(LKNlkEP~SG;P@(-GUxpJfW&SG}P-wHp(zZ4*Szh z`W}v9u%VXI6%YG)ildUY`VhkQYJut`4m#GDAmr@E%9pnG+qm8AeIWb9V1*%`G)wNf z;Jw=(cjyw8E(thV;ez`M3#v`vKi;6A-dpypDv9Mg)}-TbcU|A4G(MGssqe|#p8Pm3 zJ?ZLE2cDk%5^1lEF!{C)epQFE+t?tUbnbDDN2gxWn?jCO2j-UsGEu)#ACw<~q2b(b z(tVBUn~e}^3FUk(hAd&Jk_hM=z6PH7==(oS;~quKd_d%^Z?KE2SIfoEUV$H+_@+FY zV=Zd&g>#D!^-focBkiQ5`*mbK6enGpJHde}?y}ObKK*~@tk7N#j>gUMjvLiOThUr~ z^E%cc1YP_woG7I6VCwFm=JtFfg<#&xnt`n>DFCj_J!FQvOwjm8a=1R!qXrW2_O1Do z2OXQ$N(4e7NkuK3NL~JHJ!S(wrR^a}Nkv>eSC|^v4eW^$c0-?MS5YcF3!D|K%|_3Y zs0tox89#Jp8kIZS1~ctaGf`0PjqY>oS7)~latS=1Fx5`2%b^cEJFRVb)^FYLh~8cc z4c&!h(g+dU;k54;m*wKpGZ2cO%c=`?v10EPb~= zxgwrDc~Tfd`pn^f)tAcL6P57=fnB}9se_w8IJ5IDRGYTjNY4!*k1aGPG%K+}e|PAX zFMEXq_>~PYZYMPJ~Vu|GE#1EN^vqMo#u2OQYQ16Z%6e^9e-!;Re?r|Bp-m z)hDAg7{#vfLa8~%U&J4N5%&NLhX3`Upq9oT+P9Wzo8lvK{vs9y5$DgFEhf!Kgr)ew zS;@4g6|fZ0)QlM7jkN!dZEtl1P=DJe@da7W@;Ot%p_Wse{>6Xw-AnwQIg$}abQ_AS z+>D8^N^_4;eZr!#&-(B6ss_nnYe~!7!SUCOXaS%Z^}NEN{HGg*b~VVPG(2f}Mx=j* z1|kT<2Fdc=3mo#F-R$?&u|VASPNIkV{iQ`9NQ;_JnQy@U8YNs5G)l!4$vgf?o$qgzaDt6;vNzBhwErdF9co=Z(%twY;*cch zO^+R`e&#qD7c!@^4?bjNy%JYn0g5wK0FbSRLz%}~c5Y50Nla5STjt%f$QtFfr$h5b zTWsp{Md(XYDZJOM7-*oS!PGhB>EefsLksRjmv<$e>KOW-V_Xh0yK@BRO!XjjakOxL z1u-?+@>_01_w#gMpH{ASGOU`pExnJ%Qh;Jh?#OqVk+yeJmiKQCo;;afXDb6h0ks3X z#PmHj=DM4ZLlM8Tw)zd>-BI&X2f}&`2BZG3X#qz;kB0uIgamSsNmf3jmgfCslKLRM zh%Iv>M*OAJN{~fps(4k^{6#EA3nC8Y4$A&(X{sfFmgdlbRc*pw#K9noz_Zz9Wci=) z1;B>TK#Ep>9-008pW)$DfQU&?(jEiyrR2LW`7`_G&Q14zuAL^Oc*#Y~BP327k8yKk zdbLHRAcvs-GQdAGAqDmIvyORMLSClR*CLVeE>RKo@f?He)fKGlI8s>2Sa~J;bHviz zW(8+M(csilG|W;`V#vK$sN<_E#1gXJ$N4>yK`;uDIDziC1r3E#!TeT1DeYHiY4m(m|Z_YNueK`z4ZE>03k+ z^x78&kv|_A$iZMc_pbKb)zp>$phmNIKyt*7=;1G<=0$x|WIDKTsv5<@{;n$WJ8@o$ z{sclt#P2C7T!S06z!ch{I&fj0l?RNJavYV0-Zm9QWsrYvFM%>NUTK8+ss+IETtg2_ z1@PS!HZeED^S5%)Omt7-MmC|@5X(k5O2Jje#xgpMX+IIf`Qe9Pywt2P{!HgyT$IQf zl<6Mw>fMNO91Z4+^X?kpl&Grh+8b?ko+QVnnbm1egG625soL9Dgz>WP?^^Qe$##*} zJc^L=|1SDw=iX3P@ZEOeTy@EoA?>mgjG5)`dqw?#2Zv=w!R}d+_~1mTnJOv~AGcSO z@6O)?nDrxs}~S|w+Gt^}GJYgZEf zS&2SwP$!SLC8J$2=o5FR0~lH}?n{N`Vrm9fGKevHU4gNuf?fgK?SP}4L5ZFVO|&b- zTmS1e)w9PMEr0fJT?ea04FMp}9PRxQJ|qyIEL73(wQ&9$neZ(|WKW2T;QD7Xw{Ya! zo+-=E61Jki<`1}T={yzoBCxf5Cqd#>n~W~1XeXghiX<;_MU~|{zPMd((E2mzf_Lq# z1ZxBmVkIIzdc4mQvh<=sXMyun01N^$G_{atcI_BoPw@NU!o;xC6U7$~I#KhmS`mZH zDoQNmu_!tcb}aN)S)sJxVi8`!2Q<4+jgZk?4F>wctS|F;LDCO9!HEW0qf$MI+?z4D zdr_>Ue&=1Jwnu!4>QAi49>8$A+P-0YZ zv=h1*NL5RD-?Yms5tn2Jtz@Ya)(4lz{Lnx%L8;(#`6bR;c5{cQ-!Cksuji7$=~ySZ;;tHWY}21K5i! z-a2Sd0I$XjCz|PVUv;3 z6Xqp<5Pnil4%2YQ8!rf9Z~W4`5q5by>Onj9o|*Vv(1rP#eK}oP9vVkO)A|Be59TVn zoM*g-aoZUj$giS7PS@i)fUR^dTaCEL2k?8;{V)S`)=0aQbrdc07z)6{n0?p+UN4s> zaJS-O`P-ZrHMfO;A&}u?o2ESW7#dI9x=SSNDX<2BCqG*130b1#HntG)C zu!+N*M1}LlWLFy8GJ*+?Z@0LJSLbK#mwc*>cH8PtK)oO&Pq{tpb?^6wz*{=)iQzku z63Lq0;6_`M-fz06!5x-P=f?|(;g$?LS%)XX4j^gjg7>_R;g!HoQL9@#o4s7xpEit7p8dIp`PC%}1sS=8Nu3UkD_XDXlq^M&4~`&nN}So^AQ_r)fGDi)cV zF4|M~BedMSkBrUtu_@`ZDFm>4tJ()CDQ@p5!c1?k&)sp?eH(Q>UF%(N`48Vs9W?O?BFP2 zRO6Q3V+^DgJ?ofUUb1k@0sd-REQ}d96n1zX8&*mLZ2SDc0$V#9ZfUYUOoXg0z-P{f8k?ZU8WY+`WlS=t?H($hhzNXm)IRNW zGoO`^F;QZ(_&)WIrhL>W!GK5XQIkshmN4897*zo+riic@gaXB=&E5O3v)%J8+tvl< zi$KO^YBZ`-R<-cbu!--^=XBq5t9VILTn)t9-tbtZMy~ZNWapIy77xmFg_=>bm}w*P zBO`V*K=Je6o{Q1cIMZ__dO0ai+tCJsZ^JQiGSHDJ>nd;~Lw2uqNaI;;L><1Xk4_3P znA1O>csK+-H|D>=_i?_VAuC9hA^~5vBSMSS_Tyy5lQsM_AH9ikuWBH95t{J9EE?ts z#rAtnapiC2SSPve!58uL^m_)B`rJvuVL(g{dH3M?@?A7BOF04iiGBw?S(^xxMR@$*Uj@^ihS-^5%F z?Uc!sH8yU_M#Ej9jC{1PlKPs^epd`1N$QBHvi0o~K4yX9+2-zvKjoo>^_~5>SsN-U zBL;j@oVpqVON}Ae&z~f8?$HvEH zJasp#jeVnre$2}uh-cn2Q9SYb&@$X>3ZcdrHT7J153^nVP`b8)W=aX3DETZoEGlKtO_MujOu!n}H+0f( zNX|{UG<@@Jn11qae%36X*%p-6S0~=JXBFPJ+NhAQoM_~GYg;2bXKICN58aYvTgcZZ zJaA;-wP4aj7Ok&RB4)g5bsxJ)eI~v>;&Oj|&IB%fN2rg>zaNV0YOqAGcRS+bS>uPi z-Ea8*DOL;PMf?Qp$}_c?hZhV%tD4`~(!y6{g*@%rAorMzmywtMLKky~5rg@t@zXX3v=%>Vj2r<_$f&nB6c#DGcZj@1IAZ6hoq z2YvMPJn@vlPxT>%#ol)+5Yk-Arb98(b$3z?^zjTSFh2x|X?>R@jh|%3n?bK0p*{?) zmyA71j}@WeA|+}Mbos90s%|SKXC09FD;FK;q!~i_xwn3p3SHu*8h22DOpbT-Qe9pY z^l5egvm;gKojc8>R{l3u^g7gUrdfqA&aZ=f*;&CYXP6KHxQ&5U-w-}1c$prUXi+nia(-G_9DP7lrmm~ zjKbOvie0rDfiC3>es@LcV&{(#mgtb2#AM)Z+x$4@5rp0Q;yrXGkg6AzTb#s?5l3g+H%7~}^rLe!e#e85PY|hHte5yN8O#V?Yth7p0yvY%+gW{fQQ69+T3QR0D9o=M z$dbj#D}Y0xQt5LKb;orOrOd7T%t=bH7~XYm;tJ|-oy%;N5J>y20N zhncG0WH-M2-Sv~g!}7QAf_LRnXM$E^Ie0OMdn<3gMtKB352>y%Z=RAUku9SgFO0q8 z@Ss5q!{(35@+IS`w$U~`CJKG`qfUP_9vcO%q+wcNdoYj-)eZZF1kH{!rHz}2`N3_w zZ?cZa6|ybj#}@#G(PF1mIJA(v0>|wpB?(iV@O+Ro6Yp{hmCrFZBX}tve#i&SUENh5 z`n!S_KS#1Q#vA6s=W-eM{$!BHK}=#XT`+>fH;(NCFfB=@}be@ z;8MzNIE+eT=MuZ~AjlDn)Ws;iAU=97FhfB5!F8SJ&lgx%)^G2L>5*&#_~A?;{rO2K z^1g45=OZi@FYMumWChcs{P>1J7piehy!U1;WAEgL-*=SVy!xUT zYDtF+>5P}`ZNQ;29chgEkjH=3M2p^t9Rg>rk_LbCr6<%wz5JL5(L!6qu}ISWRK0tf z!wWa6Vl5+Ju;p!F%M(e;eM8rP9Mad(wcONxdSYVG{><1ac~>+hA3L+~bv&c$XdG^n;wGr<#*!MU>EJ1r3%WB~B!dB!a$x@` ztBJY>ZA!tOeYpv+;Mz0asz!a_VCAv=kB$8T#dsd$OLGL^z-Y=Wab|4^^G_e&HtBO` z-Pf+!C~f<`M6oi&XC2@tIO43mQlZ&NlFHn?S> zUlp)?&$gShw&>eNmnH8Ci_pfJU{Ih z*ueHM$U+DB!dYQ99Zr;}PTZUJxl3lAvvjqITHKsN(yjD+a*l&1T5O`I-v#YPioRxa zF_Trt(rW@f-6_aYbIH#xEZIn`63tI=~_Z*|iRTN9MDIRlB>* zKIQV$Me5fg3QTkD?ZFfOQ99mnBXb@1+u5~wRtJ1Od`?IU_vv~&edd=%a=~3=w!2*u zz3o|8*9Q;8CAyz>tp>PaZG-`RjqJWnWQ1Rwes&M~F+~Tp`gU~Ov(r%X9Bg>0=C2OQ znZ1+f}qTl4~t<11nmuv)%O4f~+89DX_s z$M=DMtS^GCYkVL#jbZe=0tQ=8%WJN}V`tBjPv$1ta}v1BXM z>p9xtu_t_V)mR=((VZQ1o=#Zr>(j2)qlOump~i#^Nj#$`B7d=J761%7-5yj4};+EZSz)JTC9E-b@d`t=~ zPYG(ogcf@WRUzz9)~-SXjFSh~m1JLr49WA3M?V)j#~=%R`h2&-&WJ41m}dMbe!@g! zW~!eqW>IJSTEt8r9Z9P2XXH%%%HR}@iL48yVMhdVn*-_T?=p7B6M*|sxPBkh4pGwH@ z

9UHko0Wm5v*Z@I3wk?&)mEHY~`$@KOa$ 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 Q0tWmO7nTt!643McFHOHtQ2+n{ diff --git a/doc/admin-guide/source/networking_multi-dhcp-agents.rst b/doc/admin-guide/source/networking_multi-dhcp-agents.rst index ab01a300b7..a30ba3386b 100644 --- a/doc/admin-guide/source/networking_multi-dhcp-agents.rst +++ b/doc/admin-guide/source/networking_multi-dhcp-agents.rst @@ -2,485 +2,5 @@ Scalable and highly available DHCP agents ========================================= -This section describes how to use the agent management (alias agent) and -scheduler (alias agent_scheduler) extensions for DHCP agents -scalability and HA. - -.. note:: - - Use the :command:`neutron ext-list` client command to check if these - extensions are enabled: - - .. code-block:: console - - $ neutron ext-list -c name -c alias - +-----------------+--------------------------+ - | alias | name | - +-----------------+--------------------------+ - | agent_scheduler | Agent Schedulers | - | binding | Port Binding | - | quotas | Quota management support | - | agent | agent | - | provider | Provider Network | - | router | Neutron L3 Router | - | lbaas | Load Balancing service | - | extraroute | Neutron Extra Route | - +-----------------+--------------------------+ - -.. figure:: figures/demo_multiple_dhcp_agents.png - -There will be three hosts in the setup. - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - Host - - Description - * - OpenStack controller host - controlnod - - Runs the Networking, Identity, and Compute services that are required - to deploy VMs. The node must have at least one network interface that - is connected to the Management Network. Note that ``nova-network`` should - not be running because it is replaced by Neutron. - * - HostA - - Runs ``nova-compute``, the Neutron L2 agent and DHCP agent - * - HostB - - Same as HostA - -**Hosts for demo** - -Configuration -~~~~~~~~~~~~~ - -**controlnode: neutron server** - -#. Neutron configuration file ``/etc/neutron/neutron.conf``: - - .. code-block:: ini - - [DEFAULT] - core_plugin = linuxbridge - rabbit_host = controlnode - allow_overlapping_ips = True - host = controlnode - agent_down_time = 5 - -#. Update the plug-in configuration file - ``/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini``: - - .. code-block:: ini - - [vlans] - tenant_network_type = vlan - network_vlan_ranges = physnet1:1000:2999 - [database] - connection = mysql://root:root@127.0.0.1:3306/neutron_linux_bridge - retry_interval = 2 - [linux_bridge] - physical_interface_mappings = physnet1:eth0 - -**HostA and HostB: L2 agent** - -#. Neutron configuration file ``/etc/neutron/neutron.conf``: - - .. code-block:: ini - - [DEFAULT] - rabbit_host = controlnode - rabbit_password = openstack - # host = HostB on hostb - host = HostA - -#. Update the plug-in configuration file - ``/etc/neutron/plugins/linuxbridge/linuxbridge_conf.ini``: - - .. code-block:: ini - - [vlans] - tenant_network_type = vlan - network_vlan_ranges = physnet1:1000:2999 - [database] - connection = mysql://root:root@127.0.0.1:3306/neutron_linux_bridge - retry_interval = 2 - [linux_bridge] - physical_interface_mappings = physnet1:eth0 - -#. Update the nova configuration file ``/etc/nova/nova.conf``: - - .. code-block:: ini - - [DEFAULT] - use_neutron=True - firewall_driver=nova.virt.firewall.NoopFirewallDriver - - [neutron] - admin_username=neutron - admin_password=servicepassword - admin_auth_url=http://controlnode:35357/v2.0/ - auth_strategy=keystone - admin_tenant_name=servicetenant - url=http://100.1.1.10:9696/ - -**HostA and HostB: DHCP agent** - -- Update the DHCP configuration file ``/etc/neutron/dhcp_agent.ini``: - - .. code-block:: ini - - [DEFAULT] - interface_driver = neutron.agent.linux.interface.BridgeInterfaceDriver - -Commands in agent management and scheduler extensions -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ - -The following commands require the tenant running the command to have an -admin role. - -.. note:: - - Ensure that the following environment variables are set. These are - used by the various clients to access the Identity service. - - .. code-block:: bash - - export OS_USERNAME=admin - export OS_PASSWORD=adminpassword - export OS_TENANT_NAME=admin - export OS_AUTH_URL=http://controlnode:5000/v2.0/ - -**Settings** - -To experiment, you need VMs and a neutron network: - -.. code-block:: console - - $ nova list - - +-------------------------------------+----------+--------+--------------+ - | ID | Name | Status | Networks | - +-------------------------------------+----------+--------+--------------+ - | c394fcd0-0baa-43ae-a793-201815c3e8ce| myserver1| ACTIVE | net1=10.0.1.3| - | 2d604e05-9a6c-4ddb-9082-8a1fbdcc797d| myserver2| ACTIVE | net1=10.0.1.4| - | c7c0481c-3db8-4d7a-a948-60ce8211d585| myserver3| ACTIVE | net1=10.0.1.5| - +-------------------------------------+----------+--------+--------------+ - - $ neutron net-list - +-------------------------+------+--------------------------------------+ - | id | name | subnets | - +-------------------------+------+--------------------------------------+ - | 89dca1c6-c7d4-4f7a- | | | - | b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45-d5cf646db9d1 | - +-------------------------+------+--------------------------------------+ - -**Manage agents in neutron deployment** - -Every agent that supports these extensions will register itself with the -neutron server when it starts up. - -#. List all agents: - - .. code-block:: console - - $ neutron agent-list - - +--------------------------------------+--------------------+-------+-------+----------------+ - | id | agent_type | host | alive | admin_state_up | - +--------------------------------------+--------------------+-------+-------+----------------+ - | 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-) | True | - | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | DHCP agent | HostA | :-) | True | - | ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-) | True | - | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | :-) | True | - +--------------------------------------+--------------------+-------+-------+----------------+ - - The output shows information for four agents. The ``alive`` field shows - ``:-)`` if the agent reported its state within the period defined by the - ``agent_down_time`` option in the ``neutron.conf`` file. Otherwise the - ``alive`` is ``xxx``. - -#. List the DHCP agents that host a specified network: - - In some deployments, one DHCP agent is not enough to hold all network - data. In addition, you must have a backup for it even when the - deployment is small. The same network can be assigned to more than one - DHCP agent and one DHCP agent can host more than one network. - -#. List DHCP agents that host a specified network: - - .. code-block:: console - - $ neutron dhcp-agent-list-hosting-net net1 - - +--------------------------------------+-------+----------------+-------+ - | id | host | admin_state_up | alive | - +--------------------------------------+-------+----------------+-------+ - | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) | - +--------------------------------------+-------+----------------+-------+ - -#. List the networks hosted by a given DHCP agent: - - This command is to show which networks a given dhcp agent is managing. - - .. code-block:: console - - $ neutron net-list-on-dhcp-agent a0c1c21c-d4f4-4577-9ec7-908f2d48622d - - +------------------------+------+---------------------------------+ - | id | name | subnets | - +------------------------+------+---------------------------------+ - | 89dca1c6-c7d4-4f7a | | | - | -b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd | - | | | -8e45-d5cf646db9d1 10.0.1.0/24 | - +------------------------+------+---------------------------------+ - -#. Show agent details. - - The :command:`agent-show` command shows details for a specified agent: - - .. code-block:: console - - $ neutron agent-show a0c1c21c-d4f4-4577-9ec7-908f2d48622d - - +--------------------+---------------------------------------------------+ - | Field | Value | - +--------------------+---------------------------------------------------+ - | admin_state_up | True | - | agent_type | DHCP agent | - | alive | False | - | binary | neutron-dhcp-agent | - | configurations |{ | - | | "subnets": 1, | - | | "dhcp_driver": "neutron.agent.linux.dhcp.Dnsmasq",| - | | "networks": 1, | - | | "dhcp_lease_time": 120, | - | | "ports": 3 | - | |} | - | created_at | 2013-03-16T01:16:18.000000 | - | description | | - | heartbeat_timestamp| 2013-03-17T01:37:22.000000 | - | host | HostA | - | id | 58f4ce07-6789-4bb3-aa42-ed3779db2b03 | - | started_at | 2013-03-16T06:48:39.000000 | - | topic | dhcp_agent | - +--------------------+---------------------------------------------------+ - - In this output, ``heartbeat_timestamp`` is the time on the neutron - server. You do not need to synchronize all agents to this time for this - extension to run correctly. ``configurations`` describes the static - configuration for the agent or run time data. This agent is a DHCP agent - and it hosts one network, one subnet, and three ports. - - Different types of agents show different details. The following output - shows information for a Linux bridge agent: - - .. code-block:: console - - $ neutron agent-show ed96b856-ae0f-4d75-bb28-40a47ffd7695 - - +---------------------+--------------------------------------+ - | Field | Value | - +---------------------+--------------------------------------+ - | admin_state_up | True | - | binary | neutron-linuxbridge-agent | - | configurations | { | - | | "physnet1": "eth0", | - | | "devices": "4" | - | | } | - | created_at | 2013-03-16T01:49:52.000000 | - | description | | - | disabled | False | - | group | agent | - | heartbeat_timestamp | 2013-03-16T01:59:45.000000 | - | host | HostB | - | id | ed96b856-ae0f-4d75-bb28-40a47ffd7695 | - | topic | N/A | - | started_at | 2013-03-16T06:48:39.000000 | - | type | Linux bridge agent | - +---------------------+--------------------------------------+ - - The output shows ``bridge-mapping`` and the number of virtual network - devices on this L2 agent. - -**Manage assignment of networks to DHCP agent** - -Now that you have run the :command:`net-list-on-dhcp-agent` and -:command:`dhcp-agent-list-hosting-net` commands, you can add a network to a -DHCP agent and remove one from it. - -#. Default scheduling. - - When you create a network with one port, you can schedule it to an - active DHCP agent. If many active DHCP agents are running, select one - randomly. You can design more sophisticated scheduling algorithms in the - same way as nova-schedule later on. - - .. code-block:: console - - $ neutron net-create net2 - $ neutron subnet-create net2 9.0.1.0/24 --name subnet2 - $ neutron port-create net2 - $ neutron dhcp-agent-list-hosting-net net2 - - +--------------------------------------+-------+----------------+-------+ - | id | host | admin_state_up | alive | - +--------------------------------------+-------+----------------+-------+ - | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) | - +--------------------------------------+-------+----------------+-------+ - - It is allocated to DHCP agent on HostA. If you want to validate the - behavior through the :command:`dnsmasq` command, you must create a subnet for - the network because the DHCP agent starts the dnsmasq service only if - there is a DHCP. - -#. Assign a network to a given DHCP agent. - - To add another DHCP agent to host the network, run this command: - - .. code-block:: console - - $ neutron dhcp-agent-network-add f28aa126-6edb-4ea5-a81e-8850876bc0a8 net2 - Added network net2 to dhcp agent - $ neutron dhcp-agent-list-hosting-net net2 - - +--------------------------------------+-------+----------------+-------+ - | id | host | admin_state_up | alive | - +--------------------------------------+-------+----------------+-------+ - | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) | - | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True | :-) | - +--------------------------------------+-------+----------------+-------+ - - Both DHCP agents host the ``net2`` network. - -#. Remove a network from a specified DHCP agent. - - This command is the sibling command for the previous one. Remove - ``net2`` from the DHCP agent for HostA: - - .. code-block:: console - - $ neutron dhcp-agent-network-remove a0c1c21c-d4f4-4577-9ec7-908f2d48622d \ - net2 - Removed network net2 to dhcp agent - $ neutron dhcp-agent-list-hosting-net net2 - - +--------------------------------------+-------+----------------+-------+ - | id | host | admin_state_up | alive | - +--------------------------------------+-------+----------------+-------+ - | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True | :-) | - +--------------------------------------+-------+----------------+-------+ - - You can see that only the DHCP agent for HostB is hosting the ``net2`` - network. - -**HA of DHCP agents** - -Boot a VM on net2. Let both DHCP agents host ``net2``. Fail the agents -in turn to see if the VM can still get the desired IP. - -#. Boot a VM on net2: - - .. code-block:: console - - $ neutron net-list - - +-------------------------+------+-----------------------------+ - | id | name | subnets | - +-------------------------+------+-----------------------------+ - | 89dca1c6-c7d4-4f7a- | | | - | b730-549af0fb6e34 | net1 | f6c832e3-9968-46fd-8e45 | - | | | -d5cf646db9d1 10.0.1.0/24 | - | 9b96b14f-71b8-4918-90aa-| | | - | c5d705606b1a | net2 | 6979b71a-0ae8-448c-aa87- | - | | | 65f68eedcaaa 9.0.1.0/24 | - +-------------------------+------+-----------------------------+ - - .. code-block:: console - - $ nova boot --image tty --flavor 1 myserver4 \ - --nic net-id=9b96b14f-71b8-4918-90aa-c5d705606b1a - - .. code-block:: console - - $ nova list - - +-------------------------------------+----------+-------+---------------+ - | ID | Name | Status| Networks | - +-------------------------------------+----------+-------+---------------+ - |c394fcd0-0baa-43ae-a793-201815c3e8ce |myserver1 |ACTIVE | net1=10.0.1.3 | - |2d604e05-9a6c-4ddb-9082-8a1fbdcc797d |myserver2 |ACTIVE | net1=10.0.1.4 | - |c7c0481c-3db8-4d7a-a948-60ce8211d585 |myserver3 |ACTIVE | net1=10.0.1.5 | - |f62f4731-5591-46b1-9d74-f0c901de567f |myserver4 |ACTIVE | net2=9.0.1.2 | - +-------------------------------------+----------+-------+---------------+ - -#. Make sure both DHCP agents hosting ``net2``: - - Use the previous commands to assign the network to agents. - - .. code-block:: console - - $ neutron dhcp-agent-list-hosting-net net2 - - +--------------------------------------+-------+----------------+-------+ - | id | host | admin_state_up | alive | - +--------------------------------------+-------+----------------+-------+ - | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | HostA | True | :-) | - | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | HostB | True | :-) | - +--------------------------------------+-------+----------------+-------+ - -**Test the HA** - -#. Log in to the ``myserver4`` VM, and run ``udhcpc``, ``dhclient`` or - other DHCP client. - -#. Stop the DHCP agent on HostA. Besides stopping the - ``neutron-dhcp-agent`` binary, you must stop the ``dnsmasq`` processes. - -#. Run a DHCP client in VM to see if it can get the wanted IP. - -#. Stop the DHCP agent on HostB too. - -#. Run ``udhcpc`` in the VM; it cannot get the wanted IP. - -#. Start DHCP agent on HostB. The VM gets the wanted IP again. - -**Disable and remove an agent** - -An administrator might want to disable an agent if a system hardware or -software upgrade is planned. Some agents that support scheduling also -support disabling and enabling agents, such as L3 and DHCP agents. After -the agent is disabled, the scheduler does not schedule new resources to -the agent. After the agent is disabled, you can safely remove the agent. -Remove the resources on the agent before you delete the agent. - -To run the following commands, you must stop the DHCP agent on HostA. - -.. code-block:: console - - $ neutron agent-update --admin-state-up False \ - a0c1c21c-d4f4-4577-9ec7-908f2d48622d - $ neutron agent-list - - +--------------------------------------+--------------------+-------+-------+----------------+ - | id | agent_type | host | alive | admin_state_up | - +--------------------------------------+--------------------+-------+-------+----------------+ - | 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-) | True | - | a0c1c21c-d4f4-4577-9ec7-908f2d48622d | DHCP agent | HostA | :-) | False | - | ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-) | True | - | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | :-) | True | - +--------------------------------------+--------------------+-------+-------+----------------+ - -.. code-block:: console - - $ neutron agent-delete a0c1c21c-d4f4-4577-9ec7-908f2d48622d - Deleted agent: a0c1c21c-d4f4-4577-9ec7-908f2d48622d - $ neutron agent-list - - +--------------------------------------+--------------------+-------+-------+----------------+ - | id | agent_type | host | alive | admin_state_up | - +--------------------------------------+--------------------+-------+-------+----------------+ - | 1b69828d-6a9b-4826-87cd-1757f0e27f31 | Linux bridge agent | HostA | :-) | True | - | ed96b856-ae0f-4d75-bb28-40a47ffd7695 | Linux bridge agent | HostB | :-) | True | - | f28aa126-6edb-4ea5-a81e-8850876bc0a8 | DHCP agent | HostB | :-) | True | - +--------------------------------------+--------------------+-------+-------+----------------+ - -After deletion, if you restart the DHCP agent, it appears on the agent -list again. +This section is fully described in the Networking Guide: +http://docs.openstack.org/mitaka/networking-guide/misc-add-ha-for-dhcp.html