Ë
    x[hM"  ã                   ó  — d dl Z d dlZd dlZd dlmZmZ  ej                  e«      Z e	ej                  g«      Z G d„ d«      Z G d„ d«      Zd„ Z	 	 dddddddd	œd
„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 	 dd„Z	 	 	 	 	 	 	 	 	 dd„Zy)é    N)Ú
url_helperÚutilc                   ó   — e Zd ZdZd„ Zd„ Zy)ÚMetadataLeafDecoderz.Decodes a leaf blob into something meaningful.c                 óp   — |sy|j                  «       }|j                  d«      r|j                  d«      ryy)NFú{ú}T)ÚstripÚ
startswithÚendswith)ÚselfÚtexts     ú?/usr/lib/python3/dist-packages/cloudinit/sources/helpers/ec2.pyÚ_maybe_json_objectz&MetadataLeafDecoder._maybe_json_object   s0   € ÙØØ�z‰z‹|ˆØ�?‰?˜3Ô D§M¡M°#Ô$6ØØó    c                 óV  — |sy	 t        j                  |«      }| j                  |«      r	 t	        j
                  |«      S |j                  d«      dk7  r|j                  «       S |S # t        $ r |cY S w xY w# t        t        f$ r!}t        j                  d||«       Y d }~Œbd }~ww xY w)NÚ z6Field %s looked like a json object, but it was not: %sú
éÿÿÿÿ)r   Údecode_binaryÚUnicodeDecodeErrorr   ÚjsonÚloadsÚ
ValueErrorÚ	TypeErrorÚLOGÚwarningÚfindÚ
splitlines)r   ÚfieldÚblobÚes       r   Ú__call__zMetadataLeafDecoder.__call__   s«   € ÙØð	Ü×%Ñ% dÓ+ˆDð ×"Ñ" 4Ô(ðä—z‘z $Ó'Ð'ð �9‰9�T‹?˜bÒ Ø—?‘?Ó$Ð$Øˆøô "ò 	ØŠKð	ûô ¤	Ð*ò Ü—‘ØLØØ÷ñ ûðús(   …A' ¬A8 Á'A5Á4A5Á8B(ÂB#Â#B(N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r#   © r   r   r   r      s   „ Ù8òór   r   c                   ó&   — e Zd Zdd„Zd„ Zd„ Zd„ Zy)ÚMetadataMaterializerNc                 ón   — || _         d | _        || _        || _        |€t	        «       | _        y || _        y ©N)Ú_blobÚ_mdÚ	_base_urlÚ_callerr   Ú_leaf_decoder)r   r!   Úbase_urlÚcallerÚleaf_decoders        r   Ú__init__zMetadataMaterializer.__init__7   s7   € ØˆŒ
ØˆŒØ!ˆŒØˆŒØÐÜ!4Ó!6ˆDÕà!-ˆDÕr   c                 ó–  — i }g }t        j                  |«      }|s||fS d„ }d„ }|j                  «       D ]Ž  }|j                  «       } ||«      }|r|sŒ |dk(  rŒ& ||«      r||vsŒ3|j	                  |«       ŒE|j                  dd«      }|}	t        |«      dkD  r#|\  }
}t        j                  |
«      }
|
�d|
z  }	|}|	||<   Œ� ||fS )Nc                 ó(   — | j                  d«      ryy)Nú/TF)r   ©Úitems    r   Úhas_childrenz1MetadataMaterializer._parse.<locals>.has_childrenI   s   € Ø�}‰}˜SÔ!Øàr   c                 óJ   — | j                  d«      r| j                  d«      S | S )Nr8   )r   Úrstripr9   s    r   Úget_namez-MetadataMaterializer._parse.<locals>.get_nameO   s"   € Ø�}‰}˜SÔ!Ø—{‘{ 3Ó'Ð'ØˆKr   zsecurity-credentialsú=é   z%s/openssh-key)r   r   r   r
   ÚappendÚsplitÚlenÚsafe_int)r   r!   ÚleavesÚchildrenr;   r>   r    Ú
field_nameÚcontentsÚresourceÚidentÚsub_contentss               r   Ú_parsezMetadataMaterializer._parseA   sõ   € ØˆØˆÜ×!Ñ! $Ó'ˆáØ˜HÐ%Ð%ò	ò	ð
 —_‘_Ó&ò 	.ˆEØ—K‘K“MˆEÙ! %›ˆJÙ¡
ØàÐ3Ò3ØÙ˜EÔ"Ø XÒ-Ø—O‘O JÕ/à Ÿ;™; s¨AÓ.�Ø%�Ü�x“= 1Ò$à,4Ñ)�U˜LÜ ŸM™M¨%Ó0�EØÐ(Ø#3°uÑ#=˜Ø%1˜
Ø%-��zÒ"ð+	.ð, ˜Ð!Ð!r   c                 ó    — | j                   �| j                   S | j                  | j                  | j                  «      | _         | j                   S r,   )r.   Ú_materializer-   r/   )r   s    r   Úmaterializez MetadataMaterializer.materializel   s:   € Ø�8‰8ÐØ—8‘8ˆOØ×$Ñ$ T§Z¡Z°·±Ó@ˆŒØ�x‰xˆr   c                 ó&  — | j                  |«      \  }}i }|D ]T  }t        j                  ||«      }|j                  d«      s|dz  }| j	                  |«      }| j                  ||«      ||<   ŒV i }	|j                  «       D ]A  \  }
}t        j                  ||«      }| j	                  |«      }| j                  |
|«      |	|
<   ŒC i }|j                  |«       |	j                  «       D ]%  }
|
|v rt        j                  d|«       Œ|	|
   ||
<   Œ' |S )Nr8   z&Duplicate key found in results from %s)rL   r   Úcombine_urlr   r0   rN   Úitemsr1   ÚupdateÚkeysr   r   )r   r!   r2   rE   rF   Úchild_contentsÚcÚ	child_urlÚ
child_blobÚleaf_contentsr    rI   Úleaf_urlÚ	leaf_blobÚjoineds                  r   rN   z!MetadataMaterializer._materializer   s)  € Ø!Ÿ[™[¨Ó.Ñˆ�ØˆØò 	IˆAÜ"×.Ñ.¨x¸Ó;ˆIØ×%Ñ% cÔ*Ø˜SÑ �	ØŸ™ iÓ0ˆJØ $× 1Ñ 1°*¸iÓ HˆN˜1Òð	Ið ˆØ%Ÿ|™|›~ò 	H‰OˆE�8Ü!×-Ñ-¨h¸ÓAˆHØŸ™ XÓ.ˆIØ#'×#5Ñ#5°e¸YÓ#GˆM˜%Ò ð	Hð ˆØ�‰�nÔ%Ø"×'Ñ'Ó)ò 	5ˆEØ˜‰Ü—‘ÐDÀhÕOà -¨eÑ 4��u’ð		5ð
 ˆr   r,   )r$   r%   r&   r5   rL   rO   rN   r(   r   r   r*   r*   6   s   „ ó.ò)"òVór   r*   c                 ó   — |j                   | vS )z/Returns False if cause.code is in status_codes.)Úcode)Ústatus_codesÚcauses     r   Úskip_retry_on_codesra   Š   s   € à�:‰:˜\Ð)Ð)r   é   ©Ússl_detailsÚtimeoutÚretriesÚ
headers_cbÚheaders_redactÚexception_cbc          	      óÜ  — t        j                  || «      }t        j                  |d«      }d}		 |st        j                  t        t
        «      }t        j                  |||||||¬«      }
|
j                  }	|	S # t         j                  $ r8}|j                  t
        vrt        j                  t        d|«       Y d }~|	S d }~wt        $ r t        j                  t        d|«       Y |	S w xY w)Nz	user-datar   )rd   re   rf   ri   rg   rh   z$Failed fetching userdata from url %s)r   rQ   Ú	functoolsÚpartialra   ÚSKIP_USERDATA_CODESÚread_file_or_urlrH   ÚUrlErrorr^   r   Úlogexcr   Ú	Exception)Úapi_versionÚmetadata_addressrd   re   rf   rg   rh   ri   Úud_urlÚ	user_dataÚresponser"   s               r   Úget_instance_userdatarw   �   sî   € ô ×#Ñ#Ð$4°kÓB€FÜ×#Ñ# F¨KÓ8€FØ€IðIÙô %×,Ñ,Ü#Ô%8óˆLô ×.Ñ.ØØ#ØØØ%Ø!Ø)ô
ˆð ×%Ñ%ˆ	ð Ðøô ×Ñò MØ�6‰6Ô,Ñ,Ü�K‰KœÐCÀVÔLûð Ðûô ò IÜ�‰”CÐ?ÀÕHØÐðIús   °AA: Á:C+Â-C Ã 'C+Ã*C+c           	      óz  ‡
‡— t        j                  ||| «      }t        j                  t         j                  ||||||	¬«      Šˆˆ
fd„}	  ‰|«      }t        |j                  |||¬«      }|j                  «       }t        |t        «      si }|S # t        $ r! t        j                  t        d| |«       i cY S w xY w)Nrc   c                 ó¬   •— 	  ‰| «      j                   S # t        j                  $ r+}‰r ‰|«      s‚ t        j	                  d| «       Y d }~yd }~ww xY w)Nz&Skipped retrieval of the content of %sz	(skipped))rH   r   ro   r   r   )Úurlr"   r3   Úretrieval_exception_ignore_cbs     €€r   Úmcallerz'_get_instance_metadata.<locals>.mcallerÏ   sN   ø€ ð
	#Ù˜#“;×'Ñ'Ð'øÜ×"Ñ"ò 	#á1Ù4°QÔ7àä—‘ÐDÀcÔJÜ"ûð	#ús   ƒ •A¨!AÁA)r4   zFailed fetching %s from url %s)r   rQ   rk   rl   rn   r*   rH   rO   Ú
isinstanceÚdictrq   r   rp   r   )Útreerr   rs   rd   re   rf   r4   rg   rh   ri   r{   Úmd_urlr|   rv   ÚmaterializerÚmdr3   s             `     @r   Ú_get_instance_metadatarƒ   ·   s¼   ù€ ô ×#Ñ#Ð$4°kÀ4ÓH€FÜ×ÑÜ×#Ñ#ØØØØØ%Ø!ô€Fõ#ðÙ˜&“>ˆÜ+Ø×Ñ˜v w¸\ô
ˆð ×%Ñ%Ó'ˆÜ˜"œtÔ%ØˆBØˆ	øÜò Ü�‰”CÐ9¸4ÀÔHØŠ	ðús   ÁAB Â'B:Â9B:c
                 ó.   — t        d| |||||||||	¬«      S )Nz
meta-data/)r   rr   rs   rd   re   rf   r4   rh   rg   ri   r{   ©rƒ   )
rr   rs   rd   re   rf   r4   rg   rh   ri   r{   s
             r   Úget_instance_metadatar†   ê   s2   € ô "ØØØ)ØØØØ!Ø%ØØ!Ø&Côð r   c	                 ó,   — t        d| ||||||||¬«
      S )Nzdynamic/instance-identity)
r   rr   rs   rd   re   rf   r4   rh   rg   ri   r…   )	rr   rs   rd   re   rf   r4   rg   rh   ri   s	            r   Úget_instance_identityrˆ     s/   € ô "Ø(ØØ)ØØØØ!Ø%ØØ!ôð r   )Úlatestúhttp://169.254.169.254)
r‰   rŠ   Nrb   rb   NNNNN)	r‰   rŠ   Nrb   rb   NNNN)rk   r   ÚloggingÚ	cloudinitr   r   Ú	getLoggerr$   r   Ú	frozensetÚ	NOT_FOUNDrm   r   r*   ra   rw   rƒ   r†   rˆ   r(   r   r   ú<module>r�      sê   ðó Û Û ç &à€g×Ñ˜Ó!€Ù ×!5Ñ!5Ð 6Ó7Ð ÷ñ ÷FQñ Qòh*ð Ø-ð%ð ØØØØØô%ðT Ø-ØØØØØØØØ"&ó0ðh Ø-ØØØØØØØØ"&óð< Ø-ØØØØØØØôr   