U
    Jh                     @   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dee 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)aws	aws-china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)   )cloud_overrider   c           
      C   s   ddl m}m}m}m} |j|j|j|j|j|jd}| dk	rD| }n
t	 \}}|sZt
 ||}|stt
j|d| }	|	jst
 |	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   gcplxd)r   r   r   r   r   r,   N)r%   )Zuaclient.cloudsr   r   r+   r,   ZAWSAutoAttachInstanceZAzureAutoAttachInstanceZGCPAutoAttachInstanceZLXDAutoAttachInstancer)   r	   ZCloudFactoryNoCloudErrorgetZNonAutoAttachImageErrorZ	is_viableZCloudFactoryNonViableCloudError)
r*   r   r   r+   r,   Zcloud_instance_mapr%   _clsinstancer   r   r   cloud_instance_factory:   s(    	

r1   )N)"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AutoAttachInstancer1   r   r   r   r   <module>   s4   	" 