Ë
    x[h¿  ã                   óè   — d dl Z d dlZd dlmZ d dlmZmZmZmZ  ej                  e
«      ZdgZdZdZ G d„ dej                  «      Zd	efd
„Zdefd„Zeej*                  ej,                  ffgZd„ Zy)é    N)ÚOptional)ÚdmiÚsourcesÚ
url_helperÚutilzhttp://169.254.169.254é   ÚCloudCIXc                   ór   ‡ — e Zd ZdZdZdZdZˆ fd„Zd„ Zde	fd„Z
dee   fd„Zed	„ «       Zed
„ «       Zˆ xZS )ÚDataSourceCloudCIXr	   é   é   c                 óL   •— t         t        | �  |||«       d | _        d | _        y ©N)Úsuperr   Ú__init__Ú_metadata_urlÚ_net_cfg)ÚselfÚsys_cfgÚdistroÚpathsÚ	__class__s       €úF/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceCloudCIX.pyr   zDataSourceCloudCIX.__init__   s&   ø€ ÜÔ  $Ñ0°¸&À%ÔHØ!ˆÔØˆ�ó    c                 óà   — 	 | j                  «       }|d   | _        t        j                  |d   «      | _        y# t        j                  $ r }t        j	                  d|«       Y d}~yd}~ww xY w)z6
        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_datazDataSourceCloudCIX._get_data   sl   € ð	Ø×6Ñ6Ó8ˆLð % [Ñ1ˆŒÜ ×.Ñ.¨|¸KÑ/HÓIˆÔàøô ×/Ñ/ò 	Ü�I‰IØBÀEôô ûð		ús   ‚: ºA-ÁA(Á(A-Úreturnc                 óˆ   — | j                  «       }|€t        j                  d«      ‚t        || j	                  «       «      }|S )Nz Could not determine metadata URL)Údetermine_md_urlr   r   Úread_metadataÚget_url_params)r   Úmd_urlÚdatas      r   r   z)DataSourceCloudCIX.crawl_metadata_service/   sG   € Ø×&Ñ&Ó(ˆØˆ>Ü×2Ñ2Ø2óð ô ˜V T×%8Ñ%8Ó%:Ó;ˆØˆr   c                 óº  — | j                   r| j                   S | j                  «       }t        j                  t        |j
                  |j                  ¬«      \  }}|sy t        t        dd«      D ]§  }t        j                  |dj                  |«      d«      }	 t        j                  || j                  ¬«      }|j!                  «       r7t        j                  |dj                  |«      «      | _          | j                   S t        j                  d|«       Œ© | j                   S # t        j                  $ r!}t        j                  d||«       Y d }~Œåd }~ww xY w)	N)Úmax_waitÚtimeoutr   éÿÿÿÿzv{0}r"   )r0   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)   z#DataSourceCloudCIX.determine_md_url9   s:  € Ø×ÒØ×%Ñ%Ð%ð ×(Ñ(Ó*ˆ
Ü ×-Ñ-ÜØ×0Ñ0Ø×.Ñ.ô
‰ˆ�!ñ
 Øô Ô-¨q°"Ó5ò 	>ˆGÜ×(Ñ(Ø˜&Ÿ-™-¨Ó0°*óˆCðÜ%×-Ñ-¨c¸4×;KÑ;KÔL�ð
 �{‰{Œ}Ü%/×%;Ñ%;Ø˜fŸm™m¨GÓ4ó&�Ô"ð ð ×!Ñ!Ð!ô —	‘	Ð7¸Õ=ð!	>ð$ ×!Ñ!Ð!øô ×&Ñ&ò Ü—	‘	Ð6¸¸QÔ?Üûðús   Â!D&Ä&EÄ9EÅEc                  ó   — t        «       S r   )Úis_platform_viable© r   r   Ú	ds_detectzDataSourceCloudCIX.ds_detect\   s   € ä!Ó#Ð#r   c                 óŒ   — | j                   r| j                   S | j                  sy | j                  d   | _         | j                   S )NÚnetwork)r   r"   )r   s    r   Únetwork_configz!DataSourceCloudCIX.network_config`   s7   € à�=Š=Ø—=‘=Ð à�}Š}ØØŸ™ iÑ0ˆŒØ�}‰}Ðr   )Ú__name__Ú
__module__Ú__qualname__ÚdsnameÚurl_retriesÚurl_timeout_secondsÚurl_sec_between_retriesr   r&   Údictr   r   Ústrr)   ÚstaticmethodrI   ÚpropertyrL   Ú__classcell__)r   s   @r   r   r      sh   ø„ à€Fà€KØÐØÐôò
ð"¨ó ð!" (¨3¡-ó !"ðF ñ$ó ð$ð ñó ôr   r   r'   c                  ó:   — t        j                  d«      t        k(  S )Nzsystem-product-name)r   Úread_dmi_dataÚCLOUDCIX_DMI_NAMErH   r   r   rG   rG   k   s   € Ü×ÑÐ2Ó3Ô7HÑHÐHr   r@   c                 ó¦  — i }ddt         j                  fddt         j                  ff}|D ]£  \  }}}	 t        j                  t        j
                  | |«      |j                  |j                  |j                  ¬«      }|j                  «       s+t        j                  d
|› d| › d|› d|j                  › �«      ‚	  ||j                  «      ||<   Œ¥ |S # t        j                  $ r&}t        j                  d|› d| › d|› d|› �«      ‚d	}~ww xY w# t        j                   j"                  $ r$}	t        j                  d| › d|› d|	› �«      |	‚d	}	~	ww xY w)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   )rC   ÚretriesÚsec_betweenr0   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:   r8   Únum_retriesÚsec_between_retriesr5   r<   r   r   r>   ÚcodeÚcontentsÚjsonÚdecoderÚJSONDecodeError)
r@   r?   ÚmdÚleaf_key_format_callbackÚurl_leafÚnew_keyÚformat_callbackrD   r!   Úexcs
             r   r*   r*   o   s~  € ð 
€Bà	�[¤$§.¡.Ð1Ø	�[¤$×"6Ñ"6Ð7ð Ðð
 /Gò Ñ*ˆ�'˜?ð	Ü!×)Ñ)Ü×*Ñ*¨8°XÓ>Ø"×.Ñ.Ø&×:Ñ:Ø"×2Ñ2ô	ˆHð �{‰{Œ}Ü×2Ñ2Ø˜H˜:ð &Ø�j  ( ¨?¸8¿=¹=¸/ðKóð ð
	Ù)¨(×*;Ñ*;Ó<ˆBˆwŠKð+ð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Ä,EÅEc                 ó6   — t        j                  | t        «      S r   )r   Úlist_from_dependsÚdatasources)Údependss    r   Úget_datasource_listrt   ¦   s   € Ü×$Ñ$ W¬kÓ:Ð:r   )rg   ÚloggingÚtypingr   Ú	cloudinitr   r   r   r   Ú	getLoggerrM   r    r3   r7   r[   Ú
DataSourcer   ÚboolrG   rU   r*   ÚDEP_FILESYSTEMÚDEP_NETWORKrr   rt   rH   r   r   ú<module>r}      s“   ðó Û Ý ç 4Ó 4à€g×Ñ˜Ó!€à)Ð*€ØÐ àÐ ôW˜×+Ñ+ô WðtI˜Dó Ið-˜Có -ðd ˜'×0Ñ0°'×2EÑ2EÐFÐGð€ó;r   