
    UٵgU                        d dl Z 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mZ d dlmZ d dlmZ d dlmZ d dlmZmZ  ej.                   ej0                  e            Zg d	Zd
ZdedefdZdefdZ deddfdZ!y)    N)
exceptionslockmessagessystemutil)r   )FullAutoAttachOptionsfull_auto_attach)_is_attached)UAConfig)AUTO_ATTACH_STATUS_MOTD_FILE)noticesstate_files)  r   i  i  i   i@8  p  r   Q r     r    r    F r   逗 r   z./run/ubuntu-advantage/flags/auto-attach-failedereturnc                    t        | t        j                        r*t        j                  j                  | j                        S t        | t        j                        rt        j                  S t        | t        j                        r*t        j                  j                  | j                        S t        | t        j                        r*t        j                  j                  | j                        S t        | t        j                        rOt        j                   j                  | j"                        dj                  t%        | j&                              z   S t        | t        j(                        rdj                  | j*                        S t,        j/                  d|        t%        |       xs t        j0                  S )	N)detail)pid)	error_msg)urlz: "{}"z"{}"zUnexpected exception)exc_info)
isinstanceapi_exceptionsInvalidProImager   $RETRY_ERROR_DETAIL_INVALID_PRO_IMAGEformatr   NonAutoAttachImageError(RETRY_ERROR_DETAIL_NON_AUTO_ATTACH_IMAGELockHeldErrorRETRY_ERROR_DETAIL_LOCK_HELDr   ContractAPIError%RETRY_ERROR_DETAIL_CONTRACT_API_ERRORbodyConnectivityError RETRY_ERROR_DETAIL_URL_ERROR_URLr   strcause_errorUbuntuProErrormsgLOGerrorUNKNOWN_ERROR)r   s    C/usr/lib/python3/dist-packages/uaclient/daemon/retry_auto_attach.py,full_auto_attach_exception_to_failure_reasonr4   )   sW   !^334<<CC;; D 
 	
 
A~==	>@@@	A~33	444;;;FF	A~66	7==DDff E 
 	
 
A~77	888?? @ 
OOC./0 	0 
A~44	5}}QUU##		(1	51v////    cfgc                 b   t         j                  j                          t         j                  j                          t	        j
                  t               t        j                  t        j                  j                         t        j                  t        j                  j                         y )N)r   retry_auto_attach_state_filedeleteretry_auto_attach_options_filer   ensure_file_absentr   r   removeNoticeAUTO_ATTACH_RETRY_FULL_NOTICEAUTO_ATTACH_RETRY_TOTAL_FAILURE)r6   s    r3   cleanupr@   A   si    ,,335..557
:;NN44 NN66r5   c           	         t        |       j                  ry t        j                  j	                         }|"|j
                  }t        |d  }|j                  }n
d}t        }d }t        |      D ]  \  }}t        j                  j                  t        j                  j                        }|t        j                  |      z   }|j                  dd      }t        j                  j                  t        j                   ||z   |             |}	|	t"        j$                  }		 |j'                         }t"        j*                  j-                  ||z   dz   |	|j/                               }
t1        j2                  t4        d|
z   dz          	 t7        j8                  d	
      5  t;        j<                  t:        j>                  j@                  ||z   dz   |	|j/                                d d d        tG        jH                  |       t        |       j                  r n[	 t        jJ                  j	                         }tM               }|"|jN                  |_'        |jP                  |_(        tS        |        n tg        |        t        |       j                  st        j                  j                  t        j                   ti        t              |             |}	|	t"        j$                  }	t"        jj                  j-                  ti        t              dz   |	      }
t1        j2                  t4        d|
z   dz          t;        j<                  t:        j>                  jl                  ti        t              dz   |	       y y # t(        $ r Y Vw xY w# 1 sw Y   xY w# tB        jD                  $ r Y w xY w# tT        jV                  $ r tX        j[                  d       Y  ktT        j\                  $ r+}tX        j_                  |j`                         Y d }~ d }~wt(        $ r+}tc        |      }tX        je                  |       Y d }~d }~ww xY w)Nr   )seconds)secondmicrosecond)interval_indexfailure_reason   )num_attemptsreasonnext_run_datestring
z

z+pro.daemon.retry_auto_attach.notice_updates)lock_holderz&already attached, ending retry service)rH   rI   )7r
   is_attachedr   r8   readrE   RETRY_INTERVALSrF   	enumeratedatetimenowtimezoneutc	timedeltareplacewriteRetryAutoAttachStater   r2   
astimezone	ExceptionAUTO_ATTACH_RETRY_NOTICEr"   	isoformatr   
write_filer   r   	RetryLockr   addr=   r>   r   r%   timesleepr:   r   enableenable_betar	   r   AlreadyAttachedErrorr0   infoEntitlementsNotEnabledErrorwarningr/   r4   r1   r@   len&AUTO_ATTACH_RETRY_TOTAL_FAILURE_NOTICEr?   )r6   persisted_stateoffset	intervalsrF   indexintervallast_attemptnext_attempt
msg_reasonauto_attach_status_msgpersisted_optionsoptionsr   s                 r3   retry_auto_attachru   M   s   C$$ ">>CCEO" //#FG,	(77#	$Y/ ?x((,,X->->-B-BC#h&8&8&JJ#++1!+D0066,,%~-	
 $
!//J	'224L "*!B!B!I!I%!+ , 6 6 8 "J "

 	())F2	
	I  NN@@!'%!!3%(4(>(>(@	 	

8((	::??A  ,-G ,!2!9!9&7&C&C#W%m?B CL((0066,,"?3-	
 $
!//J;;BB 1A5j C  	
 	())F2	
 	NN::_-1	
) )i  		  '' 		& 22 	HH=>99 	KK 	I!LNIIaLL	sh   $M>N!AN'NAN5>	N
NN	NN21N25(Q!Q3PQ% QQ)"rQ   loggingr`   uaclientr   r   r   r   r   uaclient.apir   2uaclient.api.u.pro.attach.auto.full_auto_attach.v1r   r	   (uaclient.api.u.pro.status.is_attached.v1r
   uaclient.configr   uaclient.daemonr   uaclient.filesr   r   	getLoggerreplace_top_level_logger_name__name__r0   rO   FLAG_FILE_PATHrZ   r,   r4   r@   ru    r5   r3   <module>r      s       = = 5 B $ 8 /g:::8DE( B0I 0# 00	 	l
8 l
 l
r5   