ó
    x[h¿  ã                   óì   • S SK r S SKrS SKJr  S SKJrJrJrJr  \R                  " \
5      rS/rSrSr " S S\R                  5      rS	\4S
 jrS\4S jr\\R*                  \R,                  44/rS rg)é    N)ÚOptional)ÚdmiÚsourcesÚ
url_helperÚutilzhttp://169.254.169.254é   ÚCloudCIXc                   ó€   ^ • \ rS rSrSrSrSrSrU 4S jrS r	S\
4S jrS\\   4S	 jr\S
 5       r\S 5       rSrU =r$ )ÚDataSourceCloudCIXé   r	   é   é   c                 óJ   >• [         [        U ]  XU5        S U l        S U l        g ©N)Úsuperr   Ú__init__Ú_metadata_urlÚ_net_cfg)ÚselfÚsys_cfgÚdistroÚpathsÚ	__class__s       €ÚF/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudCIX.pyr   ÚDataSourceCloudCIX.__init__   s$   ø€ ÜÔ  $Ñ0°À%ÔHØ!ˆÔØˆ�ó    c                 óä   •  U R                  5       nUS   U l        [        R                  " US   5      U l        g! [        R                   a   n[        R	                  SU5         SnAgSnAff = f)z&
Fetch the user data and the metadata
z0Failed to read data from CloudCIX datasource: %sNFú	meta-dataú	user-dataT)	Úcrawl_metadata_servicer   ÚInvalidMetaDataExceptionÚLOGÚerrorÚmetadatar   Údecode_binaryÚuserdata_raw)r   Úcrawled_datar#   s      r   Ú	_get_dataÚDataSourceCloudCIX._get_data   sl   € ð	Ø×6Ñ6Ó8ˆLð % [Ñ1ˆŒÜ ×.Ò.¨|¸KÑ/HÓIˆÔàøô ×/Ñ/ó 	Ü�I‰IØBÀEôô ûð		ús   ‚; »A/ÁA*Á*A/Úreturnc                 óŠ   • U R                  5       nUc  [        R                  " S5      e[        XR	                  5       5      nU$ )Nz Could not determine metadata URL)Údetermine_md_urlr   r!   Úread_metadataÚget_url_params)r   Úmd_urlÚdatas      r   r    Ú)DataSourceCloudCIX.crawl_metadata_service/   sE   € Ø×&Ñ&Ó(ˆØ‰>Ü×2Ò2Ø2óð ô ˜V×%8Ñ%8Ó%:Ó;ˆØˆr   c                 óÖ  • U R                   (       a  U R                   $ U R                  5       n[        R                  " [        UR
                  UR                  S9u  p#U(       d  g [        [        SS5       H¬  n[        R                  " USR                  U5      S5      n [        R                  " XPR                  S9nUR!                  5       (       a8  [        R                  " USR                  U5      5      U l           U R                   $ [        R                  SU5        M®     U R                   $ ! [        R                   a!  n[        R                  SXW5         S nAMì  S nAff = f)	N)Úmax_waitÚtimeoutr   éÿÿÿÿzv{0}r$   )r4   zURL %s raised exception %szNo metadata found at URL %s)r   r.   r   Úwait_for_urlÚMETADATA_URLSÚmax_wait_secondsÚtimeout_secondsÚrangeÚMETADATA_VERSIONÚcombine_urlÚformatÚreadurlÚurl_timeoutÚUrlErrorr"   ÚdebugÚok)r   Ú
url_paramsÚbase_urlÚ_ÚversionÚurlÚresponseÚes           r   r,   Ú#DataSourceCloudCIX.determine_md_url9   s1  € Ø××Ø×%Ñ%Ð%ð ×(Ñ(Ó*ˆ
Ü ×-Ò-ÜØ×0Ñ0Ø×.Ñ.ñ
‰ˆö
 Øô Ô-¨q°"Ö5ˆGÜ×(Ò(Ø˜&Ÿ-™-¨Ó0°*óˆCðÜ%×-Ò-¨c×;KÑ;KÑL�ð
 �{‰{�}‰}Ü%/×%;Ò%;Ø˜fŸm™m¨GÓ4ó&�Ô"ð ð ×!Ñ!Ð!ô —	‘	Ð7¸Ö=ñ! 6ð$ ×!Ñ!Ð!øô ×&Ñ&ó Ü—	‘	Ð6¸Ô?Ýûðús   Â"D3Ä3E(ÅE#Å#E(c                  ó   • [        5       $ r   )Úis_platform_viable© r   r   Ú	ds_detectÚDataSourceCloudCIX.ds_detect\   s   € ä!Ó#Ð#r   c                 ó    • U R                   (       a  U R                   $ U R                  (       d  g U R                  S   U l         U R                   $ )NÚnetwork)r   r$   )r   s    r   Únetwork_configÚ!DataSourceCloudCIX.network_config`   s7   € à�=�=Ø—=‘=Ð à�}�}ØØŸ™ iÑ0ˆŒØ�}‰}Ðr   )r   r   r$   r&   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚdsnameÚurl_retriesÚurl_timeout_secondsÚurl_sec_between_retriesr   r(   Údictr    r   Ústrr,   ÚstaticmethodrN   ÚpropertyrR   Ú__static_attributes__Ú__classcell__)r   s   @r   r   r      sh   ø† à€Fà€KØÐØÐõò
ð"¨ô ð!" (¨3¡-ô !"ðF ñ$ó ð$ð ñó ör   r   r*   c                  ó<   • [         R                  " S5      [        :H  $ )Nzsystem-product-name)r   Úread_dmi_dataÚCLOUDCIX_DMI_NAMErM   r   r   rL   rL   k   s   € Ü×ÒÐ2Ó3Ô7HÑHÐHr   rD   c                 ó¶  • 0 nSS[         R                  4SS[         R                  44nU H¦  u  pEn [        R                  " [        R
                  " X5      UR                  UR                  UR                  S9nUR                  5       (       d,  [        R                  " S
U SU  SU SUR                   35      e U" UR                  5      X%'   M¨     U$ ! [        R                   a'  n[        R                  " SU SU  SU SU 35      eS	nAff = f! [        R                   R"                   a%  n	[        R                  " SU  SU SU	 35      U	eS	n	A	ff = f)a  
Read metadata from metadata server at base_url

:returns: dictionary of retrieved metadata and user data containing the
          following keys: meta-data, user-data
:param: base_url: meta data server's base URL
:param: url_params: dictionary of URL retrieval parameters. Valid keys are
        `retries`, `sec_between` and `timeout`.
:raises: InvalidMetadataException upon network error connecting to metadata
         URL, error response from meta data server or failure to
         decode/parse metadata and userdata payload.
r$   r   Úuserdatar   )rG   ÚretriesÚsec_betweenr4   zFailed to fetch IMDS z: Ú/Nz	No valid z found. URL z returned code zInvalid JSON at )r   Ú	load_jsonÚmaybe_b64decoder   r>   r<   Únum_retriesÚsec_between_retriesr9   r@   r   r!   rB   ÚcodeÚcontentsÚjsonÚdecoderÚJSONDecodeError)
rD   rC   ÚmdÚleaf_key_format_callbackÚurl_leafÚnew_keyÚformat_callbackrH   r#   Úexcs
             r   r-   r-   o   sv  € ð 
€Bà	�[¤$§.¡.Ð1Ø	�[¤$×"6Ñ"6Ð7ð Ðó
 /GÑ*ˆ˜?ð	Ü!×)Ò)Ü×*Ò*¨8Ó>Ø"×.Ñ.Ø&×:Ñ:Ø"×2Ñ2ñ	ˆHð �{‰{�}‰}Ü×2Ò2Ø˜H˜:ð &Ø�j  ( ¨?¸8¿=¹=¸/ðKóð ð
	Ù)¨(×*;Ñ*;Ó<ˆB‹Kñ+ /Gð4 €Iøô% ×"Ñ"ó 	Ü×2Ò2Ø'¨ z°Ø�*˜A˜h˜Z r¨%¨ð2óð ûð	ûô �|‰|×+Ñ+ó 	Ü×2Ò2Ø" 8 *¨A¨h¨Z°r¸#¸Ð?óàðûð	ús0   ²A	CÂ=DÃDÃ+"DÄDÄEÄ3 EÅEc                 ó8   • [         R                  " U [        5      $ r   )r   Úlist_from_dependsÚdatasources)Údependss    r   Úget_datasource_listr}   ¦   s   € Ü×$Ò$ W¬kÓ:Ð:r   )rp   ÚloggingÚtypingr   Ú	cloudinitr   r   r   r   Ú	getLoggerrT   r"   r7   r;   rd   Ú
DataSourcer   ÚboolrL   r]   r-   ÚDEP_FILESYSTEMÚDEP_NETWORKr{   r}   rM   r   r   Ú<module>r†      s‘   ðó Û Ý ç 4Ó 4à×Ò˜Ó!€à)Ð*€ØÐ àÐ ôW˜×+Ñ+ô WðtI˜Dô Ið-˜Cô -ðd ˜'×0Ñ0°'×2EÑ2EÐFÐGð€ó;r   