
    x[hM"                        S SK r S SKrS SKrS SKJrJr  \R                  " \5      r\	" \R                  /5      r " S S5      r " S S5      rS r  SSSSSSSS	.S
 jjr          SS jr          SS jr         SS jrg)    N)
url_helperutilc                   $    \ rS rSrSrS rS rSrg)MetadataLeafDecoder   z.Decodes a leaf blob into something meaningful.c                     U(       d  gUR                  5       nUR                  S5      (       a  UR                  S5      (       a  gg)NF{}T)strip
startswithendswith)selftexts     ?/usr/lib/python3/dist-packages/cloudinit/sources/helpers/ec2.py_maybe_json_object&MetadataLeafDecoder._maybe_json_object   s6    zz|??3DMM#$6$6    c                 t   U(       d  g [         R                  " U5      nU R                  U5      (       a   [        R
                  " U5      $ UR                  S5      S:w  a  UR                  5       $ U$ ! [         a    Us $ f = f! [        [        4 a!  n[        R                  SUU5         S nANeS nAff = f)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__MetadataLeafDecoder.__call__   s    	%%d+D ""4((zz$'' 99T?b ??$$ " 	K	 	* L s(   A4 B 4BBB7B22B7 N)__name__
__module____qualname____firstlineno____doc__r   r%   __static_attributes__r'   r   r   r   r      s    8r   r   c                   0    \ rS rSrSS jrS rS rS rSrg)	MetadataMaterializer6   Nc                 h    Xl         S U l        X l        X0l        Uc  [	        5       U l        g X@l        g N)_blob_md	_base_url_callerr   _leaf_decoder)r   r#   base_urlcallerleaf_decoders        r   __init__MetadataMaterializer.__init__7   s/    
!!4!6D!-r   c                    0 n/ n[         R                  " U5      nU(       d  X#4$ S nS nUR                  5        H  nUR                  5       nU" U5      nU(       a  U(       d  M+  US:X  a  M3  U" U5      (       a  Xs;  a  UR	                  U5        MX  MZ  UR                  SS5      nUn	[        U5      S:  a$  Uu  p[         R                  " U
5      n
U
b  SU
-  n	UnXU'   M     X#4$ )Nc                 2    U R                  S5      (       a  gg)N/TF)r   items    r   has_children1MetadataMaterializer._parse.<locals>.has_childrenI   s    }}S!!r   c                 T    U R                  S5      (       a  U R                  S5      $ U $ )Nr?   )r   rstripr@   s    r   get_name-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childrenrB   rF   r"   
field_namecontentsresourceidentsub_contentss               r   _parseMetadataMaterializer._parseA   s    !!$'%%		
 __&EKKME!%J
33E""-OOJ/ . !;;sA.%x=1$,4)U MM%0E(#3u#=%1
%-z"+ ', !!r   c                     U R                   b  U R                   $ U R                  U R                  U R                  5      U l         U R                   $ r2   )r4   _materializer3   r5   )r   s    r   materialize MetadataMaterializer.materializel   s:    8888O$$TZZ@xxr   c                 0   U R                  U5      u  p40 nU HX  n[        R                  " X&5      nUR                  S5      (       d  US-  nU R	                  U5      nU R                  X5      XV'   MZ     0 n	UR                  5        H?  u  p[        R                  " X+5      nU R	                  U5      nU R                  X5      X'   MA     0 nUR                  U5        U	R                  5        H&  n
X;   a  [        R                  SU5        M   X   X'   M(     U$ )Nr?   z&Duplicate key found in results from %s)rU   r   combine_urlr   r6   rX   itemsr7   updatekeysr   r   )r   r#   r8   rN   rO   child_contentsc	child_url
child_blobleaf_contentsr"   rR   leaf_url	leaf_blobjoineds                  r   rX   !MetadataMaterializer._materializer   s   ![[.A"..x;I%%c**S 	i0J $ 1 1* HN  %||~OE!--hAHX.I#'#5#5e#GM   . n%"'')EDhO - 4	 *
 r   )r5   r3   r6   r7   r4   r2   )	r(   r)   r*   r+   r;   rU   rY   rX   r-   r'   r   r   r/   r/   6   s    .)"Vr   r/   c                      UR                   U ;  $ )z/Returns False if cause.code is in status_codes.)code)status_codescauses     r   skip_retry_on_codesrm      s    ::\))r      ssl_detailstimeoutretries
headers_cbheaders_redactexception_cbc          
         [         R                  " X5      n[         R                  " US5      nSn	 U(       d  [        R                  " [        [
        5      n[         R                  " UUUUUUUS9n
U
R                  n	U	$ ! [         R                   a;  nUR                  [
        ;  a  [        R                  " [        SU5         S nAU	$ S nAf[         a     [        R                  " [        SU5         U	$ f = f)Nz	user-datar   )rp   rq   rr   ru   rs   rt   z$Failed fetching userdata from url %s)r   r\   	functoolspartialrm   SKIP_USERDATA_CODESread_file_or_urlrQ   UrlErrorrj   r   logexcr   	Exception)api_versionmetadata_addressrp   rq   rr   rs   rt   ru   ud_url	user_dataresponser$   s               r   get_instance_userdatar      s     ##$4BF##FK8FII %,,#%8L ..#%!)
 %%	   M66,,KKCVL   IC?HIs   AA? ?C60C		)C65C6c           
      |  ^
^ [         R                  " X!U 5      n[        R                  " [         R                  UUUUUU	S9mUU
4S jn T" U5      n[        UR                  XUS9nUR                  5       n[        U[        5      (       d  0 nU$ ! [         a!    [        R                  " [        SX5        0 s $ f = f)Nro   c                    >  T" U 5      R                   $ ! [        R                   a5  nT(       a  T" U5      (       d  e [        R	                  SU 5         S nAgS nAff = f)Nz&Skipped retrieval of the content of %sz	(skipped))rQ   r   r{   r   r   )urlr$   r9   retrieval_exception_ignore_cbs     r   mcaller'_get_instance_metadata.<locals>.mcaller   sQ    
	##;'''"" 	#14Q77DcJ"	#s    A+AA)r:   zFailed fetching %s from url %s)r   r\   rw   rx   rz   r/   rQ   rY   
isinstancedictr}   r   r|   r   )treer~   r   rp   rq   rr   r:   rs   rt   ru   r   md_urlr   r   materializermdr9   s             `     @r   _get_instance_metadatar      s     ##$44HF##%!F#&>+v\
 %%'"t%%B	 C94H	s   
AB (B;:B;c
                 (    [        SU UUUUUUUUU	S9$ )Nz
meta-data/)r   r~   r   rp   rq   rr   r:   rt   rs   ru   r   r   )
r~   r   rp   rq   rr   r:   rs   rt   ru   r   s
             r   get_instance_metadatar      s2     ")!%!&C r   c	                 &    [        SU UUUUUUUUS9
$ )Nzdynamic/instance-identity)
r   r~   r   rp   rq   rr   r:   rt   rs   ru   r   )	r~   r   rp   rq   rr   r:   rs   rt   ru   s	            r   get_instance_identityr     s/     "()!%! r   )latesthttp://169.254.169.254)
r   r   Nrn   rn   NNNNN)	r   r   Nrn   rn   NNNN)rw   r   logging	cloudinitr   r   	getLoggerr(   r   	frozenset	NOT_FOUNDry   r   r/   rm   r   r   r   r   r'   r   r   <module>r      s       &!!5!5 67  FQ Qh* -% %T -"&0h -"&< -r   