o
    ¡K&b=  ã                   @   sÌ   d dl 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 d dlmZ dddd	œZd
dddddœZg d¢ZG dd„ deƒZdee fdd„Zedƒdeee ee f fdd„ƒZde	jfdd„ZdS )é    N)ÚEnum)ÚDictÚOptionalÚTupleÚType)ÚcloudsÚ
exceptionsÚutil)Úapply_config_settings_overrideÚazureÚawsÚgcp)ZazurenetZec2ÚgceZAWSz	AWS ChinazAWS GovZAzureZGCP)r   ú	aws-chinaúaws-govr   r   ©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-initZqueryZinstance_idz'Unable to determine current instance-idN)r	   ÚsubpÚstripr   ÚProcessExecutionErrorÚloggingZwarning©ÚoutZ_errr   r   r   Úget_instance_id   s   
ÿ
r"   Ú
cloud_typec                  C   sR   t  d¡r$zt  dg¡\} }|  ¡ d fW S  tjy#   d tjf Y S w d tjfS )Nzcloud-id)	r	   Úwhichr   r   r   r   r   r   r   r    r   r   r   Úget_cloud_type'   s   
ÿ
r%   c                  C   sx   ddl m} m}m} | j| j| j|j|jdœ}tƒ \}}|s#t 	|¡‚| 
|¡}|s/t |¡‚|ƒ }|js:t |¡‚|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   r   r   r   r   )Zuaclient.cloudsr   r   r   ZUAAutoAttachAWSInstanceZUAAutoAttachAzureInstanceZUAAutoAttachGCPInstancer%   r   ZCloudFactoryNoCloudErrorÚgetZ!CloudFactoryUnsupportedCloudErrorZ	is_viableZCloudFactoryNonViableCloudError)r   r   r   Zcloud_instance_mapr#   Ú_ÚclsÚinstancer   r   r   Úcloud_instance_factory4   s"   
û




r*   )r   Úenumr   Útypingr   r   r   r   Zuaclientr   r   r	   Zuaclient.configr
   ZDATASOURCE_TO_CLOUD_IDZCLOUD_TYPE_TO_TITLEZ
PRO_CLOUDSr   Ústrr"   r%   ZAutoAttachCloudInstancer*   r   r   r   r   Ú<module>   s$    û 