
    f              	          d dl Z d dlZd dlZ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mZ d dlmZ d dlZd dlmZ d dlmZ d dlmZ  ej,                  e      Z	 d$d	e
e   d
ededefdZ G d de      Z G d de      Z G d de      Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z# G d de      Z$ G d  d!e      Z% G d" d#e      Z&y)%    N)datetime)StringIO)AnyDictListOptionalTuple)ElementTree)version)identity)UrlErrordata	delimiter	quotecharreturnc                     t               5 }t        j                  |||t        j                        j	                  |        |j                         j                         cddd       S # 1 sw Y   yxY w)zEncode report data with csv.)r   r   quotingN)r   csvwriterQUOTE_MINIMALwriterowgetvaluerstrip)r   r   r   ios       @/usr/lib/python3/dist-packages/cloudinit/sources/azure/errors.pyencode_reportr      s]     
 	&r

%%		

 (4. {{}##%	& 	& 	&s   AA))A2c                   Z    e Zd Zdddedeeeef      ddfdZdefdZde	fdZ
defd	Zy)
ReportableErrorN)supporting_datareasonr   r   c                    dt        j                          | _        d| _        || _        |r|| _        ni | _        t        j                         | _        	 t        j                         | _        y # t        $ r}d|| _        Y d }~y d }~ww xY w)NzCloud-Init/z%https://aka.ms/linuxprovisioningerrorzfailed to read vm id: )r   version_stringagentdocumentation_urlr    r   r   utcnow	timestampr   query_vm_idvm_id	Exception)selfr    r   id_errors       r   __init__zReportableError.__init__(   s     #7#9#9#;"<=
!H#2D #%D !*	?!--/DJ 	?1(>DJJ	?s   A0 0	B9
BBc                 F   dd| j                    d| j                   g}|| j                  j                         D cg c]  \  }}| d|  c}}z  }|d| j                   d| j
                  j                          d| j                   gz  }t        |      S c c}}w )Nzresult=errorzreason=zagent==zvm_id=z
timestamp=zdocumentation_url=)	r    r#   r   itemsr(   r&   	isoformatr$   r   )r*   r   kvs       r   as_encoded_reportz!ReportableError.as_encoded_report>   s     dkk]#TZZL!

 	(<(<(B(B(DE1A3asEETZZL!11345 !7!7 89
 	
 T"" Fs   Bc                     t        |t              xrO | j                  |j                  k(  xr4 | j                  |j                  k(  xr | j                  |j                  k(  S )N)
isinstancer   r&   r    r   )r*   others     r   __eq__zReportableError.__eq__O   sV    uo. >%//1>u||+> $$(=(==		
    c                     | j                   j                   d| j                   d| j                   d| j                   dS )Nz(reason=z, timestamp=z, supporting_data=))	__class____name__r    r&   r   )r*   s    r   __repr__zReportableError.__repr__W   sL    ~~&&' (kk] #( )#334A7	
r8   )r<   
__module____qualname__strr   r   r   r,   r3   boolr7   r=    r8   r   r   r   '   sZ    
 59	?? "$sCx.1	?
 
?,#	#"
t 

# 
r8   r   c                   (     e Zd Zdeddf fdZ xZS )$ReportableErrorDhcpInterfaceNotFounddurationr   Nc                 B    t         |   d       || j                  d<   y )Nzfailure to find DHCP interfacerE   superr,   r   )r*   rE   r;   s     r   r,   z-ReportableErrorDhcpInterfaceNotFound.__init__a   s!    9:+3Z(r8   )r<   r>   r?   floatr,   __classcell__r;   s   @r   rD   rD   `   s    4 44 4 4r8   rD   c                   2     e Zd Zdedee   ddf fdZ xZS )ReportableErrorDhcpLeaserE   	interfacer   Nc                 `    t         |   d       || j                  d<   || j                  d<   y )Nzfailure to obtain DHCP leaserE   rN   rG   )r*   rE   rN   r;   s      r   r,   z!ReportableErrorDhcpLease.__init__h   s1    78+3Z(,5[)r8   )r<   r>   r?   rI   r   r@   r,   rJ   rK   s   @r   rM   rM   g   s&    6 68C= 6T 6 6r8   rM   c                   j     e Zd Zdee   dee   dee   deeeeef         deeef   ddf fdZ	 xZ
S )	(ReportableErrorDhcpOnNonPrimaryInterfacerN   driverrouterstatic_routesleaser   Nc                    t         |   d       || j                  d<   || j                  d<   || j                  d<   || j                  d<   || j                  d<   y )Nz&failure to find primary DHCP interfacerN   rR   rS   rT   rU   rG   )r*   rN   rR   rS   rT   rU   r;   s         r   r,   z1ReportableErrorDhcpOnNonPrimaryInterface.__init__p   sc     	AB,5[))/X&)/X&0=_-(-W%r8   )r<   r>   r?   r   r@   r   r	   r   r   r,   rJ   rK   s   @r   rQ   rQ   o   so    . C=. 	.
 .  U38_ 56. CH~. 
. .r8   rQ   c                   ,     e Zd Zdededdf fdZ xZS )ReportableErrorImdsUrlError	exceptionrE   r   Nc                   t        |j                  t        j                        rd}nmt        |j                  t        j                        rd}nFt        |j                  t        j
                        rd}n|j                  rd|j                   d}nd}t        | !  |       |j                  r|j                  | j                  d<   || j                  d<   t        |      | j                  d	<   |j                  | j                  d
<   y )Nz connection timeout querying IMDSzconnection error querying IMDSzread timeout querying IMDSzhttp error z querying IMDSzunexpected error querying IMDS	http_coderE   rY   url)r5   causerequestsConnectTimeoutConnectionErrorReadTimeoutcoderH   r,   r   reprr\   )r*   rY   rE   r    r;   s       r   r,   z$ReportableErrorImdsUrlError.__init__   s    ioox'>'>?7F	)A)AB5F	)=)=>1F^^"9>>"2.AF5F >>09D  -+3Z(,0O[)&/mmU#r8   )r<   r>   r?   r   rI   r,   rJ   rK   s   @r   rX   rX      s"    4X 4 44 4 4r8   rX   c                   ,     e Zd Zdededdf fdZ xZS )"ReportableErrorImdsInvalidMetadatakeyvaluer   Nc                x    t         |   d|        || j                  d<   t        |      | j                  d<   y )Nzinvalid IMDS metadata for key=rf   rg   )rH   r,   r   rc   )r*   rf   rg   r;   s      r   r,   z+ReportableErrorImdsInvalidMetadata.__init__   s<    9#?@&)U#(,UW%r8   )r<   r>   r?   r@   r   r,   rJ   rK   s   @r   re   re      s"    4s 43 44 4 4r8   re   c                   (     e Zd Zdeddf fdZ xZS )+ReportableErrorImdsMetadataParsingExceptionrY   r   Nc                T    t         |   d       t        |      | j                  d<   y )Nzerror parsing IMDS metadatarY   )rH   r,   rc   r   )r*   rY   r;   s     r   r,   z4ReportableErrorImdsMetadataParsingException.__init__   s%    67,0O[)r8   )r<   r>   r?   
ValueErrorr,   rJ   rK   s   @r   rj   rj      s    <Z <D < <r8   rj   c                         e Zd Zd fdZ xZS )ReportableErrorOsDiskPpsFailurec                 $    t         |   d       y )Nzerror waiting for host shutdownrH   r,   )r*   r;   s    r   r,   z(ReportableErrorOsDiskPpsFailure.__init__   s    :;r8   )r   N)r<   r>   r?   r,   rJ   rK   s   @r   rn   rn      s    < <r8   rn   c                   (     e Zd Zdeddf fdZ xZS )!ReportableErrorOvfInvalidMetadatamessager   Nc                 *    t         |   d|        y )Nz)unexpected metadata parsing ovf-env.xml: rp   )r*   rs   r;   s     r   r,   z*ReportableErrorOvfInvalidMetadata.__init__   s    DWINOr8   )r<   r>   r?   r@   r,   rJ   rK   s   @r   rr   rr      s    P P P Pr8   rr   c                   <     e Zd Zdej                  ddf fdZ xZS )"ReportableErrorOvfParsingExceptionrY   r   Nc                B    |j                   }t        | 	  d|        y )Nzerror parsing ovf-env.xml: )msgrH   r,   )r*   rY   rs   r;   s      r   r,   z+ReportableErrorOvfParsingException.__init__   s!    --6wi@Ar8   )r<   r>   r?   r
   
ParseErrorr,   rJ   rK   s   @r   rv   rv      s%    B[%;%; B B Br8   rv   c                   (     e Zd Zdeddf fdZ xZS )!ReportableErrorUnhandledExceptionrY   r   Nc                 J   t         |   d       dj                  t        j                  t        |      ||j                              }t        j                  |j                  d            j                  d      }t        |      | j                  d<   || j                  d<   y )Nzunhandled exception zutf-8rY   traceback_base64)rH   r,   join	tracebackformat_exceptiontype__traceback__base64	b64encodeencodedecoderc   r   )r*   rY   tracetrace_base64r;   s       r   r,   z*ReportableErrorUnhandledException.__init__   s    ./&&YI,C,C

 ''W(=>EEgN,0O[)3?/0r8   )r<   r>   r?   r)   r,   rJ   rK   s   @r   r{   r{      s    @) @ @ @r8   r{   )|')'r   r   loggingr   r   r   r   typingr   r   r   r   r	   	xml.etreer
   r^   	cloudinitr   cloudinit.sources.azurer   cloudinit.url_helperr   	getLoggerr<   LOGr@   r   r)   r   rD   rM   rQ   rX   re   rj   rn   rr   rv   r{   rB   r8   r   <module>r      s   
  
     3 3 !   , )g! =@&
s)& #&69&& 6
i 6
r4? 46 6. .&4/ 404 4</ <<o <
P P
B B@ @r8   