
Ke                 @   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  j e j e   Z Gd 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 d g e e e f d d d	      Z d
 d   Z e j e	 j
 d d d d g 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   sk   |  j    } t j t j |  j  d | d d } | j d k rI | j St j	 d | j d | j   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_responseZretry_sleepsg      ?r   )returnc             C   s   d |  j    i S)NZpkcs7)r   )r   r   r   r   identity_doc+   s    z$UAAutoAttachAWSInstance.identity_docc             C   s   xu t  D]m } y |  j d |  } WnD t k
 ri } z$ t j d | t | d d   WYd  d  } ~ Xq X| |  _ Pq W|  j d  k r t j d d j	 t     | S)N
ip_addressz*Could not reach AWS IMDS at http://%s: %s
reason Z	addressesz, )
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 St j t j |  d d d t t i d d } | j d k r | j	 |  _  t |  j  i S| j d k r d |  _  d  St
 j d	 | j d
 | j	   d  S)NZIMDSv1methodZPUTr
   r   r   r   i  r   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   y- t  j t  } d | d d  k r, d SWn t k
 rA Yn Xt  j t  j   } t  j t  j   } d | d d  k o | d d  k n r d Sd 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    0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  j    d  S)N)r   ZInPlaceUpgradeNotSupportedError)r   r8   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!   r/   boolr6   r7   r9   r   r   r   r   r	      s   %-r	   )ZloggingZtypingr   r   Zuaclientr   r   r   r   Zuaclient.cloudsr   ZIMDS_IPV4_ADDRESSZIMDS_IPV6_ADDRESSr    r,   r   r1   r5   r3   r.   r+   r-   Z	getLoggerZreplace_top_level_logger_namer:   r#   r	   r   r   r   r   <module>   s    "
