o
    ϴf                     @   s   d dl Z d dlmZmZ d dlmZmZmZmZm	Z	 d dl
mZ dZdZeefZdZdZd	Zd
ZdZdZdZed Ze e	eZG dd deZdS )    N)AnyDict)
exceptionshttpsecret_managersystemutil)AutoAttachCloudInstancez169.254.169.254z[fd00:ec2::254]zhttp://{}/latest/api/tokenz0http://{}/latest/dynamic/instance-identity/pkcs7z/sys/hypervisor/uuidz /sys/class/dmi/id/product_serialz/sys/class/dmi/id/product_uuid21600zX-aws-ec2-metadata-tokenz-ttl-secondsc                   @   s   e Zd ZdZdZdd Zeeje	j
g dddeeef fddZd	d
 Zeje	j
g dddd ZedefddZedefddZdefddZdedefddZdS )UAAutoAttachAWSInstanceNc                 C   sB   |   }tjt| j|dd}|jdkr|jS tj	|j|jd)N   )headerstimeout   codebody)
_request_imds_v2_token_headersr   readurlIMDS_URLformat_ip_addressr   r   r   CloudMetadataError)selfr   response r   5/usr/lib/python3/dist-packages/uaclient/clouds/aws.py_get_imds_url_response   s   
z.UAAutoAttachAWSInstance._get_imds_url_response)g      ?r   r   )retry_sleepsreturnc                 C   s   |   }tj| d|iS )Npkcs7)r   r   secrets
add_secret)r   imds_url_responser   r   r   identity_doc+   s   z$UAAutoAttachAWSInstance.identity_docc                 C   s|   t D ]+}z| j|d}W n ty) } ztd|t|dd W Y d }~qd }~ww || _ | jd u r<tjd	t d|S )N)
ip_addressz*Could not reach AWS IMDS at http://%s: %s
reason z, )	addresses)
IMDS_IP_ADDRESS_get_imds_v2_token_headers	ExceptionLOGwarninggetattrr   r   AWSNoValidIMDSjoin)r   addressr   er   r   r   r   2   s$   

z6UAAutoAttachAWSInstance._request_imds_v2_token_headers)r         c                 C   s   | j dkrd S | j rt| j iS tjt|dttidd}|jdkr2|j	| _ t
j| j  t| j iS |jdkr<d| _ d S tj|j|j	d)NIMDSv1PUTr   )methodr   r   r   i  r   )
_api_tokenAWS_TOKEN_PUT_HEADERr   r   IMDS_V2_TOKEN_URLr   AWS_TOKEN_REQ_HEADERAWS_TOKEN_TTL_SECONDSr   r   r   r!   r"   r   r   )r   r%   r   r   r   r   r*   E   s(   




z2UAAutoAttachAWSInstance._get_imds_v2_token_headersc                 C      dS )Nawsr   r   r   r   r   
cloud_type^      z"UAAutoAttachAWSInstance.cloud_typec                 C   s   zt t}d|dd krW dS W n	 ty   Y nw t t }t t }d|dd   kr=|dd kr@dS  dS dS )z$This machine is a viable AWSInstanceec2r      TF)r   	load_fileSYS_HYPERVISOR_PRODUCT_UUIDFileNotFoundErrorDMI_PRODUCT_UUIDlowerDMI_PRODUCT_SERIAL)r   hypervisor_uuiddmi_uuid
dmi_serialr   r   r   	is_viableb   s   
"z!UAAutoAttachAWSInstance.is_viablec                 C   r=   )UnsupportedFr   r?   r   r   r   should_poll_for_pro_licenset   rA   z3UAAutoAttachAWSInstance.should_poll_for_pro_licensewait_for_changec                C   s   t  )N)r   InPlaceUpgradeNotSupportedError)r   rP   r   r   r   is_pro_license_presentx   s   z.UAAutoAttachAWSInstance.is_pro_license_present)__name__
__module____qualname__r8   r   r   propertyr   retryr   r   r   strr   r$   r   r*   r@   boolrM   rO   rR   r   r   r   r   r      s     
r   )loggingtypingr   r   uaclientr   r   r   r   r   uaclient.cloudsr	   IMDS_IPV4_ADDRESSIMDS_IPV6_ADDRESSr)   r:   r   rE   rI   rG   r<   r9   r;   	getLoggerreplace_top_level_logger_namerS   r,   r   r   r   r   r   <module>   s"    