PNG  IHDRQgAMA a cHRMz&u0`:pQ<bKGDgmIDATxwUﹻ& ^CX(J I@ "% (** BX +*i"]j(IH{~R)[~>h{}gy)I$Ij .I$I$ʊy@}x.: $I$Ii}VZPC)I$IF ^0ʐJ$I$Q^}{"r=OzI$gRZeC.IOvH eKX $IMpxsk.쒷/&r[޳<v| .I~)@$updYRa$I |M.e JaֶpSYR6j>h%IRز if&uJ)M$I vLi=H;7UJ,],X$I1AҒJ$ XY XzI@GNҥRT)E@;]K*Mw;#5_wOn~\ DC&$(A5 RRFkvIR}l!RytRl;~^ǷJj اy뷦BZJr&ӥ8Pjw~vnv X^(I;4R=P[3]J,]ȏ~:3?[ a&e)`e*P[4]T=Cq6R[ ~ޤrXR Հg(t_HZ-Hg M$ãmL5R uk*`%C-E6/%[t X.{8P9Z.vkXŐKjgKZHg(aK9ڦmKjѺm_ \#$5,)-  61eJ,5m| r'= &ڡd%-]J on Xm|{ RҞe $eڧY XYrԮ-a7RK6h>n$5AVڴi*ֆK)mѦtmr1p| q:흺,)Oi*ֺK)ܬ֦K-5r3>0ԔHjJئEZj,%re~/z%jVMڸmrt)3]J,T K֦OvԒgii*bKiNO~%PW0=dii2tJ9Jݕ{7"I P9JKTbu,%r"6RKU}Ij2HKZXJ,妝 XYrP ެ24c%i^IK|.H,%rb:XRl1X4Pe/`x&P8Pj28Mzsx2r\zRPz4J}yP[g=L) .Q[6RjWgp FIH*-`IMRaK9TXcq*I y[jE>cw%gLRԕiFCj-ďa`#e~I j,%r,)?[gp FI˨mnWX#>mʔ XA DZf9,nKҲzIZXJ,L#kiPz4JZF,I,`61%2s $,VOϚ2/UFJfy7K> X+6 STXIeJILzMfKm LRaK9%|4p9LwJI!`NsiazĔ)%- XMq>pk$-$Q2x#N ؎-QR}ᶦHZډ)J,l#i@yn3LN`;nڔ XuX5pF)m|^0(>BHF9(cզEerJI rg7 4I@z0\JIi䵙RR0s;$s6eJ,`n 䂦0a)S)A 1eJ,堌#635RIgpNHuTH_SԕqVe ` &S)>p;S$魁eKIuX`I4춒o}`m$1":PI<[v9^\pTJjriRŭ P{#{R2,`)e-`mgj~1ϣLKam7&U\j/3mJ,`F;M'䱀 .KR#)yhTq;pcK9(q!w?uRR,n.yw*UXj#\]ɱ(qv2=RqfB#iJmmL<]Y͙#$5 uTU7ӦXR+q,`I}qL'`6Kͷ6r,]0S$- [RKR3oiRE|nӦXR.(i:LDLTJjY%o:)6rxzҒqTJjh㞦I.$YR.ʼnGZ\ֿf:%55 I˼!6dKxm4E"mG_ s? .e*?LRfK9%q#uh$)i3ULRfK9yxm܌bj84$i1U^@Wbm4uJ,ҪA>_Ij?1v32[gLRD96oTaR׿N7%L2 NT,`)7&ƝL*꽙yp_$M2#AS,`)7$rkTA29_Iye"|/0t)$n XT2`YJ;6Jx".e<`$) PI$5V4]29SRI>~=@j]lp2`K9Jaai^" Ԋ29ORI%:XV5]JmN9]H;1UC39NI%Xe78t)a;Oi Ҙ>Xt"~G>_mn:%|~ޅ_+]$o)@ǀ{hgN;IK6G&rp)T2i୦KJuv*T=TOSV>(~D>dm,I*Ɛ:R#ۙNI%D>G.n$o;+#RR!.eU˽TRI28t)1LWϚ>IJa3oFbu&:tJ*(F7y0ZR ^p'Ii L24x| XRI%ۄ>S1]Jy[zL$adB7.eh4%%누>WETf+3IR:I3Xה)3אOۦSRO'ٺ)S}"qOr[B7ϙ.edG)^ETR"RtRݜh0}LFVӦDB^k_JDj\=LS(Iv─aTeZ%eUAM-0;~˃@i|l @S4y72>sX-vA}ϛBI!ݎߨWl*)3{'Y|iSlEڻ(5KtSI$Uv02,~ԩ~x;P4ցCrO%tyn425:KMlD ^4JRxSهF_}شJTS6uj+ﷸk$eZO%G*^V2u3EMj3k%)okI]dT)URKDS 7~m@TJR~荪fT"֛L \sM -0T KfJz+nإKr L&j()[E&I ߴ>e FW_kJR|!O:5/2跌3T-'|zX ryp0JS ~^F>-2< `*%ZFP)bSn"L :)+pʷf(pO3TMW$~>@~ū:TAIsV1}S2<%ޟM?@iT ,Eūoz%i~g|`wS(]oȤ8)$ ntu`өe`6yPl IzMI{ʣzʨ )IZ2= ld:5+請M$-ї;U>_gsY$ÁN5WzWfIZ)-yuXIfp~S*IZdt;t>KūKR|$#LcԀ+2\;kJ`]YǔM1B)UbG"IRߊ<xܾӔJ0Z='Y嵤 Leveg)$znV-º^3Ւof#0Tfk^Zs[*I꯳3{)ˬW4Ւ4 OdpbZRS|*I 55#"&-IvT&/윚Ye:i$ 9{LkuRe[I~_\ؠ%>GL$iY8 9ܕ"S`kS.IlC;Ҏ4x&>u_0JLr<J2(^$5L s=MgV ~,Iju> 7r2)^=G$1:3G< `J3~&IR% 6Tx/rIj3O< ʔ&#f_yXJiގNSz; Tx(i8%#4 ~AS+IjerIUrIj362v885+IjAhK__5X%nV%Iͳ-y|7XV2v4fzo_68"S/I-qbf; LkF)KSM$ Ms>K WNV}^`-큧32ŒVؙGdu,^^m%6~Nn&͓3ŒVZMsRpfEW%IwdǀLm[7W&bIRL@Q|)* i ImsIMmKmyV`i$G+R 0tV'!V)֏28vU7͒vHꦼtxꗞT ;S}7Mf+fIRHNZUkUx5SAJㄌ9MqμAIRi|j5)o*^'<$TwI1hEU^c_j?Е$%d`z cyf,XO IJnTgA UXRD }{H}^S,P5V2\Xx`pZ|Yk:$e ~ @nWL.j+ϝYb퇪bZ BVu)u/IJ_ 1[p.p60bC >|X91P:N\!5qUB}5a5ja `ubcVxYt1N0Zzl4]7­gKj]?4ϻ *[bg$)+À*x쳀ogO$~,5 زUS9 lq3+5mgw@np1sso Ӻ=|N6 /g(Wv7U;zωM=wk,0uTg_`_P`uz?2yI!b`kĸSo+Qx%!\οe|އԁKS-s6pu_(ֿ$i++T8=eY; צP+phxWQv*|p1. ά. XRkIQYP,drZ | B%wP|S5`~́@i޾ E;Չaw{o'Q?%iL{u D?N1BD!owPHReFZ* k_-~{E9b-~P`fE{AܶBJAFO wx6Rox5 K5=WwehS8 (JClJ~ p+Fi;ŗo+:bD#g(C"wA^ r.F8L;dzdIHUX݆ϞXg )IFqem%I4dj&ppT{'{HOx( Rk6^C٫O.)3:s(۳(Z?~ٻ89zmT"PLtw䥈5&b<8GZ-Y&K?e8,`I6e(֍xb83 `rzXj)F=l($Ij 2*(F?h(/9ik:I`m#p3MgLaKjc/U#n5S# m(^)=y=đx8ŬI[U]~SцA4p$-F i(R,7Cx;X=cI>{Km\ o(Tv2vx2qiiDJN,Ҏ!1f 5quBj1!8 rDFd(!WQl,gSkL1Bxg''՞^ǘ;pQ P(c_ IRujg(Wz bs#P­rz> k c&nB=q+ؔXn#r5)co*Ũ+G?7< |PQӣ'G`uOd>%Mctz# Ԫڞ&7CaQ~N'-P.W`Oedp03C!IZcIAMPUۀ5J<\u~+{9(FbbyAeBhOSܳ1 bÈT#ŠyDžs,`5}DC-`̞%r&ڙa87QWWp6e7 Rϫ/oY ꇅ Nܶըtc!LA T7V4Jsū I-0Pxz7QNF_iZgúWkG83 0eWr9 X]㾮݁#Jˢ C}0=3ݱtBi]_ &{{[/o[~ \q鯜00٩|cD3=4B_b RYb$óBRsf&lLX#M*C_L܄:gx)WΘsGSbuL rF$9';\4Ɍq'n[%p.Q`u hNb`eCQyQ|l_C>Lb꟟3hSb #xNxSs^ 88|Mz)}:](vbۢamŖ࿥ 0)Q7@0=?^k(*J}3ibkFn HjB׻NO z x}7p 0tfDX.lwgȔhԾŲ }6g E |LkLZteu+=q\Iv0쮑)QٵpH8/2?Σo>Jvppho~f>%bMM}\//":PTc(v9v!gոQ )UfVG+! 35{=x\2+ki,y$~A1iC6#)vC5^>+gǵ@1Hy٪7u;p psϰu/S <aʸGu'tD1ԝI<pg|6j'p:tպhX{o(7v],*}6a_ wXRk,O]Lܳ~Vo45rp"N5k;m{rZbΦ${#)`(Ŵg,;j%6j.pyYT?}-kBDc3qA`NWQū20/^AZW%NQ MI.X#P#,^Ebc&?XR tAV|Y.1!؅⨉ccww>ivl(JT~ u`ٵDm q)+Ri x/x8cyFO!/*!/&,7<.N,YDŽ&ܑQF1Bz)FPʛ?5d 6`kQձ λc؎%582Y&nD_$Je4>a?! ͨ|ȎWZSsv8 j(I&yj Jb5m?HWp=g}G3#|I,5v珿] H~R3@B[☉9Ox~oMy=J;xUVoj bUsl_35t-(ՃɼRB7U!qc+x4H_Qo֮$[GO<4`&č\GOc[.[*Af%mG/ ňM/r W/Nw~B1U3J?P&Y )`ѓZ1p]^l“W#)lWZilUQu`-m|xĐ,_ƪ|9i:_{*(3Gѧ}UoD+>m_?VPۅ15&}2|/pIOʵ> GZ9cmíتmnz)yߐbD >e}:) r|@R5qVSA10C%E_'^8cR7O;6[eKePGϦX7jb}OTGO^jn*媓7nGMC t,k31Rb (vyܴʭ!iTh8~ZYZp(qsRL ?b}cŨʊGO^!rPJO15MJ[c&~Z`"ѓޔH1C&^|Ш|rʼ,AwĴ?b5)tLU)F| &g٣O]oqSUjy(x<Ϳ3 .FSkoYg2 \_#wj{u'rQ>o;%n|F*O_L"e9umDds?.fuuQbIWz |4\0 sb;OvxOSs; G%T4gFRurj(֍ڑb uԖKDu1MK{1^ q; C=6\8FR艇!%\YÔU| 88m)֓NcLve C6z;o&X x59:q61Z(T7>C?gcļxѐ Z oo-08jہ x,`' ҔOcRlf~`jj".Nv+sM_]Zk g( UOPyεx%pUh2(@il0ݽQXxppx-NS( WO+轾 nFߢ3M<;z)FBZjciu/QoF 7R¥ ZFLF~#ȣߨ^<쩡ݛкvџ))ME>ώx4m#!-m!L;vv#~Y[đKmx9.[,UFS CVkZ +ߟrY٧IZd/ioi$%͝ب_ֶX3ܫhNU ZZgk=]=bbJS[wjU()*I =ώ:}-蹞lUj:1}MWm=̛ _ ¾,8{__m{_PVK^n3esw5ӫh#$-q=A̟> ,^I}P^J$qY~Q[ Xq9{#&T.^GVj__RKpn,b=`żY@^՝;z{paVKkQXj/)y TIc&F;FBG7wg ZZDG!x r_tƢ!}i/V=M/#nB8 XxЫ ^@CR<{䤭YCN)eKOSƟa $&g[i3.C6xrOc8TI;o hH6P&L{@q6[ Gzp^71j(l`J}]e6X☉#͕ ׈$AB1Vjh㭦IRsqFBjwQ_7Xk>y"N=MB0 ,C #o6MRc0|$)ف"1!ixY<B9mx `,tA>)5ػQ?jQ?cn>YZe Tisvh# GMމȇp:ԴVuږ8ɼH]C.5C!UV;F`mbBk LTMvPʍϤj?ԯ/Qr1NB`9s"s TYsz &9S%U԰> {<ؿSMxB|H\3@!U| k']$U+> |HHMLޢ?V9iD!-@x TIî%6Z*9X@HMW#?nN ,oe6?tQwڱ.]-y':mW0#!J82qFjH -`ѓ&M0u Uγmxϵ^-_\])@0Rt.8/?ٰCY]x}=sD3ojަЫNuS%U}ԤwHH>ڗjܷ_3gN q7[q2la*ArǓԖ+p8/RGM ]jacd(JhWko6ڎbj]i5Bj3+3!\j1UZLsLTv8HHmup<>gKMJj0@H%,W΃7R) ">c, xixј^ aܖ>H[i.UIHc U1=yW\=S*GR~)AF=`&2h`DzT󑓶J+?W+}C%P:|0H܆}-<;OC[~o.$~i}~HQ TvXΈr=b}$vizL4:ȰT|4~*!oXQR6Lk+#t/g lԁߖ[Jڶ_N$k*". xsxX7jRVbAAʯKҎU3)zSNN _'s?f)6X!%ssAkʱ>qƷb hg %n ~p1REGMHH=BJiy[<5 ǁJҖgKR*倳e~HUy)Ag,K)`Vw6bRR:qL#\rclK/$sh*$ 6덤 KԖc 3Z9=Ɣ=o>X Ώ"1 )a`SJJ6k(<c e{%kϊP+SL'TcMJWRm ŏ"w)qc ef꒵i?b7b('"2r%~HUS1\<(`1Wx9=8HY9m:X18bgD1u ~|H;K-Uep,, C1 RV.MR5άh,tWO8WC$ XRVsQS]3GJ|12 [vM :k#~tH30Rf-HYݺ-`I9%lIDTm\ S{]9gOڒMNCV\G*2JRŨ;Rҏ^ڽ̱mq1Eu?To3I)y^#jJw^Ńj^vvlB_⋌P4x>0$c>K†Aļ9s_VjTt0l#m>E-,,x,-W)سo&96RE XR.6bXw+)GAEvL)͞K4$p=Ũi_ѱOjb HY/+@θH9޼]Nԥ%n{ &zjT? Ty) s^ULlb,PiTf^<À] 62R^V7)S!nllS6~͝V}-=%* ʻ>G DnK<y&>LPy7'r=Hj 9V`[c"*^8HpcO8bnU`4JȪAƋ#1_\ XϘHPRgik(~G~0DAA_2p|J묭a2\NCr]M_0 ^T%e#vD^%xy-n}-E\3aS%yN!r_{ )sAw ڼp1pEAk~v<:`'ӭ^5 ArXOI驻T (dk)_\ PuA*BY]yB"l\ey hH*tbK)3 IKZ򹞋XjN n *n>k]X_d!ryBH ]*R 0(#'7 %es9??ښFC,ՁQPjARJ\Ρw K#jahgw;2$l*) %Xq5!U᢯6Re] |0[__64ch&_}iL8KEgҎ7 M/\`|.p,~`a=BR?xܐrQ8K XR2M8f ?`sgWS%" Ԉ 7R%$ N}?QL1|-эټwIZ%pvL3Hk>,ImgW7{E xPHx73RA @RS CC !\ȟ5IXR^ZxHл$Q[ŝ40 (>+ _C >BRt<,TrT {O/H+˟Pl6 I B)/VC<6a2~(XwV4gnXR ϱ5ǀHٻ?tw똤Eyxp{#WK qG%5],(0ӈH HZ])ג=K1j&G(FbM@)%I` XRg ʔ KZG(vP,<`[ Kn^ SJRsAʠ5xՅF`0&RbV tx:EaUE/{fi2;.IAwW8/tTxAGOoN?G}l L(n`Zv?pB8K_gI+ܗ #i?ޙ.) p$utc ~DžfՈEo3l/)I-U?aԅ^jxArA ΧX}DmZ@QLےbTXGd.^|xKHR{|ΕW_h] IJ`[G9{).y) 0X YA1]qp?p_k+J*Y@HI>^?gt.06Rn ,` ?);p pSF9ZXLBJPWjgQ|&)7! HjQt<| ؅W5 x W HIzYoVMGP Hjn`+\(dNW)F+IrS[|/a`K|ͻ0Hj{R,Q=\ (F}\WR)AgSG`IsnAR=|8$}G(vC$)s FBJ?]_u XRvύ6z ŨG[36-T9HzpW̞ú Xg큽=7CufzI$)ki^qk-) 0H*N` QZkk]/tnnsI^Gu't=7$ Z;{8^jB% IItRQS7[ϭ3 $_OQJ`7!]W"W,)Iy W AJA;KWG`IY{8k$I$^%9.^(`N|LJ%@$I}ֽp=FB*xN=gI?Q{٥4B)mw $Igc~dZ@G9K X?7)aK%݅K$IZ-`IpC U6$I\0>!9k} Xa IIS0H$I H ?1R.Чj:4~Rw@p$IrA*u}WjWFPJ$I➓/6#! LӾ+ X36x8J |+L;v$Io4301R20M I$-E}@,pS^ޟR[/s¹'0H$IKyfŸfVOπFT*a$I>He~VY/3R/)>d$I>28`Cjw,n@FU*9ttf$I~<;=/4RD~@ X-ѕzἱI$: ԍR a@b X{+Qxuq$IЛzo /~3\8ڒ4BN7$IҀj V]n18H$IYFBj3̵̚ja pp $Is/3R Ӻ-Yj+L;.0ŔI$Av? #!5"aʄj}UKmɽH$IjCYs?h$IDl843.v}m7UiI=&=0Lg0$I4: embe` eQbm0u? $IT!Sƍ'-sv)s#C0:XB2a w I$zbww{."pPzO =Ɔ\[ o($Iaw]`E).Kvi:L*#gР7[$IyGPI=@R 4yR~̮´cg I$I/<tPͽ hDgo 94Z^k盇΄8I56^W$I^0̜N?4*H`237}g+hxoq)SJ@p|` $I%>-hO0eO>\ԣNߌZD6R=K ~n($I$y3D>o4b#px2$yڪtzW~a $I~?x'BwwpH$IZݑnC㧄Pc_9sO gwJ=l1:mKB>Ab<4Lp$Ib o1ZQ@85b̍ S'F,Fe,^I$IjEdù{l4 8Ys_s Z8.x m"+{~?q,Z D!I$ϻ'|XhB)=…']M>5 rgotԎ 獽PH$IjIPhh)n#cÔqA'ug5qwU&rF|1E%I$%]!'3AFD/;Ck_`9 v!ٴtPV;x`'*bQa w I$Ix5 FC3D_~A_#O݆DvV?<qw+I$I{=Z8".#RIYyjǪ=fDl9%M,a8$I$Ywi[7ݍFe$s1ՋBVA?`]#!oz4zjLJo8$I$%@3jAa4(o ;p,,dya=F9ً[LSPH$IJYЉ+3> 5"39aZ<ñh!{TpBGkj}Sp $IlvF.F$I z< '\K*qq.f<2Y!S"-\I$IYwčjF$ w9 \ߪB.1v!Ʊ?+r:^!I$BϹB H"B;L'G[ 4U#5>੐)|#o0aڱ$I>}k&1`U#V?YsV x>{t1[I~D&(I$I/{H0fw"q"y%4 IXyE~M3 8XψL}qE$I[> nD?~sf ]o΁ cT6"?'_Ἣ $I>~.f|'!N?⟩0G KkXZE]ޡ;/&?k OۘH$IRۀwXӨ<7@PnS04aӶp.:@\IWQJ6sS%I$e5ڑv`3:x';wq_vpgHyXZ 3gЂ7{{EuԹn±}$I$8t;b|591nءQ"P6O5i }iR̈́%Q̄p!I䮢]O{H$IRϻ9s֧ a=`- aB\X0"+5"C1Hb?߮3x3&gşggl_hZ^,`5?ߎvĸ%̀M!OZC2#0x LJ0 Gw$I$I}<{Eb+y;iI,`ܚF:5ܛA8-O-|8K7s|#Z8a&><a&/VtbtLʌI$I$I$I$I$I$IRjDD%tEXtdate:create2022-05-31T04:40:26+00:00!Î%tEXtdate:modify2022-05-31T04:40:26+00:00|{2IENDB`Mini Shell

HOME


Mini Shell 1.0
DIR:/lib/python2.7/site-packages/cloudinit/sources/
Upload File :
Current File : //lib/python2.7/site-packages/cloudinit/sources/__init__.pyc
�
oB�]c@s�ddlZddlmZddlZddlZddlZddlZddlmZddl	m
Z
ddl	mZddl	m
Z
ddlmZddl	mZdd	l	mZdd
l	mZddlmZddlmZd
ZdZdZdZeeegZdZdZdZdZ dZ!dZ"dZ#dZ$dZ%dZ&ej'e(�Z)idd�fd6dd�fd 6d!d"�fd#6Z*d$d%d&d'd(fZ+ed)e+�e+�Z,d*e-fd+��YZ.d,e-fd-��YZ/d.fd/�Z0e#d0�Z1ed1d2d3d4g�Z2ej3ej4�de5fd5��Y�Z6d6�Z7d7�Z8d8�Z9d9d:�Z:d;�Z;e<d<�Z=d=e>fd>��YZ?d?�Z@dS(@i����N(t
namedtuple(t
write_json(timporter(tlog(tnet(t	EventType(t
type_utils(t	user_data(tutil(tlaunch_index(teventstdisabledtlocalRtpasst
FILESYSTEMtNETWORKt
DataSources|EXPERIMENTAL: The structure and format of content scoped under the 'ds' key may change in subsequent releases of cloud-init.sinstance-data.jsonsinstance-data-sensitive.jsonsredacted for non-root users
cloud-namet_unsettunknowns	aws-chinacCs
|dkS(Ntaws((tc((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt<lambda>@sscn-saws-govcCs
|dkS(NR((R((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRAssus-gov-sazure-chinacCs
|dkS(Ntazure((R((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRBstchinatcmdlinetdst
system_cfgtfallbackt	initramfstNetworkConfigSourcetDataSourceNotFoundExceptioncBseZRS((t__name__t
__module__(((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRMstInvalidMetaDataExceptioncBseZdZRS(s8Raised when metadata is broken, unavailable or disabled.(RR t__doc__(((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR!QstcCs7tj|�}g|d<g|d<x
|j�D]�\}}|rS|d|}n|}||ksq||kr�|dj|�nt|t�r�|jd�r�|dj|�|jdd�||<nt|t�r0t	|||�}|dj
|jd��|dj
|jd��|||<q0q0W|S(s�Process all instance metadata cleaning it up for persisting as json.

    Strip ci-b64 prefix and catalog any 'base64_encoded_keys' as a list

    @return Dict copy of processed metadata.
    tbase64_encoded_keystsensitive_keyst/sci-b64:R#(tcopytdeepcopytitemstappendt
isinstancetstrt
startswithtreplacetdicttprocess_instance_metadatatextendtpop(tmetadatatkey_pathR%tmd_copytkeytvaltsub_key_patht
return_val((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR0Vs*



cCs�|jdg�s|Stj|�}xw|jd�D]f}|jd�}|}x>|D]6}t||t�rW||dkrW||}qWqWW|||<q5W|S(s�Redact any sensitive keys from to provided metadata dictionary.

    Replace any keys values listed in 'sensitive_keys' with redact_value.
    R%R&i����(tgetR'R(tsplitR+R/(R3tredact_valueR5R4t
path_partstobjtpath((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytredact_sensitive_keysus
#tURLParmstmax_wait_secondsttimeout_secondstnum_retriescBsmeZeZdZdZd5Zd5Zd5Z	d5Z
ejej
ejejfZdZdZdZieejg�d6Zdefdefdifd6d7d8d9fZeZd:Zd5d�Zd�Zd�Zd;d�Z d�Z!d�Z"d�Z#d�Z$ed�Z%d�Z&e'd��Z(e'd��Z)e'd��Z*d�Z+e'd��Z,d�Z-e'd��Z.d�Z/e'd ��Z0d!�Z1d"�Z2d#�Z3d$�Z4d%�Z5d&�Z6d'�Z7d(�Z8e'd)��Z9e'd*��Z:d+�Z;eeed,�Z<d-�Z=d.�Z>d/�Z?e@d5d5d0��ZAe'd1��ZBe'd2��ZCd3�ZDd4�ZERS(<sen_US.UTF-8t_undefi����i
itnetworktec2_metadatatnetwork_jsonR3tuserdatatuserdata_rawt
vendordatatvendordata_rawssecurity-credentialscCs�||_||_||_d|_i|_d|_d|_d|_t	j
|jd|jfi�|_|js�i|_n|s�t
j|j�|_n	||_dS(Nt
datasource(tsys_cfgtdistrotpathstNoneRIR3RJRKRLRtget_cfg_by_pathtdsnametds_cfgtudtUserDataProcessortud_proc(tselfRNRORPRW((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt__init__�s									cCs
tj|�S(N(Rtobj_name(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt__str__�scCs�|j�}|j�}|j}ii
dgd6|d6|d6|jd6|jd6|jd6|j�d6|d	6|d
6|d6|d6|jd
6|jd6d6S(s2Return a dictionary of standardized metadata keys.tsubplatformt
_beta_keyssavailability-zonetavailability_zones
cloud-namet
cloud_nametplatformtpublic_ssh_keyssinstance-idtinstance_idslocal-hostnametlocal_hostnametregiontv1(tget_hostnametget_instance_idR^R_t
platform_typetget_public_ssh_keysRdR\(RXRcRbR^((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt_get_standardized_metadata�s$	





cCst|js
dS|r|}n	|j}x6|D].\}}t||�r,t|||�q,q,W|spt|_ndS(s�Reset any cached metadata attributes to datasource defaults.

        @param attr_defaults: Optional tuple of (attr, value) pairs to
           set instead of cached_attr_defaults.
        N(t_dirty_cachetcached_attr_defaultsthasattrtsetattrtFalse(RXt
attr_defaultstattr_valuest	attributetvalue((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytclear_cached_attrs�s			cCs-t|_|j�}|s|S|j�|S(s�Datasources implement _get_data to setup metadata and userdata_raw.

        Minimally, the datasource should return a boolean True on success.
        (tTrueRkt	_get_datatpersist_instance_data(RXtreturn_value((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytget_datas	
c
Cs�t|d�rWtjt|d��}|jdd
�|jdd
�i|d6}n�ii|jd6d6}t|d�r�t|d�}|tkr�||dd<q�nt|d�r�t|d�}|tkr�||dd<q�n|j|j	��t
|dd<y1tj|�}t
tj|�d	|j�}WnStk
rh}tjd
t|��tStk
r�}tjd
t|��tSXtjj|jjt�}t||�tjj|jjt�}	t|	t|�dd�t S(s�Process and write INSTANCE_JSON_FILE with all instance metadata.

        Replace any hyphens with underscores in key names for use in template
        processing.

        @return True on successful write, False otherwise.
        t_crawled_metadatas	user-datasvendor-dataRt	meta_dataRHRGt_docR%s'Error persisting instance-data.json: %stmodei�N(!RmR'R(tgetattrR2RQR3tUNSETtupdateRjtEXPERIMENTAL_TEXTRt
json_dumpsR0tjsontloadstsensitive_metadata_keyst	TypeErrortLOGtwarningR,RotUnicodeDecodeErrortosR?tjoinRPtrun_dirtINSTANCE_JSON_FILERtINSTANCE_JSON_SENSITIVE_FILER@Ru(
RXtcrawled_metadatat
instance_dataRHRGtcontenttprocessed_datatet	json_filetjson_sensitive_file((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRwsH

	cCstd��dS(s@Walk metadata sources, process crawled data and save attributes.slSubclasses of DataSource must implement _get_data which sets self.metadata, vendordata_raw and userdata_raw.N(tNotImplementedError(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRvIscCsE|j}y"t|jjd|j��}Wn3tk
r`tjtd|jjd�|�nX|j}y+t	dt|jjd|j���}Wn<tk
r�|j}tjtd|jjd�|�nX|j
}y"t|jjd|j
��}Wn3tk
r4tjtd|jjd�|�nXt|||�S(s�Return the Datasource's prefered url_read parameters.

        Subclasses may override url_max_wait, url_timeout, url_retries.

        @return: A URLParams object with max_wait_seconds, timeout_seconds,
            num_retries.
        tmax_waits6Config max_wait '%s' is not an int, using default '%s'ittimeouts5Config timeout '%s' is not an int, using default '%s'tretriess5Config retries '%s' is not an int, using default '%s'(
turl_max_waittintRTR:t
ValueErrorRtlogexcR�turl_timeouttmaxturl_retriest	Exceptiont	URLParams(RXR�R�R�((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytget_url_paramsOs0	"
	(
		"
cCsJ|jdkr-|jj|j��|_n|rC|j|j�S|jS(N(RIRQRWtprocesstget_userdata_rawt
_filter_xdata(RXtapply_filter((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytget_userdatass
cCs4|jdkr-|jj|j��|_n|jS(N(RKRQRWR�tget_vendordata_raw(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytget_vendordatazscCsM|jdkrFtj�|_|jdkrFtjd|j�qFn|jS(sADetermine the network interface used during local network config.s(Did not find a fallback interface on %s.N(t_fallback_interfaceRQRtfind_fallback_nicR�R�R_(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytfallback_interfacescCsIt|d�s$|jj�|_n|jsB|jj�|_n|jS(Nt_platform_type(RmRStlowerR�(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRh�s
	cCsCt|d�s!|j�|_n|js<|j�|_n|jS(s�Return a string representing subplatform details for the datasource.

        This should be guidance for where the metadata is sourced.
        Examples of this on different clouds:
            ec2:       metadata (http://169.254.169.254)
            openstack: configdrive (/dev/path)
            openstack: metadata (http://169.254.169.254)
            nocloud:   seed-dir (/seed/dir/path)
            lxd:   nocloud (/seed/dir/path)
        t_subplatform(Rmt_get_subplatformR�(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR\�s
	cCs$t|d�r dt|d�StS(s?Subclasses should implement to return a "slug (detail)" string.tmetadata_addresss
metadata (%s)(RmR~tMETADATA_UNKNOWN(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR��scCs�|jr|jS|jr�|jjt�r�|jjt�}t|tj�ra|j�|_q�|j�j�|_t	j
dtt|��n|j�j�|_|jS(s�Return lowercase cloud name as determined by the datasource.

        Datasource can determine or define its own cloud product name in
        metadata.
        s5Ignoring metadata provided key %s: non-string type %s(t_cloud_nameR3R:tMETADATA_CLOUD_NAME_KEYR+tsixtstring_typesR�t_get_cloud_nameR�tdebugttype(RXR_((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR_�s	cCs|jS(s�Return the datasource name as it frequently matches cloud name.

        Should be overridden in subclasses which can run on multiple
        cloud names, such as DatasourceEc2.
        (RS(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR��scCs+|js
dSd|jkr'|jdSdS(Nslaunch-index(R3RQ(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR	�s
	cCsHtjtj|j��g}|}x|D]}|j|�}q+W|S(N(R	tFilterRtsafe_inttapply(RXtprocessed_udtfilterstnew_udtf((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR��s

cCstS(N(Ro(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytis_disconnected�scCs|jS(N(RJ(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR��scCs|jS(N(RL(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR��scCsiS(N((RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytget_config_obj�scCst|jjd��S(Nspublic-keys(tnormalize_pubkey_dataR3R:(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRi�scCsdS(s5Publish the public SSH host keys (found in /etc/ssh/*.pub).

        @param hostkeys: List of host key tuples (key_type, key_value),
            where key_type is the first field in the public key file
            (e.g. 'ssh-rsa') and key_value is the key itself
            (e.g. 'AAAAB3NzaC1y...').
        N((RXthostkeys((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytpublish_host_keys�scCs�idd6}xp|j�D]b\}}|j|�s;qnx>|D]6}d||t|�f}tjj|�rB|SqBWqWdS(Ntvdtxvdtvtbtsds	/dev/%s%s(R�R�R�(R)R-tlenR�R?texistsRQ(RXt
short_nametmappingstnfromttlisttntotcand((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt
_remap_device�s

cCsdS(N(RQ(RXt_name((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytdevice_name_to_devicescCs4|j}y|jj�}Wntk
r/nX|S(s<Default locale is en_US.UTF-8, but allow distros to override(tdefault_localeROt
get_localeR�(RXtlocale((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR�s	
cCsG|jjd|jjd��}|r+|S|jjdi�jd�S(Nsavailability-zoneR^t	placement(R3R:(RXttop_level_az((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR^s
	cCs|jjd�S(NRd(R3R:(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRd!scCs.|jsd|jkrdSt|jd�S(Nsinstance-idsiid-datasource(R3R,(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRg%scCs�d}d}|}|js/|jjd�r�|r9d
Sg}tj�}tj|�}	|	r�|	jd�dkr�t|	�jd�}qg|r�|jd�dkr�t|�jd�}qg|r�||g}qg||g}n�|jd}
tj	|
�rXg}|rtj
|
�}n|r<t|�jd�}qgd|
jdd�g}n|
jd�}t|�dkr�|d}dj
|d�}n
|d}|r�||kr�d	||fS|Sd
S(s;Get hostname or fqdn from the datasource. Look it up if desired.

        @param fqdn: Boolean, set True to return hostname with domain.
        @param resolve_ip: Boolean, set True to attempt to resolve an ipv4
            address provided in local-hostname meta-data.
        @param metadata_only: Boolean, set True to avoid looking up hostname
            if meta-data doesn't have local-hostname present.

        @return: hostname or qualified hostname. Optionally return None when
            metadata_only is True and local-hostname data is not available.
        tlocaldomaint	localhostslocal-hostnamet.isip-%st-is%s.%sN(R3R:RQRRftget_fqdn_from_hoststfindR,R;tis_ipv4t
gethostbyaddrR.R�R�(RXtfqdnt
resolve_ipt
metadata_onlyt	defdomaintdefhosttdomainttoksthostnamet
hosts_fqdntlhost((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRf+s@


cCs|jjd|�S(Ntdata_source(ROtget_package_mirror_info(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR�hsc	Csi}xm|D]e}x\|jj�D]K\}}||kr#|j|�sZt�||<n||j|�q#q#Wq
WxP|j�D]B\}}tjd|dj|��|jd|t	ff�q�W|r�|j�|j
�}|r�tSntjd|dj|��tS(s�Refresh cached metadata if the datasource supports this event.

        The datasource has a list of update_events which
        trigger refreshing all cached metadata as well as refreshing the
        network configuration.

        @param source_event_types: List of EventTypes which may trigger a
            metadata update.

        @return True if the datasource did successfully update cached metadata
            due to source_event_type.
        s:Update datasource metadata and %s config due to events: %ss, s
_%s_configs(Datasource %s not updated for events: %s(
t
update_eventsR)R:tsettaddR�R�R�RtRRyRuRo(	RXtsource_event_typestsupported_eventsteventtupdate_scopeR�tscopetmatched_eventstresult((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytupdate_metadataks(


cCstS(N(Ro(RXRN((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytcheck_instance_id�scCsx|dkrt}n|dkr*t}nxG|D]?}|dkrIq1n||krY|Stjd||�|Sq1W|S(Ns%invalid dsmode '%s', using default=%s(RQtDSMODE_NETWORKt
VALID_DSMODESR�R�(t
candidatestdefaulttvalidt	candidate((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt_determine_dsmode�s		
	
cCsdS(N(RQ(RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytnetwork_config�scCsdS(N((RX((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytfirst_instance_boot�scCsdS(s(setup(is_new_instance)

        This is called before user-data and vendor-data have been processed.

        Unless the datasource has set mode to 'local', then networking
        per 'fallback' or per 'network_config' will have been written and
        brought up the OS at this point.
        N((RXtis_new_instance((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytsetup�s	cCsdS(s�activate(cfg, is_new_instance)

        This is called before the init_modules will be called but after
        the user-data and vendor-data have been fully processed.

        The cfg is fully up to date config, it contains a merged view of
           system config, datasource config, user config, vendor config.
        It should be used rather than the sys_cfg passed to __init__.

        is_new_instance is a boolean indicating if this is a new instance.
        N((RXtcfgR((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytactivate�sN(suserdataN(suserdata_rawN(s
vendordataN(svendordata_rawN(ssecurity-credentials((FRR R�tdsmodeR�RSRQR�R�R�R�RRRRRtnetwork_config_sourcesR�R�R�R�RtBOOT_NEW_INSTANCER�RRlRoRkR�RYR[RjRtRyRwRvR�R�R�tpropertyR�RhR\R�R_R�R	R�R�R�R�R�RiR�R�R�R�R^RdRgRfR�R�R�tstaticmethodRRRRR(((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR�sx					2		$											
					=		%		cCs�g}|s|St|tj�r2t|�j�St|ttf�rQt|�St|t�r�xz|j�D]i\}}t|tj�r�|g}nt|ttf�rmx'|D]}|r�|j	|�q�q�WqmqmWn|S(N(
R+R�R�R,t
splitlinestlistR�R/R)R*(tpubkey_datatkeyst_keynametklisttpkey((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR��s 

c
Cst|||�}g|D]}tj|�^q}	t|krFdnd}
tjd|
|	�x�t|	|�D]�\}}tjdd|j	dd�dd	|
|fd
d|
|fd|�}
yn|
�btjd
|�||||�}|j
tjg�r*d|
|f|
_
|tj|�fSWdQXWqotk
rWtjtd|�qoXqoWddj|	�}t|��dS(NRFRs#Searching for %s data source in: %stnames	search-%sRR#tdescriptionssearching for %s data from %stmessagesno %s data found from %stparents%Seeing if we can get any data from %ssfound %s data from %ssGetting data from %s faileds4Did not find any data source, searched classes: (%s)s, (tlist_sourcesRRZtDEP_NETWORKR�R�tzipR
tReportEventStackR.R�RR
RR�RR�R�R(RNRORPtds_depstcfg_listtpkg_listtreportertds_listR�tds_namesR}Rtclstmyreptstmsg((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytfind_source�s,"		
cCs�g}tjd|||�x�|D]�}|jt�sKdt|f}ntj||dg�\}}xO|D]G}tj|�}t|d�}	|	|�}
|
rp|j|
�PqpqpWq#W|S(NsLLooking for data source in: %s, via packages %s that matches dependencies %ss%s%stget_datasource_list(	R�R�R-t	DS_PREFIXRtfind_modulet
import_moduleR~R1(RtdependsRtsrc_listtds_nametm_locst_looked_locstm_loctmodtlistertmatches((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRs"	

	

ssystem-uuidcCs9|s
tStj|�}|s#tS|j�|j�kS(N(RoRt
read_dmi_dataR�(Rbtfieldt	dmi_value((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytinstance_id_matches_system_uuidscCs�|st}n|st}n|tkr>|tkr:|S|SxEtj�D]7\}}|\}}|j|�rK||�rK|SqKW|tkr�|S|S(s@Lookup the canonical cloud-id for a given cloud_name and region.(R�tCLOUD_ID_REGION_PREFIX_MAPR)R-(R_RdR`tprefixt
cloud_id_testtcloud_idtvalid_cloud((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytcanonical_cloud_id(s		cCs�|s
dSt|tj�r |St|t�r<tj|�St|t�r|tkrpt	|j
d�dt�Std��ntdt
|���dS(sLdata: a loaded object (strings, arrays, dicts).
    return something suitable for cloudinit vendordata_raw.

    if data is:
       None: return None
       string: return string
       list: return data
             the list is then processed in UserDataProcessor
       dict: return convert_vendordata(data.get('cloud-init'))
    s
cloud-inittrecurses'vendordata['cloud-init'] cannot be dicts$Unknown data type for vendordata: %sN(RQR+R�R�RR'R(R/Rutconvert_vendordataR:RoR�R�(tdataR>((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyR?;s
tBrokenMetadatacBseZRS((RR (((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyRATscCsOg}t|�}x6|D].\}}|t|�kr|j|�qqW|S(N(R�R*(R+R tret_listtdepsetR"tdeps((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pytlist_from_depends_s(AtabctcollectionsRR'R�R�R�tcloudinit.atomic_helperRt	cloudinitRRtloggingRtcloudinit.eventRRRRURtcloudinit.filtersR	tcloudinit.reportingR
tDSMODE_DISABLEDtDSMODE_LOCALR�tDSMODE_PASSR�tDEP_FILESYSTEMRR(R�R�R�tREDACT_SENSITIVE_VALUER�RR�t	getLoggerRR�R8t_NETCFG_SOURCE_NAMESRR�RR!R0R@R�t
add_metaclasstABCMetatobjectRR�R&RR7R=RuR?tIOErrorRARE(((s>/usr/lib/python2.7/site-packages/cloudinit/sources/__init__.pyt<module>sp��A