U
    lHJe                     @   s   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 eeZddd	d
ddZejjejjejjdZG d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_overrideZAWSz	AWS ChinazAWS GovZAzureZGCPawsz	aws-chinazaws-govazuregce)r   r   r   c                   @   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   sD   zt dddg\} }|  W S  tjk
r4   Y nX t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   sv   t drlzt dg\} }|  d fW S  tjk
rj } z"tdt| d t	j
f W Y S d }~X Y nX d 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   sv   ddl m} m}m} | j| j| j|j|jd}t \}}|sDt	 |
|}|s^tj|d| }|jsrt |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   )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loggingenumr   	functoolsr   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,   	"