+
    ˜qgjø5  ã                   ó˜  € ^ RI t ^ RIt^ RIt^ RIt^ RIt^ RIHt ^ RIt^ RIH	t	 ^ RI
Ht ^ RIHt ^ RIHtHtHtHtHt ^ RIHtHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RIHt ]P@                  ! ]!4      t"RR.t#^t$^t%^
t& ! R R]PN                  PP                  4      t)R t*R t+ ! R R]PX                  4      t-]-]P\                  33.t/R t0R# )é    N)Úurlparse)ÚConnectionError)ÚHTTPConnection)ÚPoolManager)ÚdmiÚperformanceÚsourcesÚ
url_helperÚutil)Ú
EventScopeÚ	EventType)ÚNoDHCPLeaseError)ÚEphemeralDHCPv4ÚEphemeralIPv6Network)ÚDataSourceHostname)ÚProcessExecutionErrorzhttp://169.254.42.42zhttp://[fd00:42::42]c                   ó@   a a€ ] tR t^&t oRtV 3R ltRR ltRtVtV ;t	# )ÚSourceAddressAdapterz>
Adapter for requests to choose the local address to bind to.
c                ó<   <€ Wn         \        \        V `  ! R/ VB  R # )N© )Úsource_addressÚsuperr   Ú__init__)Úselfr   ÚkwargsÚ	__class__s   &&,€ÚF/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceScaleway.pyr   ÚSourceAddressAdapter.__init__+   s   ø€ Ø,ÔÜÔ" DÒ2Ñ<°VÔ<ó    c                ó²   € \         P                  \        P                  \        P                  ^3.,           p\        VVVV P                  VR7      V n        R# )é   )Ú	num_poolsÚmaxsizeÚblockr   Úsocket_optionsN)r   Údefault_socket_optionsÚsocketÚ
SOL_SOCKETÚSO_REUSEPORTr   r   Úpoolmanager)r   Úconnectionsr#   r$   r%   s   &&&& r   Úinit_poolmanagerÚ%SourceAddressAdapter.init_poolmanager/   sR   € Ü'×>Ñ>Ü×Ñ¤× 3Ñ 3°QÐ7ðB
õ 
ˆô 'Ø!ØØØ×.Ñ.Ø)ô
ˆÖr   )r*   r   )F)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r,   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©r   Ú__classdict__s   @@r   r   r   &   s   ù‡ € ñõ=÷

ô 

r   r   c           	     óè   €  \         P                  ! V RV^ VR R7      p\        P                  ! VP                  4      #   \         P
                   d   pTP                  R8X  d    Rp?R# h Rp?ii ; i)a%  
Retrieve user data or vendor data.

Scaleway user/vendor data API returns HTTP/404 if user/vendor data is not
set.

This function calls `url_helper.readurl` but instead of considering
HTTP/404 as an error that requires a retry, it considers it as empty
user/vendor data.

Also, be aware the user data/vendor API requires the source port to be
below 1024 to ensure the client is root (since non-root users can't bind
ports below 1024). If requests raises ConnectionError (EADDRINUSE), the
caller should retry to call this function on an other port.
Nc                 ó–   € V P                   R 8g  ;'       d4    \        V P                  \        P                  P
                  4      '       * # )é”  )ÚcodeÚ
isinstanceÚcauseÚrequestsÚ
exceptionsr   )Úexcs   &r   Ú<lambda>Ú%query_data_api_once.<locals>.<lambda>W   s8   €  S§X¡X°¡_÷ &ð &ä˜sŸy™y¬(×*=Ñ*=×*MÑ*MÓNÔNð&r   )ÚdataÚtimeoutÚretriesÚsessionÚexception_cbr:   )r
   Úreadurlr   Údecode_binaryÚcontentsÚUrlErrorr;   )Úapi_addressrD   Úrequests_sessionÚrespr@   s   &&&  r   Úquery_data_api_oncerO   <   sk   € ð Ü×!Ò!ØØØð Ø$ñô
ˆô ×!Ò! $§-¡-Ó0Ð0øÜ×Ñô à�8‰8�sŒ?ÝØûð	ús   ‚<? ¿A1ÁA,Á+A,Á,A1c                óÔ  € \        ^\        V^4      4       Fê  p \        P                  RW4       \        P
                  ! 4       pRp \        V4      P                  pTpV^ ,          R8X  d   V^R p\        P                  ! VR\        P                  R7      ^ ,          ^ ,          p	V	\        P                  8X  d   RpTP                  R\        Yd3R7      4       \        YTR	7      p
\        P                  R
T 4       T
u # 	  Xh  \         d     LUi ; i  \         P"                   d;   p\        P%                  RY4       \&        P(                  ! ^4       Tp Rp?EKK  Rp?ii ; i)a  Get user or vendor data.

Handle the retrying logic in case the source port is used.

Scaleway metadata service requires the source port of the client to
be a privileged port (<1024).  This is done to ensure that only a
privileged user on the system can access the metadata service.
z*Trying to get %s data (bind on port %d)...z0.0.0.0Ú[N)Úprotoz0::zhttp://)r   )rD   rM   z%s-data downloadedz%Error while trying to get %s data: %séÿÿÿÿ)ÚrangeÚmaxÚLOGÚdebugr>   ÚSessionr   Únetlocr'   ÚgetaddrinfoÚIPPROTO_TCPÚAF_INET6Ú
ValueErrorÚmountr   rO   r
   rK   ÚwarningÚtimeÚsleep)Úapi_typerL   rE   rD   ÚportrM   Ú	localhostÚurl_addressÚaddressÚ
addr_protorC   r@   Úlast_excs   &&&&         r   Úquery_data_apiri   d   sT  € ô �aœ˜W a›Ö)ˆð"	Ü�I‰IØ<¸hôô  (×/Ò/Ó1Ðà!ˆIðÜ& {Ó3×:Ñ:�Ø%�Ø˜q•> SÔ(Ø)¨!¨BÐ/�GÜ#×/Ò/Ø˜T¬×);Ñ);ôàõàõ�
ð ¤§¡Ô0Ø %�Ið ×"Ñ"ØÜ$°YÐ4EÔFôô 'ØÐ?OôˆDô �I‰IÐ*¨HÔ5ØŠKñ9 *ðL €Nøô) ô Ùðûô ×"Ñ"ô 	ä�K‰KÐ?ÀÔOÜ�JŠJ�qŒMØˆHÞûð	ús=   ›-DÁ	A6DÂ?ADÄDÄDÄDÄDÄE'Ä-.E"Å"E'c                   ó0  a a€ ] tR t^˜t oRt]P                  ]P                  ]P                  ]P                  0/tV 3R ltV3R lV 3R lltR tR t]V3R lR l4       tR	 t]R
 4       t]R 4       tR tR tRR lt]R 4       t]R 4       tRtVtV ;t# )ÚDataSourceScalewayÚScalewayc                óÈ  <€ \         \        V `  WV4       \        P                  ! \        P
                  ! VR R./ 4      .4      V n        \        V P                  P                  R\        4      4      V n
        \        V P                  P                  R\        4      4      V n        \        V P                  P                  R\        4      4      V n        \        P                   V n        \$        V n        RV n        RV n        RV n        RV n        RV n        RV P                  P3                  4       9   d-   V ;P&                  V P                  R,          ,          un        R# R# )Ú
datasourcerl   rE   rD   Úmax_waitNTÚmetadata_urls)r   rk   r   r   ÚmergemanydictÚget_cfg_by_pathÚds_cfgÚintÚgetÚDEF_MD_RETRIESrE   ÚDEF_MD_TIMEOUTrD   ÚDEF_MD_MAX_WAITro   r	   ÚUNSETÚ_network_configÚDS_BASE_URLSrp   Úmetadata_urlÚuserdata_urlÚvendordata_urlÚephemeral_fixed_addressÚhas_ipv4Úkeys)r   Úsys_cfgÚdistroÚpathsr   s   &&&&€r   r   ÚDataSourceScaleway.__init__¢   s  ø€ ÜÔ  $Ñ0°À%ÔHä×(Ò(ä×$Ò$ W¨|¸ZÐ.HÈ"ÓMðó
ˆŒô ˜4Ÿ;™;Ÿ?™?¨9´nÓEÓFˆŒÜ˜4Ÿ;™;Ÿ?™?¨9´nÓEÓFˆŒÜ˜DŸK™KŸO™O¨J¼ÓHÓIˆŒÜ&Ÿ}™}ˆÔÜ)ˆÔØ ˆÔØ ˆÔØ"ˆÔØ'+ˆÔ$ØˆŒØ˜dŸk™k×.Ñ.Ó0Ô0Ø×Ò $§+¡+¨oÕ">Õ>×ñ 1r   c                ó$   <€ V ^8„  d   QhRS[ RR/# )é   Úci_pkl_versionÚreturnN)rt   )Úformatr7   s   "€r   Ú__annotate__ÚDataSourceScaleway.__annotate__¸   s   ø€ ÷ 9ñ 9©ð 9°ñ 9r   c                ó®   <€ \         SV `  V4       R RRRR\        R\        RRRR/pV F(  p\	        W4      '       d   K  \        WW#,          4       K*  	  R# )r   Nr€   Tro   rp   r}   r~   )r   Ú	_unpicklerx   r{   ÚhasattrÚsetattr)r   rˆ   Úattr_defaultsÚattrr   s   &&  €r   rŽ   ÚDataSourceScaleway._unpickle¸   sY   ø€ Ü‰Ñ˜.Ô)à% tØ˜ØœØœ\Ø˜DØ˜dð
ˆó "ˆDÜ˜4×&Ô&Ü˜ MÕ$7Ö8ó "r   c                óˆ  € \         P                  ! 4       p\        P                  ! VV P                  V P
                  RR7      w  r4V'       d7   \        P                  RV4       V R2V n        V R2V n	        V R2V n
        R# \        P                  RV\        \         P                  ! 4       V,
          4      4       \        h)	z?
Define metadata_url based upon api-metadata URL availability.
F)Úurlsro   rD   Úconnect_synchronouslyz%s is reachablez/conf?format=jsonz/user_data/cloud-initz/vendor_data/cloud-initNz3Unable to reach api-metadata at %s after %s seconds)r`   Ú	monotonicr
   Úwait_for_urlro   rD   rV   rW   r|   r}   r~   rt   r   )r   r•   Ú
start_timeÚ	avail_urlÚ_s   &&   r   Ú_set_metadata_urlÚ$DataSourceScaleway._set_metadata_urlÆ   s«   € ô
 —^’^Ó%ˆ
Ü!×.Ò.ØØ—]‘]Ø—L‘LØ"'ô	
‰ˆ	÷ Ü�I‰IÐ'¨Ô3Ø#, +Ð->Ð ?ˆDÔØ#, +Ð-BÐ CˆDÔØ%. KÐ/FÐ"GˆDÔÙä�I‰IØEØÜ”D—N’NÓ$ zÕ1Ó2ôô
 "Ð!r   c                óª  € \         P                  ! V P                  V P                  V P                  R 7      p\
        P                  ! \        P                  ! VP                  4      4      V n
        \        RV P                  V P                  V P                  4      V n        \        RV P                  V P                  V P                  4      V n        R# ))rD   rE   z	user-datazvendor-dataN)r
   rH   r|   rD   rE   ÚjsonÚloadsr   rI   rJ   Úmetadatari   r}   Úuserdata_rawr~   Úvendordata_raw)r   rN   s   & r   Ú_crawl_metadataÚ"DataSourceScaleway._crawl_metadataà   s’   € Ü×!Ò!Ø×Ñ t§|¡|¸T¿\¹\ô
ˆô Ÿ
š
¤4×#5Ò#5°d·m±mÓ#DÓEˆŒä*Ø˜×*Ñ*¨D¯L©L¸$¿,¹,ó
ˆÔô -Ø˜4×.Ñ.°·±¸d¿l¹ló
ˆÖr   c                ó    <€ V ^8„  d   QhRS[ /# )r‡   r‰   )Úbool)rŠ   r7   s   "€r   r‹   rŒ   î   s   ø€ ÷ ñ ‘tñ r   c                 óÎ   € \         P                  ! R4      p V R8X  d   R# \        P                  P	                  R4      '       d   R# \
        P                  ! 4       pRV9   d   R# R# )zð
There are three ways to detect if you are on Scaleway:

* check DMI data: not yet implemented by Scaleway, but the check is
  made to be future-proof.
* the initrd created the file /var/run/scaleway.
* "scaleway" is in the kernel cmdline.
zsystem-manufacturerrl   Tz/var/run/scalewayÚscalewayF)r   Úread_dmi_dataÚosÚpathÚexistsr   Úget_cmdline)Úvendor_nameÚcmdlines     r   Ú	ds_detectÚDataSourceScaleway.ds_detectí   sS   € ô ×'Ò'Ð(=Ó>ˆØ˜*Ô$Ùä�7‰7�>‰>Ð-×.Ò.Ùä×"Ò"Ó$ˆØ˜Ô ÙÙr   c           	     ó>  € V P                   '       d¬    \        V P                  V P                  P                  4      ;_uu_ 4       p\        P
                  ! R 4      ;_uu_ 4        V P                  V P                  4       RRR4       V P                  4        VR,          V n	        RV P                  R&   RRR4       V P                   '       g     \%        V P                  V P                  P                  4      ;_uu_ 4        \        P
                  ! R4      ;_uu_ 4        V P                  V P                  4       RRR4       V P                  4        RV P                  R&   RRR4       R# R#   + '       g   i     Lø; i  + '       g   i     LÖ; i  \        \        \        3 d7   p\        P                  ! \         \#        T4      4       RT n          Rp?EL Rp?ii ; i  + '       g   i     L°; i  + '       g   i     R# ; i  \         d     R# i ; i)	z7Setting api-metadata URL depending on IPv4 availabilityNzfixed-addressÚipv4Ú
net_in_useFz7Setting api-metadata URL depending on IPv6 availabilityÚipv6T)r€   r   rƒ   Úfallback_interfacer   ÚTimedrœ   rp   r¤   r   r¡   r   r   r   r   ÚlogexcrV   Ústrr   )r   r´   Úes   &  r   Ú	_get_dataÚDataSourceScaleway._get_data  s§  € ð
 �=�=ˆ=ð&ô %Ø—K‘KØ—K‘K×2Ñ2÷ô ð Ü$×*Ò*ð9÷õ ð ×.Ñ.¨t×/AÑ/AÔB÷	ð
 ×(Ñ(Ô*Ø37¸Õ3H�DÔ0Ø28�D—M‘M ,Ñ/÷ð. �}�}ˆ}ðÜ)Ø—K‘KØ—K‘K×2Ñ2÷õ ô %×*Ò*ð,÷õ ð ×.Ñ.¨t×/AÑ/AÔB÷	ð
 ×(Ñ(Ô*Ø28�D—M‘M ,Ñ/÷ó ÷E÷ ú÷	÷ ûô !ÜÜ%ðô &ô
 —’œC¤ Q£Ô(ð !&�—’ûð&ú÷"÷ ú÷	ö ñ ûô #ô Úðús•   ”2F ÁFÁ%E1	Â5FÂ6F Ã2H ÄG9Ä"G&	Ä>'G9Å%H Å1FÅ<FÆF	ÆF ÆF ÆG#Æ-+GÇG#Ç&G6Ç1G9Ç9H
	ÈH È
H ÈHÈHc                óŠ  € V P                   f:   \        P                  R\        P                  4       \        P                  V n         V P                   \        P                  8w  d   V P                   # / p/ pV P
                  R,           EF  pVR,          V P                  8X  dC   RVR&   RRRRR	R
/pRVP                  4       9   d   VR;;,          V.,          uu&   KV  V.VR&   K^  RVP                  4       9   d+   VR;;,          VR,           RVR,           23,          uu&   MVR,           RVR,           23VR&   VR,          R8X  g   KÆ  R	VR,          RR/pRVP                  4       9   d   VR;;,          V.,          uu&   EK  V.VR&   EK
  	  W!V P                  P                  &   R^RV/V n         V P                   # )zH
Configure networking according to data received from the
metadata API.
z5Found None as cached _network_config. Resetting to %sÚ
public_ipsrf   TÚdhcp4zon-linkÚtoz169.254.42.42/32Úviaz
62.210.0.1ÚroutesÚ	addressesÚ/ÚnetmaskÚfamilyÚinet6Úgatewayz::/0ÚversionÚ	ethernets)
rz   rV   r_   r	   ry   r¡   r   r�   rƒ   r·   )r   ÚnetcfgÚip_cfgÚipÚroutes   &    r   Únetwork_configÚ!DataSourceScaleway.network_config5  sª  € ð ×ÑÒ'Ü�K‰KØGÜ—‘ôô $+§=¡=ˆDÔ à×Ñ¤7§=¡=Ô0Ø×'Ñ'Ð'àˆØˆØ—-‘- ×-Ñ-ˆBà�)�} × <Ñ <Ô<Ø"&��w‘ð ˜tØÐ,Ø˜<ð�ð
 ˜vŸ{™{›}Ô,Ø˜8×$¨¨Õ/Õ$à(- w�F˜8Ó$à &§+¡+£-Ô/Ø˜;×'Ø˜i�=˜/¨¨2¨i­=¨/Ð:ð,õ Ô'ð /1°­m¨_¸A¸bÀ½m¸_Ð+MÐ*O�F˜;Ñ'Ø�h•< 7Ö*Ø" B y¥M°4¸Ð@�EØ 6§;¡;£=Ô0Ø˜x×(¨U¨GÕ3Ö(à,1¨7˜˜xÔ(ñ5 .ð6 28ˆt�{‰{×-Ñ-Ñ.Ø )¨1¨k¸6ÐBˆÔà×#Ñ#Ð#r   c                ó   € R # ©Nr   ©r   s   &r   Úlaunch_indexÚDataSourceScaleway.launch_indexg  s   € ár   c                ó(   € V P                   R ,          # )Úid©r¡   rÔ   s   &r   Úget_instance_idÚ"DataSourceScaleway.get_instance_idk  s   € Ø�}‰}˜TÕ"Ð"r   c                ó8  € V P                   R ,           Uu. uF  qR,          NK  	  ppRp\        V4      pV P                   P                  R. 4       F?  pVP                  V4      '       g   K  VP	                  WTR P                  RR4      4       KA  	  V# u upi )Ússh_public_keysÚkeyzAUTHORIZED_KEY=ÚtagsNr›   Ú )r¡   Úlenru   Ú
startswithÚappendÚreplace)r   rÞ   Ússh_keysÚakeypreÚplenÚtags   &     r   Úget_public_ssh_keysÚ&DataSourceScaleway.get_public_ssh_keysn  s‹   € Ø*.¯-©-Ð8IÖ*JÓKÑ*J 3˜—J�JÑ*JˆÐKà#ˆÜ�7‹|ˆØ—=‘=×$Ñ$ V¨RÖ0ˆCØ—>‘> '×*Ò*ÙØ�O‰O˜C ˜J×.Ñ.¨s°CÓ8Ö9ñ 1ð
 ˆùò Ls   –Bc                ó<   € \        V P                  R ,          R4      # )ÚhostnameF)r   r¡   )r   ÚfqdnÚ
resolve_ipÚmetadata_onlys   &&&&r   Úget_hostnameÚDataSourceScaleway.get_hostnamez  s   € Ü! $§-¡-°
Õ";¸UÓCÐCr   c                ó(   € V P                   R ,          # )ÚzonerÙ   rÔ   s   &r   Úavailability_zoneÚ$DataSourceScaleway.availability_zone}  s   € à�}‰}˜VÕ$Ð$r   c                óT   € V P                   R ,          P                  R4      ^ ,          # )ró   Ú-)r¡   Ú
rpartitionrÔ   s   &r   ÚregionÚDataSourceScaleway.region�  s!   € à�}‰}˜VÕ$×/Ñ/°Ó4°QÕ7Ð7r   )rz   rs   r   r€   ro   r¡   r|   rp   rE   rD   r¢   r}   r£   r~   )FFF)r.   r/   r0   r1   Údsnamer   ÚNETWORKr   ÚBOOT_NEW_INSTANCEÚBOOTÚBOOT_LEGACYÚdefault_update_eventsr   rŽ   rœ   r¤   Ústaticmethodr±   r¼   ÚpropertyrÐ   rÕ   rÚ   ré   rð   rô   rù   r3   r4   r5   r6   s   @@r   rk   rk   ˜   sÒ   ù‡ € Ø€Fà×ÑØ×'Ñ'Ø�N‰NØ×!Ñ!ð
ðÐõ?÷,9ó 9ò"ò4
ð ÷ó ðò*0ðd ñ/$ó ð/$ðb ñó ðò#ò
ôDð ñ%ó ð%ð ñ8ó ÷8ð 8r   rk   c                 ó8   € \         P                  ! V \        4      # rÓ   )r	   Úlist_from_dependsÚdatasources)Údependss   &r   Úget_datasource_listr  ‹  s   € Ü×$Ò$ W¬kÓ:Ð:r   )1rŸ   Úloggingr«   r'   r`   Úurllib.parser   r>   Úrequests.exceptionsr   Úurllib3.connectionr   Úurllib3.poolmanagerr   Ú	cloudinitr   r   r	   r
   r   Úcloudinit.eventr   r   Úcloudinit.net.dhcpr   Úcloudinit.net.ephemeralr   r   Úcloudinit.sourcesr   Úcloudinit.subpr   Ú	getLoggerr.   rV   r{   rv   rx   rw   ÚadaptersÚHTTPAdapterr   rO   ri   Ú
DataSourcerk   ÚDEP_FILESYSTEMr  r  r   r   r   Ú<module>r     s¾   ðó Û Û 	Û Û Ý !ã Ý /õ .Ý +ç AÕ Aß 1Ý /ß IÝ 0Ý 0à×Ò˜Ó!€à&Ð(>Ð?€à€Ø€Ø€ô
˜8×,Ñ,×8Ñ8ô 
ò,%òP1ôhk8˜×+Ñ+ô k8ð^ ˜'×0Ñ0Ð2Ð3ð€ô
;r   