
Ke              
   @   sy  d  d l  Z  d  d l m Z d  d l m Z d  d l m Z m Z m Z m	 Z	 d  d l
 m Z m Z m Z m Z m Z d  d l m Z e  j e j e   Z d d d	 d
 d d d d d d i Z d e j j d e j j d e j j i Z Gd d   d e  Z e e d d d    Z e d d  e d  e e e e e f d d d      Z e j  d d d    Z! d S)    N)Enum)	lru_cache)DictOptionalTupleType)clouds
exceptionsmessagessystemutil)apply_config_settings_overrideawsZAWSz	aws-chinaz	AWS Chinazaws-govzAWS GovazureZAzuregceZGCPc               @   s   e  Z d  Z d Z d Z d S)NoCloudTypeReasonr      N)__name__
__module____qualname__NO_CLOUD_DETECTEDCLOUD_ID_ERROR r   r   :/usr/lib/python3/dist-packages/uaclient/clouds/identity.pyr      s   r   )returnc              C   sU   y, t  j d d d g  \ }  } |  j   SWn t j k
 rC Yn Xt j d  d S)z%Query cloud instance-id from cmdline.z
cloud-initZqueryZinstance_idz'Unable to determine current instance-idN)r   subpstripr	   ProcessExecutionErrorLOGZwarning)out_errr   r   r   get_instance_id   s    r!   maxsize
cloud_typec              C   s   t  j d  r y, t  j d g  \ }  } |  j   d  f SWnK t j k
 r } z( t j d t |   d  t	 j
 f SWYd  d  } ~ Xn Xd  t	 j f S)Nzcloud-idzerror running cloud-id: %s)r   Zwhichr   r   r	   r   r   debugstrr   r   r   )r   r    excr   r   r   get_cloud_type+   s     r'   c           
   C   s   d d l  m }  m } m } d |  j d |  j d |  j d | j d | j i } t   \ } } | sp t j	    | j
 |  } | s t j d |   |   } | j s t j    | S)	a  
    :raises CloudFactoryError: if no cloud instance object can be constructed
    :raises CloudFactoryNoCloudError: if no cloud instance object can be
        constructed because we are not on a cloud
    :raises CloudFactoryUnsupportedCloudError: if no cloud instance object can
        be constructed because we don't have a class for the cloud we're on
    :raises CloudFactoryNonViableCloudError: if no cloud instance object can be
        constructed because we explicitly do not support the cloud we're on
    r   )r   r   gcpr   z	aws-chinazaws-govr   r   r#   )Zuaclient.cloudsr   r   r(   ZUAAutoAttachAWSInstanceZUAAutoAttachAzureInstanceZUAAutoAttachGCPInstancer'   r	   ZCloudFactoryNoCloudErrorgetZNonAutoAttachImageErrorZ	is_viableZCloudFactoryNonViableCloudError)r   r   r(   Zcloud_instance_mapr#   _clsinstancer   r   r   cloud_instance_factory:   s     
						r-   )"ZloggingZenumr   	functoolsr   Ztypingr   r   r   r   Zuaclientr   r	   r
   r   r   Zuaclient.configr   Z	getLoggerZreplace_top_level_logger_namer   r   ZCLOUD_TYPE_TO_TITLEZurlsZPRO_ON_AWS_HOME_PAGEZPRO_ON_AZURE_HOME_PAGEZPRO_ON_GCP_HOME_PAGEZPRO_CLOUD_URLSr   r%   r!   r'   ZAutoAttachCloudInstancer-   r   r   r   r   <module>   s(   "(	-