name : ec2.cpython-39.opt-1.pyc
a

'�DgU"�
@s�ddlZddlZddlZddlmZmZe�e�Ze	ej
g�ZGdd�d�ZGdd�d�Z
dd�Zddd
�Zddd�Zddd�Zddd�ZdS)�N)�
url_helper�utilc@s eZdZdZdd�Zdd�ZdS)�MetadataLeafDecoderz.Decodes a leaf blob into something meaningful.cCs,|sdS|��}|�d�r(|�d�r(dSdS)NF�{�}T)�strip�
startswith�endswith)�self�text�r�A/usr/lib/python3.9/site-packages/cloudinit/sources/helpers/ec2.py�_maybe_json_objectsz&MetadataLeafDecoder._maybe_json_objectc
Cs�|sdSzt�|�}Wnty,|YS0|�|�r|zt�|�WSttfyz}zt�	d||�WYd}~n
d}~00|�
d�dkr�|��S|S)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�errr
�__call__s$

�zMetadataLeafDecoder.__call__N)�__name__�
__module__�__qualname__�__doc__rrrrrr
rsrc@s.eZdZd
dd�Zdd�Zdd�Zdd	�ZdS)�MetadataMaterializerNcCs4||_d|_||_||_|dur*t�|_n||_dS�N)�_blob�_md�	_base_url�_callerr�
_leaf_decoder)r
r�base_url�caller�leaf_decoderrrr
�__init__7s
zMetadataMaterializer.__init__cCs�i}g}t�|�}|s||fSdd�}dd�}|��D]�}|��}||�}|r6|sTq6|dkr^q6||�rz||vr�|�|�q6|�dd�}|}	t|�dkr�|\}
}t�|
�}
|
dur�d|
}	|}|	||<q6||fS)	NcSs|�d�rdSdSdS)N�/TF)r	��itemrrr
�has_childrenIs
z1MetadataMaterializer._parse.<locals>.has_childrencSs|�d�r|�d�S|S)Nr/)r	�rstripr0rrr
�get_nameOs

z-MetadataMaterializer._parse.<locals>.get_namezsecurity-credentials�=�z%s/openssh-key)rrrr�append�split�lenZsafe_int)r
r�leaves�childrenr2r4r�
field_name�contents�resource�identZsub_contentsrrr
�_parseAs6


zMetadataMaterializer._parsecCs(|jdur|jS|�|j|j�|_|jSr%)r'�_materializer&r()r
rrr
�materializels
z MetadataMaterializer.materializecCs�|�|�\}}i}|D]<}t�||�}|�d�s8|d7}|�|�}|�||�||<qi}	|��D].\}
}t�||�}|�|�}
|�|
|
�|	|
<q`i}|�|�|	�	�D]&}
|
|vr�t
�d|�q�|	|
||
<q�|S)Nr/z&Duplicate key found in results from %s)r@r�combine_urlr	r)rA�itemsr*�update�keysrr)r
rr+r:r;Zchild_contents�cZ	child_urlZ
child_blobZ
leaf_contentsrr>Zleaf_urlZ	leaf_blobZjoinedrrr
rArs(



z!MetadataMaterializer._materialize)N)r r!r"r.r@rBrArrrr
r$6s

+r$cCs
|j|vS)z/Returns False if cause.code is in status_codes.)�code)Zstatus_codesZ
_request_args�causerrr
�skip_retry_on_codes�srJ�latest�http://169.254.169.254�c
Cs�t�||�}t�|d�}d}	z2|s.t�tt�}tj|||||||d�}
|
j}	Wn\tjy�}z$|j	tvrxt
�td|�WYd}~n(d}~0t
y�t
�td|�Yn0|	S)Nz	user-data�)�ssl_details�timeout�retries�exception_cb�
headers_cb�headers_redactz$Failed fetching userdata from url %s)rrC�	functools�partialrJ�SKIP_USERDATA_CODES�read_file_or_urlr=�UrlErrorrHr�logexcr�	Exception)�api_version�metadata_addressrOrPrQrSrTrRZud_urlZ	user_data�responserrrr
�get_instance_userdata�s0
��	

"r_c	s�t�|||�}tjtj||||||	d����fdd�}z6�|�}
t|
j|||d�}|��}t|t	�shi}|WSt
y�t�t
d||�iYS0dS)N)rOrPrQrSrTrRc
sbz�|�jWStjy\}z6�r*�|�s.�nt�d|�WYd}~dSWYd}~n
d}~00dS)Nz&Skipped retrieval of the content of %sz	(skipped))r=rrYrr)�urlr�r,�retrieval_exception_ignore_cbrr
�mcaller�s��z'_get_instance_metadata.<locals>.mcaller)r-zFailed fetching %s from url %s)rrCrUrVrXr$r=rB�
isinstance�dictr[rrZr)�treer\r]rOrPrQr-rSrTrRrbZmd_urlrcr^ZmaterializerZmdrrar
�_get_instance_metadata�s.
�


�
rgc


Cstd||||||||||	d�S)Nz
meta-data/)rfr\r]rOrPrQr-rTrSrRrb�rg)
r\r]rOrPrQr-rSrTrRrbrrr
�get_instance_metadata�s�ric		Cstd|||||||||d�
S)Nzdynamic/instance-identity)
rfr\r]rOrPrQr-rTrSrRrh)	r\r]rOrPrQr-rSrTrRrrr
�get_instance_identitys�rj)rKrLNrMrMNNN)
rKrLNrMrMNNNNN)
rKrLNrMrMNNNNN)	rKrLNrMrMNNNN)rUrZloggingZ	cloudinitrrZ	getLoggerr r�	frozensetZ	NOT_FOUNDrWrr$rJr_rgrirjrrrr
�<module>	sb
#T�
)�
4�
�

© 2025 Cubjrnet7