o
    ÙKÕiö  ã                   @   sÀ   d dl Z d dlZd dlmZmZmZmZmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ e  e e¡¡Zdedefdd„Zdefdd„ZdS )é    N)ÚactionsÚ
exceptionsÚlockÚsystemÚutil)Ú_is_attached)ÚAutoAttachInstance)ÚAzureAutoAttachInstance)ÚGCPAutoAttachInstance)Úcloud_instance_factory)ÚLXDAutoAttachInstance)ÚUAConfig)Úretry_auto_attachÚcfgÚcloudc              
   C   sš   zt jdd�� t | |¡ W d   ƒ n1 sw   Y  W n' tyE } zt |¡ t  ¡  t d¡ t	 
tj¡ W Y d }~d S d }~ww t d¡ d S )Nzpro.daemon.attempt_auto_attach)Úlock_holderz%creating flag file to trigger retrieszSuccessful auto attach)r   Ú	RetryLockr   Úauto_attachÚ	ExceptionÚLOGÚerrorÚclear_lock_file_if_presentÚinfor   Úcreate_filer   ÚFLAG_FILE_PATH)r   r   Úe© r   úF/usr/lib/python3/dist-packages/uaclient/daemon/poll_for_pro_license.pyÚattempt_auto_attach   s   ÿ€

€ûr   c                    sÜ  t j| jdd�rt d¡ d S t| ƒjrt d¡ d S t ¡ s&t d¡ d S zt	ƒ ‰ W n t
jy;   t d¡ Y d S w t‡ fdd„tttfD ƒƒ}|sSt d	¡ d S ˆ  ¡ s^t d
¡ d S zˆ jdd�}W n t
jyv   t d¡ Y d S  t
jy   Y n
w |r‰t| ˆ ƒ d S | js“t d¡ d S 	 zt ¡ }ˆ jdd�}t ¡ }W n t
jy´   t d¡ Y d S  t
jyÃ   t | j¡ Y q“w t| ƒjrÐt d¡ d S |rÙt| ˆ ƒ d S || dk rít d| j¡ t | j¡ q“q”)Nzfeatures.disable_auto_attach)ÚconfigÚpath_to_valuez,Configured to not auto attach, shutting downzAlready attached, shutting downzNot on LTS, shutting downzNot on cloud, shutting downc                 3   s   � | ]}t ˆ |ƒV  qd S )N)Ú
isinstance)Ú.0Úcloud_instance©r   r   r   Ú	<genexpr>1   s
   € ÿ
ÿz'poll_for_pro_license.<locals>.<genexpr>z.Not on supported cloud platform, shutting downz(Not on supported instance, shutting downF)Úwait_for_changezCancelling pollingz5Configured to not poll for pro license, shutting downTé
   zdwait_for_change returned quickly and no pro license present. Waiting %d seconds before polling again)r   Úis_config_value_truer   r   r   r   Úis_attachedr   Úis_current_series_ltsr   r   ÚCloudFactoryErrorÚanyr
   r	   r   Úshould_poll_for_pro_licenseÚis_pro_license_presentÚCancelProLicensePollingÚDelayProLicensePollingr   Úpoll_for_pro_licenseÚtimeÚsleepÚpolling_error_retry_delay)r   Úis_supported_cloudÚpro_license_presentÚstartÚendr   r$   r   r1      s’   ÿ





þýþ


ÿ
ý

ÿ
þ


ýär1   )Úloggingr2   Úuaclientr   r   r   r   r   Ú(uaclient.api.u.pro.status.is_attached.v1r   Úuaclient.cloudsr   Úuaclient.clouds.azurer	   Úuaclient.clouds.gcpr
   Úuaclient.clouds.identityr   Úuaclient.clouds.lxdr   Úuaclient.configr   Úuaclient.daemonr   Ú	getLoggerÚreplace_top_level_logger_nameÚ__name__r   r   r1   r   r   r   r   Ú<module>   s    