U
    lHJe                     @   s   d dl Z d dlmZmZ d dl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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_uuidZ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
dddgdeeef ddd	Zd
d Zeje	j
dddgddd ZeedddZeedddZedddZeedddZdS )UAAutoAttachAWSInstanceNc                 C   sF   |   }tjt| j|dd}|jdkr0|jS tj	|j|jdd S )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_responseg      ?r
   )Zretry_sleeps)returnc                 C   s   d|   iS )NZpkcs7)r   r   r   r   r   identity_doc+   s    z$UAAutoAttachAWSInstance.identity_docc                 C   s~   t D ]X}z| j|d}W n8 tk
rP } ztd|t|dd W 5 d }~X Y qX || _ q^q| jd krztjd	t d|S )N)
ip_addressz*Could not reach AWS IMDS at http://%s: %s
reason z, )Z	addresses)
IMDS_IP_ADDRESS_get_imds_v2_token_headers	ExceptionLOGZwarninggetattrr   r   ZAWSNoValidIMDSjoin)r   Zaddressr   er   r   r   r   0   s     

z6UAAutoAttachAWSInstance._request_imds_v2_token_headers      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rV|j	| _ t| j iS |jdkrjd| _ d S t
j|j|j	dd S )NZIMDSv1Z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#   C   s(    




 z2UAAutoAttachAWSInstance._get_imds_v2_token_headersc                 C   s   dS )NZawsr   r   r   r   r   
cloud_type[   s    z"UAAutoAttachAWSInstance.cloud_typec                 C   s   z$t t}d|dd kr"W dS W n tk
r8   Y nX t t }t t }d|dd   krz|dd krn ndS dS )z$This machine is a viable AWSInstanceZec2r      TF)r   Z	load_fileSYS_HYPERVISOR_PRODUCT_UUIDFileNotFoundErrorDMI_PRODUCT_UUIDlowerDMI_PRODUCT_SERIAL)r   Zhypervisor_uuidZdmi_uuidZ
dmi_serialr   r   r   	is_viable_   s    

(z!UAAutoAttachAWSInstance.is_viablec                 C   s   dS )ZUnsupportedFr   r   r   r   r   should_poll_for_pro_licenseq   s    z3UAAutoAttachAWSInstance.should_poll_for_pro_license)wait_for_changer   c                C   s   t  d S )N)r   ZInPlaceUpgradeNotSupportedError)r   r:   r   r   r   is_pro_license_presentu   s    z.UAAutoAttachAWSInstance.is_pro_license_present)__name__
__module____qualname__r,   r   r   propertyr   Zretryr   r   r   strr   r   r   r#   r1   boolr8   r9   r;   r   r   r   r   r	      s   
r	   )Zloggingtypingr   r   Zuaclientr   r   r   r   Zuaclient.cloudsr   ZIMDS_IPV4_ADDRESSZIMDS_IPV6_ADDRESSr"   r.   r   r3   r7   r5   r0   r-   r/   Z	getLoggerZreplace_top_level_logger_namer<   r%   r	   r   r   r   r   <module>   s    