o !V1fi @s ddlZddlmZddlmZddlmZmZmZm Z ddl m Z m Z m Z mZmZddlmZeeeZddd d d d Ze jje jje jjd ZGdddeZdeefddZeddeddeeeeeffddZ ddeede j fddZ!dS)N)Enum) lru_cache)DictOptionalTupleType)clouds exceptionsmessagessystemutil)apply_config_settings_overrideAWSz AWS ChinazAWS GovAzureGCPawsz aws-chinazaws-govazuregce)rrrc@seZdZdZdZdS)NoCloudTypeReasonrN)__name__ __module__ __qualname__NO_CLOUD_DETECTEDCLOUD_ID_ERRORrr:/usr/lib/python3/dist-packages/uaclient/clouds/identity.pyrsrreturncCs@ztgd\}}|WStjyYnwtddS)z%Query cloud instance-id from cmdline.)z cloud-initquery instance_idz'Unable to determine current instance-idN)r subpstripr ProcessExecutionErrorLOGwarning)out_errrrrget_instance_ids  r()maxsize cloud_typec Csttdr5ztdg\}}|dfWStjy4}ztdt|dt j fWYd}~Sd}~wwdt j fS)Nzcloud-idzerror running cloud-id: %s) r whichr!r"r r#r$debugstrrrr)r&r'excrrrget_cloud_type+s  r/cloud_overridec Csddlm}m}m}|j|j|j|j|jd}|dur|}nt\}}|s)t | |}|s6tj |d|}|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)rrgcprN)r*)uaclient.cloudsrrr1UAAutoAttachAWSInstanceUAAutoAttachAzureInstanceUAAutoAttachGCPInstancer/r CloudFactoryNoCloudErrorgetNonAutoAttachImageError is_viableCloudFactoryNonViableCloudError) r0rrr1cloud_instance_mapr*_clsinstancerrrcloud_instance_factory:s&    r?)N)"loggingenumr functoolsrtypingrrrruaclientrr r r r uaclient.configr getLoggerreplace_top_level_logger_namerr$CLOUD_TYPE_TO_TITLEurlsPRO_ON_AWS_HOME_PAGEPRO_ON_AZURE_HOME_PAGEPRO_ON_GCP_HOME_PAGEPRO_CLOUD_URLSrr-r(r/AutoAttachCloudInstancer?rrrrs8     "