o
    ÙKÕi„  ã                   @   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dee fdd„Zedd�edƒdeee ee f fdd„ƒƒZ	ddee dej fdd„Z!dS )é    N)ÚEnum)Ú	lru_cache)ÚDictÚOptionalÚTupleÚType)ÚcloudsÚ
exceptionsÚmessagesÚsystemÚutil)Úapply_config_settings_overrideÚAWSz	AWS ChinazAWS GovÚAzureÚ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   s@   zt  g d¢¡\} }|  ¡ W S  tjy   Y nw t d¡ dS )z%Query cloud instance-id from cmdline.)z
cloud-initÚqueryÚinstance_idz'Unable to determine current instance-idN)r   ÚsubpÚstripr	   ÚProcessExecutionErrorÚLOGÚwarning)ÚoutÚ_errr   r   r   Úget_instance_id   s   
ÿ
r)   )ÚmaxsizeÚ
cloud_typec               
   C   st   t  d¡r5zt  dg¡\} }|  ¡ d fW S  tjy4 } zt dt|ƒ¡ d t	j
fW  Y d }~S d }~ww d t	jfS )Nzcloud-idzerror running cloud-id: %s)r   Úwhichr"   r#   r	   r$   r%   ÚdebugÚstrr   r   r   )r'   r(   Úexcr   r   r   Úget_cloud_type+   s   
€þ
r0   Úcloud_overridec           
      C   sŒ   ddl m}m}m}m} |j|j|j|j|j|jdœ}| dur"| }nt	ƒ \}}|s-t
 ¡ ‚| |¡}|s:t
j|d�‚|ƒ }	|	jsDt
 ¡ ‚|	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   r3   N)r+   )Úuaclient.cloudsr   r   r2   r3   ÚAWSAutoAttachInstanceÚAzureAutoAttachInstanceÚGCPAutoAttachInstanceÚLXDAutoAttachInstancer0   r	   ÚCloudFactoryNoCloudErrorÚgetÚNonAutoAttachImageErrorÚ	is_viableÚCloudFactoryNonViableCloudError)
r1   r   r   r2   r3   Úcloud_instance_mapr+   Ú_ÚclsÚinstancer   r   r   Úcloud_instance_factory:   s(   ú	

rB   )N)"ÚloggingÚenumr   Ú	functoolsr   Útypingr   r   r   r   Úuaclientr   r	   r
   r   r   Úuaclient.configr   Ú	getLoggerÚreplace_top_level_logger_namer   r%   ÚCLOUD_TYPE_TO_TITLEÚurlsÚPRO_ON_AWS_HOME_PAGEÚPRO_ON_AZURE_HOME_PAGEÚPRO_ON_GCP_HOME_PAGEÚPRO_CLOUD_URLSr   r.   r)   r0   ÚAutoAttachInstancerB   r   r   r   r   Ú<module>   s8    û	ý"ÿÿþ