+
    ˜qgjÆI  ã                   ó†  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIt^ RIH	t	H
t
HtHtHt ^ RIHtHtHtHtHt ]P(                  ! ]4      tRtRtR.tRt ! R R]P6                  4      t ! R	 R
]4      t ! R R]4      t ! R R4      t R t!R t"R t#RR R llt$RR R llt%R R lt&]t']]PP                  33.t)R t*R# )é    N)ÚAnyÚDictÚListÚOptionalÚoverload)Úatomic_helperÚnetÚsourcesÚsubpÚutilziid-dsopennebulaÚnobodyú
context.shc                   ób   a € ] tR t^,t o RtR tR tR tV 3R lR lt]	R 4       t
RR ltR	tV tR
# )ÚDataSourceOpenNebulaÚ
OpenNebulac                óÀ   € \         P                  P                  WW#4       R V n        \        P
                  P                  VP                  R4      V n        R V n        R # )NÚ
opennebula)	r
   Ú
DataSourceÚ__init__ÚseedÚosÚpathÚjoinÚseed_dirÚnetwork)ÚselfÚsys_cfgÚdistroÚpathss   &&&&ÚH/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyr   ÚDataSourceOpenNebula.__init__0   s@   € Ü×Ñ×#Ñ# D°6ÔAØˆŒ	ÜŸ™Ÿ™ U§^¡^°\ÓBˆŒØˆŽó    c                ó„   € \         P                  P                  V 4      pV: R V P                  : RV P                  : R2# )z [seed=z	][dsmode=Ú])r
   r   Ú__str__r   Údsmode)r   Úroots   & r    r%   ÚDataSourceOpenNebula.__str__6   s-   € Ü×!Ñ!×)Ñ)¨$Ó/ˆÛ,0°$·)´)¸T¿[¼[ÐIÐIr"   c                óŠ  € R \         /pRpRp\        pRV P                  9   d   V P                  P                  R4      pV P                  .pVP                  \        4       4       V FÁ  p \        P                  P                  V P                  4      '       d   \        W`P                  VR7      pMTVP                  R4      '       d>   \        P                  ! \        VV P                  R7      p\        P                   ! Wg4      pV'       g   K©  Tp\(        P-                  RV4        M	  V'       d   Vf   R# VR	,          p	\        P.                  ! W‘.4      p	V P1                  VP                  R
4      V P                  P                  R4      .4      V n        V P2                  \4        P6                  8X  d   R# W0n        VP                  R4      V n        W�n        VP                  R4      V n        R#   \"         d     EK�  \$         d   pThRp?i\        P&                   d    \(        P+                  RT4        EL;i ; i)zinstance-idNÚ	parseuser©Úasuserz/dev)r,   r   z%s was not mountablezfound datasource in %sFÚmetadataÚDSMODEr&   únetwork-interfacesÚuserdataT) ÚDEFAULT_IIDÚDEFAULT_PARSEUSERÚds_cfgÚgetr   ÚextendÚfind_candidate_devsr   r   ÚisdirÚread_context_disk_dirr   Ú
startswithÚ	functoolsÚpartialr   Úmount_cbÚNonContextDiskDirÚBrokenContextDiskDirÚMountFailedErrorÚLOGÚwarningÚdebugÚmergemanydictÚ_determine_dsmoder&   r
   ÚDSMODE_DISABLEDr   r   r-   Úuserdata_raw)
r   ÚdefaultsÚresultsr   r*   Ú
candidatesÚcdevÚpartially_applied_funcÚexcÚmds
   &         r    Ú	_get_dataÚDataSourceOpenNebula._get_data:   sÑ  € Ø!¤;Ð/ˆØ,0ˆØ"ˆô &ˆ	Ø˜$Ÿ+™+Ô%ØŸ™Ÿ™¨Ó4ˆIà—m‘m�_ˆ
Ø×ÑÔ-Ó/Ô0ÛˆDð:Ü—7‘7—=‘= §¡×/Ò/Ü3ØŸk™k°)ô‘Gð —_‘_ V×,Ò,ô .7×->Ò->Ü-Ø(Ø#Ÿ{™{ô.Ð*ô
 #Ÿmšm¨DÓI�G÷ ‰wØ�Ü—	‘	Ð2°DÔ9Ùñ5 ÷8 �w’Ùð �ZÕ ˆÜ×Ò  Ó/ˆð ×,Ñ,Ø�[‰[˜Ó" D§K¡K§O¡O°HÓ$=Ð>ó
ˆŒð �;‰;œ'×1Ñ1Ô1ÙàŒ	Ø—{‘{Ð#7Ó8ˆŒØŒØ#ŸK™K¨
Ó3ˆÔÙøô? %ô ÛÜ'ô Ø�	ûÜ×(Ñ(ô :Ü—‘Ð2°D×9ð:ús=   Á+AG5Â2G5Ã	=G5Ç5IÈIÈIÈHÈIÈ'IÉIc                ó    <€ V ^8„  d   QhRS[ /# ©é   Úreturn©Ústr)ÚformatÚ__classdict__s   "€r    Ú__annotate__Ú!DataSourceOpenNebula.__annotate__w   s   ø€ ÷ 9ñ 9¡#ñ 9r"   c                ó¦   € V P                   f   \        P                  # V P                  V P                   9   d   RpMRpV: RV P                   : R2# )z/Return the subplatform metadata source details.zseed-dirzconfig-diskz (Ú))r   r
   ÚMETADATA_UNKNOWNr   )r   Úsubplatform_types   & r    Ú_get_subplatformÚ%DataSourceOpenNebula._get_subplatformw   sC   € à�9‰9ÒÜ×+Ñ+Ð+Ø�=‰=˜DŸI™IÔ%Ø)Ñà,ÐÛ,¨d¯i¬iÐ8Ð8r"   c                ó:   € V P                   e   V P                   # R # ©N)r   )r   s   &r    Únetwork_configÚ#DataSourceOpenNebula.network_config�   s   € à�<‰<Ò#Ø—<‘<Ðár"   c                ó’   € Vf%   V P                   \        P                  8X  d   RpMRp\        P                  P	                  WV4      # )NTF)r&   r
   ÚDSMODE_NETWORKr   Úget_hostname)r   ÚfqdnÚ
resolve_ipÚmetadata_onlys   &&&&r    rf   Ú!DataSourceOpenNebula.get_hostnameˆ   s=   € ØÒØ�{‰{œg×4Ñ4Ô4Ø!‘
à"�
Ü×!Ñ!×.Ñ.¨t¸:ÓFÐFr"   )r&   r-   r   r   r   rF   N)FFF)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Údsnamer   r%   rN   r^   Úpropertyrb   rf   Ú__static_attributes__Ú__classdictcell__©rW   s   @r    r   r   ,   sE   ø‡ € à€FòòJò;÷z9ð 9ð ñó ð÷Gò Gr"   r   c                   ó   € ] tR t^‘tRtR# )r=   © N©rk   rl   rm   rn   rq   ru   r"   r    r=   r=   ‘   ó   † Ûr"   r=   c                   ó   € ] tR t^•tRtR# )r>   ru   Nrv   ru   r"   r    r>   r>   •   rw   r"   r>   c                   óf  a € ] tR t^™t o R#V 3R lR lltV 3R lR ltV 3R lR ltV 3R lR	 ltV 3R
 lR ltV 3R lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR lt]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tR#V 3R lR lltV 3R  lR! ltR"tV tR# )$ÚOpenNebulaNetworkNc          	      ól   <€ V ^8„  d   QhRS[ S[S[3,          RS[RS[S[ S[S[3,          ,          RR/# )rR   Úcontextr   Úsystem_nics_by_macrS   N)r   rU   r   r   )rV   rW   s   "€r    rX   ÚOpenNebulaNetwork.__annotate__š   sH   ø€ ÷ =ñ =á‘c™3�h•ð=ñ ð=ñ %¡T©#©s¨(¥^Õ4ð	=ð
 
ñ=r"   c                óž  € Wn         Vf   \        V4      p\        P                  ! \	        VP                  4       R R7       Uu. uF  pVNK  	  up4      V n        / V n        VP                  4        FR  w  rE\        P                  ! RV4      pV'       g   K&  VP                  ^4      V P                  VP                  4       &   KT  	  R # u upi )Nc                 ó<   € \         P                  ! V ^,          4      # )é   )r	   Únatural_sort_key)Úks   &r    Ú<lambda>Ú,OpenNebulaNetwork.__init__.<locals>.<lambda>©   s   € ¤c×&:Ò&:¸1¸Q½4Ô&@r"   )Úkeyz
^(.+)_MAC$)r|   Úget_physical_nics_by_macÚcollectionsÚOrderedDictÚsortedÚitemsÚifacesÚcontext_devnameÚreÚmatchÚgroupÚlower)r   r|   r   r}   rƒ   ÚvÚms   &&&&   r    r   ÚOpenNebulaNetwork.__init__š   s¸   € ð ŒØÒ%Ü!9¸&Ó!AÐä×#Ò#ô $Ø*×0Ñ0Ó2Ù@õóñ˜ó ññóð 	Œð 02ˆÔØ—M‘M–O‰DˆAÜ—’˜¨Ó*ˆAß‰qØ23·'±'¸!³*�×$Ñ$ Q§W¡W£YÓ/ó $ùòs   ÁC
c                ó&   <€ V ^8„  d   QhRS[ RS[ /# )rR   ÚmacrS   rT   )rV   rW   s   "€r    rX   r~   ·   s   ø€ ÷ Gñ G™#ð G¡#ñ Gr"   c                ó    € R P                  VP                  R4      R,           Uu. uF  p\        \        V^4      4      NK  	  up4      # u upi )Ú.Ú::rR   NN)r   ÚsplitrU   Úint)r   r–   Úcs   && r    Úmac2ipÚOpenNebulaNetwork.mac2ip·   s<   € Ø�x‰x°#·)±)¸C³.ÀÖ2DÓEÑ2D¨QœœS  B›ZžÑ2DÑEÓFÐFùÒEs   ¦Ac                óL   <€ V ^8„  d   QhRS[ RS[S[ S[S[ ,          3,          /# ©rR   ÚdevrS   )rU   r   r   )rV   rW   s   "€r    rX   r~   º   s(   ø€ ÷ ñ ¡3ð ©4±±T¹#µY°Õ+?ñ r"   c                ó  € / p. pV P                  VR R4      P                  4       V P                  P                  RR4      P                  4       ,            F  pWC9  g   K  VP	                  V4       K  	  V'       d   W2R&   . pV P                  VRR4      P                  4       V P                  P                  RR4      P                  4       ,            F  pWe9  g   K  VP	                  V4       K  	  V'       d   WRR&   V# )ÚdnsÚ ÚDNSÚ	addressesÚsearch_domainÚSEARCH_DOMAINÚsearch)Ú	get_fieldrš   r|   r4   Úappend)r   r¡   Únameserversr£   Úserverr§   Údomains   &&     r    Úget_nameserversÚ!OpenNebulaNetwork.get_nameserversº   sï   € Ø,.ˆØˆà�N‰N˜3  rÓ*×0Ñ0Ó2Ø�l‰l×Ñ˜u bÓ)×/Ñ/Ó1÷2ð 2ð ð Ö Ø—
‘
˜6Ö"ñ	2÷
 Ø'*˜Ñ$Ø#%ˆà�N‰N˜3 °Ó4×:Ñ:Ó<Ø�l‰l×Ñ˜°Ó3×9Ñ9Ó;÷<ð <ð ð Ö*Ø×$Ñ$ VÖ,ñ	<÷
 Ø$1˜Ñ!ØÐr"   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# r    ©rU   r   )rV   rW   s   "€r    rX   r~   Ð   s   ø€ ÷ *ñ *™3ð *¡8©C¥=ñ *r"   c                ó&   € V P                  VR 4      # )Úmtu©rª   ©r   r¡   s   &&r    Úget_mtuÚOpenNebulaNetwork.get_mtuÐ   s   € Ø�~‰~˜c 5Ó)Ð)r"   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# )rR   r¡   r–   rS   rT   )rV   rW   s   "€r    rX   r~   Ó   s"   ø€ ÷ ;ñ ;™#ð ;¡Cð ;©Cñ ;r"   c                óF   € V P                  VR V P                  V4      4      # )Úip)rª   r�   )r   r¡   r–   s   &&&r    Úget_ipÚOpenNebulaNetwork.get_ipÓ   s   € Ø�~‰~˜c 4¨¯©°SÓ)9Ó:Ð:r"   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# r    )rU   r   )rV   rW   s   "€r    rX   r~   Ö   s   ø€ ÷ ñ ™3ð ¡4©¥9ñ r"   c                ó¶   € . pV P                  VR 4      pV'       d   VP                  V4       V P                  VR4      pV'       d   VP                  V4       V# )Úip6Úip6_ula)rª   r«   )r   r¡   Ú
addresses6rÀ   rÁ   s   &&   r    Úget_ip6ÚOpenNebulaNetwork.get_ip6Ö   sO   € Ø "ˆ
Ø�n‰n˜S %Ó(ˆßØ×Ñ˜cÔ"Ø—.‘.  iÓ0ˆßØ×Ñ˜gÔ&ØÐr"   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r    rT   )rV   rW   s   "€r    rX   r~   à   s   ø€ ÷ >ñ >¡#ð >©#ñ >r"   c                ó(   € V P                  VR R4      # )Úip6_prefix_lengthÚ64rµ   r¶   s   &&r    Úget_ip6_prefixÚ OpenNebulaNetwork.get_ip6_prefixà   s   € Ø�~‰~˜cÐ#6¸Ó=Ð=r"   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# r    r²   )rV   rW   s   "€r    rX   r~   ã   s   ø€ ÷ .ñ .™sð .¡x±¥}ñ .r"   c                ó&   € V P                  VR 4      # )Úgatewayrµ   r¶   s   &&r    Úget_gatewayÚOpenNebulaNetwork.get_gatewayã   s   € Ø�~‰~˜c 9Ó-Ð-r"   c                ó6   <€ V ^8„  d   QhRS[ RS[S[ ,          /# r    r²   )rV   rW   s   "€r    rX   r~   æ   s   ø€ ÷ /ñ /¡ð /©±­ñ /r"   c                óV   € V P                  VR 4      pVe   V# V P                  VR4      # )Úip6_gatewayÚgateway6rµ   )r   r¡   rÒ   s   && r    Úget_gateway6ÚOpenNebulaNetwork.get_gateway6æ   s1   € ð —n‘n S¨-Ó8ˆØÒ"ØÐØ�~‰~˜c :Ó.Ð.r"   c                ó&   <€ V ^8„  d   QhRS[ RS[ /# r    rT   )rV   rW   s   "€r    rX   r~   ï   s   ø€ ÷ <ñ <™Cð <¡Cñ <r"   c                ó(   € V P                  VR R4      # )Úmaskz255.255.255.0rµ   r¶   s   &&r    Úget_maskÚOpenNebulaNetwork.get_maskï   s   € Ø�~‰~˜c 6¨?Ó;Ð;r"   c                óL   <€ V ^8„  d   QhRS[ RS[S[S[ S[ 3,          ,          /# r    )rU   r   r   )rV   rW   s   "€r    rX   r~   ò   s(   ø€ ÷ ñ ™cð ¡d©4±±S°­>Õ&:ñ r"   c                óD  € . pV P                  VRR4      P                  R4       Fw  pVP                  4       pV'       g   K  \        P                  ! RV4      pV'       d&   VP                  RVR,          RVR,          /4       Ka  \        P                  R	W4       Ky  	  V# )
z÷Parse ETHx_ROUTES into a list of Netplan route dicts.

Expected format: "NETWORK via GATEWAY[, NETWORK via GATEWAY, ...]"
e.g. "10.0.0.0/8 via 192.168.1.1, 192.168.100.0/24 via 10.0.0.1"
Returns an empty list when the variable is absent or empty.
Úroutesr¤   Ú,z3\s*(?P<route_to>\S+)\s+via\s+(?P<route_via>\S+)\s*$ÚtoÚroute_toÚviaÚ	route_viaz(Unparseable ETHx_ROUTES entry for %s: %r)rª   rš   ÚstriprŽ   r�   r«   r@   rA   )r   r¡   rÝ   Úentryr“   s   &&   r    Ú
get_routesÚOpenNebulaNetwork.get_routesò   s‹   € ð (*ˆØ—^‘^ C¨°2Ó6×<Ñ<¸SÖAˆEØ—K‘K“MˆEßÙÜ—’ØFØóˆA÷ Ø—‘˜t Q z¥]°E¸1¸[½>ÐJÖKä—‘Ø>Àöñ Bð ˆr"   c                ó<   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          /# )rR   r¡   ÚnamerS   r²   )rV   rW   s   "€r    rX   r~     s   ø€ ×BÑB™SÐB©ÐB±¹µÑBr"   c                ó   € R # ra   ru   )r   r¡   rè   s   &&&r    rª   ÚOpenNebulaNetwork.get_field
  s   € Ù?Br"   c          	      ó@   <€ V ^8„  d   QhRS[ RS[ RRRS[S[ ,          /# )rR   r¡   rè   ÚdefaultNrS   r²   )rV   rW   s   "€r    rX   r~     s1   ø€ ÷ ñ ÙðÙ!ðØ,0ðá	‘#�ñr"   c                ó   € R # ra   ru   ©r   r¡   rè   rì   s   &&&&r    rª   rê     s   € ñ r"   c                ó2   <€ V ^8„  d   QhRS[ RS[ RS[ RS[ /# ©rR   r¡   rè   rì   rS   rT   )rV   rW   s   "€r    rX   r~     s   ø€ ×FÑF™SÐF©ÐF±cÐF¹cÑFr"   c                ó   € R # ra   ru   rî   s   &&&&r    rª   rê     s   € ÙCFr"   c          	      óR   <€ V ^8„  d   QhRS[ RS[ RS[S[ ,          RS[S[ ,          /# rð   r²   )rV   rW   s   "€r    rX   r~     s5   ø€ ÷ 5ñ 5Ùð5Ù!ð5Ù,4±S­Mð5á	‘#�ñ5r"   c                óŒ   € V P                   P                  RP                  VV34      P                  4       4      pVR9   d   V# T# )z”return the field name in context for device dev.

context stores <dev>_<NAME> (example: eth0_DOMAIN).
an empty string for value will return default.Ú_)Nr¤   )r|   r4   r   Úupper)r   r¡   rè   rì   Úvals   &&&& r    rª   rê     sL   € ð �l‰l×ÑØ�H‰HàØðó÷
 ‰e‹gó
ˆð  Ô+ˆwÐ4°Ð4r"   c                ó6   <€ V ^8„  d   QhRS[ S[S[3,          /# rQ   )r   rU   r   )rV   rW   s   "€r    rX   r~   $  s   ø€ ÷ :ñ :™$™s¡C˜x�.ñ :r"   c                ó¬  € R ^R/ /p/ pV P                   P                  4        EF£  w  r4VP                  4       pV P                  P	                  W44      p/ pRV/VR&   . VR&   V P                  V4      p\        \        P                  ! V4      4      pVR,          P                  V P                  WS4      R,           V,           4       V P                  V4      p	V	'       dG   V P                  V4      p
VR,          P                  V	 Uu. uF  q»R,           V
,           NK  	  up4       V P                  V4      pV'       d   WÆR&   V P                  V4      pV'       d   WÖR&   V P!                  V4      pV'       d   WæR&   V P#                  V4      pV'       d   \%        V4      VR	&   V P'                  V4      pV'       d   VVR
&   WbV&   EK¦  	  W!R&   V# u upi )ÚversionÚ	ethernetsÚ
macaddressr�   r¦   Ú/Úgateway4rÓ   r¬   r´   rÝ   )rŒ   r‹   r‘   r�   r4   rÙ   rU   r	   Úipv4_mask_to_net_prefixr«   r¼   rÃ   rÉ   r5   rÎ   rÔ   r¯   r·   r›   rå   )r   Únetconfrú   r–   r¡   Úc_devÚdevconfrØ   ÚprefixrÂ   Úprefix6ÚirÍ   rÓ   r¬   r´   Úextra_routess   &                r    Úgen_confÚOpenNebulaNetwork.gen_conf$  s¿  € Ø#,¨a°¸bÐ"Aˆà/1ˆ	ØŸ™×)Ñ)×+‰HˆCØ—)‘)“+ˆCð ×(Ñ(×,Ñ,¨SÓ6ˆEà&(ˆGð !-¨cÐ2ˆG�GÑð $&ˆG�KÑ Ø—=‘= Ó'ˆDÜœ×4Ò4°TÓ:Ó;ˆFØ�KÕ ×'Ñ'¨¯©°EÓ(?À#Õ(EÈÕ(NÔOð Ÿ™ eÓ,ˆJßØ×-Ñ-¨eÓ4�Ø˜Õ$×+Ñ+Ù0:Ó;±
¨1˜•W˜w×&Ð&±
Ñ;ôð
 ×&Ñ& uÓ-ˆGßØ&-˜
Ñ#ð ×(Ñ(¨Ó/ˆHßØ&.˜
Ñ#ð ×.Ñ.¨uÓ5ˆKßØ)4˜Ñ&ð —,‘,˜uÓ%ˆCßÜ!$ S£�˜‘ð 26·±ÀÓ1GˆLßØ$0�˜Ñ!à$�cŒNñg ,ðj  )�ÑØˆùò? <s   ÄG
)r|   r�   rŒ   ra   )rk   rl   rm   rn   r   r�   r¯   r·   r¼   rÃ   rÉ   rÎ   rÔ   rÙ   rå   r   rª   r  rq   rr   rs   s   @r    rz   rz   ™   s»   ø‡ € ÷=ò =÷:Gð G÷ð ÷,*ð *÷;ð ;÷ð ÷>ð >÷.ð .÷/ð /÷<ð <÷ð ð0 ßBó ØBØ÷ó ðð ßFó ØF÷5ò 5÷$:ö :r"   rz   c                 ó¬   € . p R FK  p\         P                  ! V4      pVP                  4        V F  pW09  g   K  V P                  V4       K  	  KM  	  V # )z=
Return a list of devices that may contain the context disk.
)zLABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)r   Úfind_devs_withÚsortr«   )ÚcombinedÚfÚdevsÚds       r    r6   r6   a  sO   € ð €HÛ=ˆÜ×"Ò" 1Ó%ˆØ�	‰	ŒÛˆAØÖ Ø—‘ Ö"ó ñ >ð €Or"   c                 ó   € R RV .# )Úsudoz-uru   ©Úusers   &r    Úswitch_user_cmdr  p  s   € Ø�D˜$ÐÐr"   c                 ó.   € \         P                  ! R4      # )zDprint the shell environment variables within delimiters to be parsedzŸ
        printf "%s\0" _start_
        [ $0 != 'sh' ] && set -o posix
        set
        [ $0 != 'sh' ] && set +o posix
        printf "%s\0" _start_
        )ÚtextwrapÚdedentru   r"   r    Ú
varprinterr  t  s   € ä�?Š?ð	óð r"   c                ót   € V ^8„  d   QhR\         R\        \         ,          R\        \         \         3,          /# )rR   Úcontentr,   rS   )rU   r   r   )rV   s   "r    rX   rX   �  s5   € ÷ Fñ FÜðFÜ"¤3�-ðFä	Œ#Œsˆ(…^ñFr"   c                ó8  € RV P                  4       9   d   \        P                  R4       \        4       RV ,          ,           \        4       ,           R,           p. pVe   \	        V4      pVP                  RR.4       \        P                  ! W2R7      P                  p/ pVP                  R4      R	,          pV^ ,          V^,          r‡\        R
 \        P                  ! V4       4       4      p	\        R \        P                  ! V4       4       4      p
\        V	P                  4       4      P                  \        V
P                  4       4      4       FB  pV\        9   d   K  V
P                  V4      pVf   K'  WÉP                  V4      8w  g   K>  WÅV&   KD  	  V# )a$  run content and return environment variables which changed

WARNING: the special variable _start_ is used to delimit content

a context.sh that defines this variable might break in unexpected
ways

compatible with posix shells such as dash and ash and any shell
which supports `set -o posix`
s   _start_ zYUser defined _start_ variable in context.sh, this may breakcloud-init in unexpected ways.z{
%s

:
} > /dev/null
Ú
Úshz-e)Údataz_start_ :r�   NNc              3   óF   "  € T F  qP                  R ^R7      x € K  	  R# 5i©Ú=)ÚmaxsplitN©rš   ©Ú.0Úvariables   & r    Ú	<genexpr>Ú%parse_shell_config.<locals>.<genexpr>º  s"   é € ð Ù8K¨H�‰�s Qˆ×'Ð'Ó8Kùó   ‚!c              3   óF   "  € T F  qP                  R ^R7      x € K  	  R# 5ir  r"  r#  s   & r    r&  r'  ½  s"   é € ð Ù8J¨H�‰�s Qˆ×'Ð'Ó8Jùr(  )Úencoder@   rA   r  r  r5   r   Ústdoutrš   ÚdictÚshlexÚsetÚkeysÚunionÚEXCLUDED_VARSr4   )r  r,   ÚbcmdÚcmdÚoutputÚretÚsectionsÚbeforeÚafterÚpre_envÚpost_envr†   Úvalues   &&           r    Úparse_shell_configr<  �  sc  € ð ˜Ÿ™Ó)Ô)Ü�‰ð-ô	
ô$ 	‹Ø
'¨'Õ
1õ	2ä
‹,õ	ð õ	ð 	ð €CØÒÜ˜fÓ%ˆØ‡J�J��dˆ|Ôä�YŠY�sÔ&×-Ñ-€Fð €Cð �|‰|˜MÓ*¨2Õ.€Hð
 ˜Q•K ¨!¥ˆEäñ Ü8=¿ºÀFÔ8Kóó €Gô ñ Ü8=¿ºÀEÔ8Jóó €Hô �7—<‘<“>Ó"×(Ñ(¬¨X¯]©]«_Ó)=Ö>ˆØ”-ÔÙØ—‘˜SÓ!ˆØÔ ¯+©+°cÓ*:Ö!:Ø�‹Hñ ?ð €Jr"   c          
      ó€   € V ^8„  d   QhR\         R\        R\        \         ,          R\        \         \        3,          /# )rR   Ú
source_dirr   r,   rS   )rU   r   r   r   )rV   s   "r    rX   rX   Ê  s>   € ÷ cñ cÜðcÜ ðcÜ*2´3­-ðcä	Œ#Œsˆ(…^ñcr"   c                ó2  € / p\          FM  p\        P                  P                  W4      p\        P                  P	                  V4      '       g   KI  WSV&   KO  	  V'       g   \        V : RR: 24      h/ pRRR/ /pRV9   d`   Ve    \        P                  ! V4        \        P                  P                  V R4      p	\        P                  ! V	4      p
\        W¢R	7      pM\        R4      hV'       g   V# WgR&   RpRV9   d   RpM	RV9   d   RpV'       d_   Wk,          P#                  4       pV Uu. uF1  p\%        V4      '       g   K  VP'                  R4      '       d   K/  VNK3  	  upVR,          R&   R F  pWæ9   g   K  Wn,          VR,          R&    M	  RV9   d   VR,          VR&   MRV9   d   VR,          VR&   RV9   dJ   VP)                  RVP)                  R4      4      pVR8X  d"    \*        P,                  ! VR,          4      VR&   V Uu. uF$  p\4        P6                  ! RV4      '       g   K"  VNK&  	  ppV'       d   \9        Wa4      pVP;                  4       VR&   V#   \         d"   p\        RP                  TR7      4      ThRp?ii ; i  \        P                   d   p\        R
T,          4      ThRp?i\          d   p\        RT,          4      ThRp?ii ; iu upi   \.         d    \0        P3                  R4        EL i ; iu upi )aT  Read ``source_dir`` and return a dictionary containing context data.

The returned dictionary always includes ``"metadata"`` and
``"userdata"`` keys, and may also include ``"network-interfaces"``
when network configuration can be generated from the context.

If ``source_dir`` is not a valid context directory, raise
``NonContextDiskDir``.
z: zno files foundr0   Nr-   r   z'configured user '{user}' does not existr  r+   zError processing context.sh: %szError reading context.sh: %szMissing context.shÚSSH_KEYÚSSH_PUBLIC_KEYÚ#zpublic-keyszlocal-hostnameÚ	USER_DATAÚUSERDATAÚUSERDATA_ENCODINGÚUSER_DATA_ENCODINGÚbase64z"Failed base64 decoding of userdataz^ETH\d+_IP.*$r/   )ÚSET_HOSTNAMEÚHOSTNAMEÚ	PUBLIC_IPÚ	IP_PUBLICÚETH0_IP)ÚCONTEXT_DISK_FILESr   r   r   Úisfiler=   ÚpwdÚgetpwnamÚKeyErrorr>   rV   r   Úload_text_filer<  r   ÚProcessExecutionErrorÚIOErrorÚ
splitlinesÚlenr9   r4   r   Úb64dÚ	TypeErrorr@   rA   rŽ   r�   rz   r  )r>  r   r,   ÚfoundÚafÚfnr|   rH   Úer   r  Ússh_key_varÚlinesÚlinerƒ   ÚencodingÚipaddr_keysÚonets   &&&               r    r8   r8   Ê  sî  € ð €Eß ˆÜ�W‰W�\‰\˜*Ó)ˆÜ�7‰7�>‰>˜"×ÔØ�"‹Iñ !÷
 Ü«JÒ8HÐ IÓJÐJà €GØ)¨4°¸RÐ@€Gà�uÔØÒðÜ—’˜VÔ$ð	Ü—7‘7—<‘< 
¨LÓ9ˆDÜ×)Ò)¨$Ó/ˆGÜ(¨Ô@‰Gô  Ð 4Ó5Ð5çØˆà!ˆJÑð €KØ�GÔØ‰Ø	˜WÔ	$Ø&ˆçØÕ$×/Ñ/Ó1ˆá"ó.
Ù"�T¤c¨$§iŒD¸¿¹È×8L�DˆD™Uñ.
ˆ�
Õ˜MÑ*ó OˆØŽ<Ø4;µJˆG�JÕÐ 0Ñ1Ùñ Oð �gÔØ% kÕ2ˆ�
ÒØ	�wÔ	Ø% jÕ1ˆ�
Ñð �WÔØ—;‘;Ø §¡Ð-AÓ!Bó
ˆð �xÔðBÜ&3×&8Ò&8¸ÀÕ9LÓ&M�˜
Ñ#ñ &ÓG™g˜¬¯ªÐ2BÀA×)F—1�1™g€KÐGßÜ  Ó1ˆØ(,¯©«ˆÐ$Ñ%à€NøôO ô Ü*Ø=×DÑDØ#ð Eó óð ð	ûðûô ×)Ñ)ô 	Ü&Ø1°QÕ7óàðûô ô 	Ü#Ø.°!Õ4óàðûð	üò*.
øô2 ô BÜ—‘Ð@×AðBüò Hss   ÂI( ÂAJ Ä2K(Å
K(Å#K(Ç0 K- ÈLÈ8LÉ(JÉ3JÊJÊK%Ê,J?Ê?K%ËK%ËK Ë K%Ë- LÌLc                óR   € V ^8„  d   QhR\         R\        \        \        3,          /# )rR   r   rS   )r   r   rU   )rV   s   "r    rX   rX   0  s"   € ÷ ñ ¤Sð ¬T´#´s°(­^ñ r"   c           	      óÚ   € \         P                  ! 4       p\        VP                  4        UUu. uF+  w  r#V P                  P                  V4      '       g   K(  W#3NK-  	  upp4      # u uppi ra   )r	   Úget_interfaces_by_macr,  r‹   Ú
networkingÚis_physical)r   r  r“   Úns   &   r    r‡   r‡   0  sQ   € Ü×$Ò$Ó&€DÜØ ŸJ™JœLÔM™L‘D�A¨F×,=Ñ,=×,IÑ,IÈ!×,LŒˆ!‹™LÒMóð ùÛMs   ®%A'
ÁA'
c                 ó8   € \         P                  ! V \        4      # ra   )r
   Úlist_from_dependsÚdatasources)Údependss   &r    Úget_datasource_listrm  A  s   € Ü×$Ò$ W¬kÓ:Ð:r"   )ÚEPOCHREALTIMEÚEPOCHSECONDSÚRANDOMÚLINENOÚSECONDSrô   ÚSRANDOMÚ__vra   )+rˆ   r:   Úloggingr   rO  rŽ   r-  r  Útypingr   r   r   r   r   Ú	cloudinitr   r	   r
   r   r   Ú	getLoggerrk   r@   r1   r2   rM  r1  r   r   Ú	Exceptionr=   r>   rz   r6   r  r  r<  r8   r‡   ÚDataSourceOpenNebulaNetÚDEP_FILESYSTEMrk  rm  ru   r"   r    Ú<module>r|     sÚ   ðó Û Û Û 	Û 
Û 	Û Û ß 6Õ 6ç =Õ =à×Ò˜Ó!€à €ØÐ Ø"�^Ð ð	€ôbG˜7×-Ñ-ô bGôJ	˜	ô 	ô	˜9ô 	÷Eñ EòPò ò
÷F÷RcõLð /Ð ð ˜G×2Ñ2Ð4Ð5ð€ô;r"   