
    쑛hL              	          d dl Z d dlZd dlZd dlZd dlmZ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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' G d# d$e      Z( G d% d&e      Z) G d' d(e      Z*y)*    N)datetimetimezone)StringIO)AnyDictListOptionalTuple)ElementTree)subpversion)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                   d    e Zd Zdddedeeeef      ddfdZdee   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 )NzCloud-Init/z%https://aka.ms/linuxprovisioningerror)r   version_stringagentdocumentation_urlr!   r    r   nowr   utc	timestamp)selfr!   r    s      r   __init__zReportableError.__init__'   sR     #7#9#9#;"<=
!H#2D #%D !hll3    vm_idc                2   dd| j                    d| j                   g}|| j                  j                         D cg c]  \  }}| d|  c}}z  }|d| 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(   	isoformatr%   r   )r)   r,   r   kvs        r   as_encoded_reportz!ReportableError.as_encoded_report5   s     dkk]#TZZL!

 	(<(<(B(B(DE1A3asEEUG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__H   sV    uo. >%//1>u||+> $$(=(==		
r+   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__P   sL    ~~&&' (kk] #( )#334A7	
r+   )r;   
__module____qualname__strr	   r   r   r*   r3   boolr7   r<    r+   r   r   r   &   sd    JN44/7S#X/G4	4# }# 
	#&
t 

# 
r+   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 interfacerD   superr*   r    )r)   rD   r:   s     r   r*   z-ReportableErrorDhcpInterfaceNotFound.__init__Z   s!    9:+3Z(r+   )r;   r=   r>   floatr*   __classcell__r:   s   @r   rC   rC   Y   s    4 44 4 4r+   rC   c                   2     e Zd Zdedee   ddf fdZ xZS )ReportableErrorDhcpLeaserD   	interfacer   Nc                 `    t         |   d       || j                  d<   || j                  d<   y )Nzfailure to obtain DHCP leaserD   rM   rF   )r)   rD   rM   r:   s      r   r*   z!ReportableErrorDhcpLease.__init__a   s1    78+3Z(,5[)r+   )r;   r=   r>   rH   r	   r?   r*   rI   rJ   s   @r   rL   rL   `   s&    6 68C= 6T 6 6r+   rL   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 )	(ReportableErrorDhcpOnNonPrimaryInterfacerM   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 interfacerM   rQ   rR   rS   rT   rF   )r)   rM   rQ   rR   rS   rT   r:   s         r   r*   z1ReportableErrorDhcpOnNonPrimaryInterface.__init__i   sc     	AB,5[))/X&)/X&0=_-(-W%r+   )r;   r=   r>   r	   r?   r   r
   r   r   r*   rI   rJ   s   @r   rP   rP   h   so    . C=. 	.
 .  U38_ 56. CH~. 
. .r+   rP   c                   ,     e Zd Zdededdf fdZ xZS )ReportableErrorImdsUrlError	exceptionrD   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_coderD   rX   url)r5   causerequestsConnectTimeoutConnectionErrorReadTimeoutcoderG   r*   r    reprr[   )r)   rX   rD   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#r+   )r;   r=   r>   r   rH   r*   rI   rJ   s   @r   rW   rW   {   s"    4X 4 44 4 4r+   rW   c                   ,     e Zd Zdededdf fdZ xZS )"ReportableErrorImdsInvalidMetadatakeyvaluer   Nc                    t         |   d|        || j                  d<   || j                  d<   t        |      j                  | j                  d<   y )Nzinvalid IMDS metadata for key=re   rf   type)rG   r*   r    rh   r;   )r)   re   rf   r:   s      r   r*   z+ReportableErrorImdsInvalidMetadata.__init__   sR    9#?@&)U#(-W%'+E{';';V$r+   )r;   r=   r>   r?   r   r*   rI   rJ   s   @r   rd   rd      s"    <s <3 <4 < <r+   rd   c                   (     e Zd Zdeddf fdZ xZS )+ReportableErrorImdsMetadataParsingExceptionrX   r   Nc                T    t         |   d       t        |      | j                  d<   y )Nzerror parsing IMDS metadatarX   rG   r*   rb   r    r)   rX   r:   s     r   r*   z4ReportableErrorImdsMetadataParsingException.__init__   s%    67,0O[)r+   )r;   r=   r>   
ValueErrorr*   rI   rJ   s   @r   rj   rj      s    <Z <D < <r+   rj   c                         e Zd Zd fdZ xZS )ReportableErrorOsDiskPpsFailurec                 $    t         |   d       y )Nzerror waiting for host shutdownrG   r*   r)   r:   s    r   r*   z(ReportableErrorOsDiskPpsFailure.__init__   s    :;r+   r   Nr;   r=   r>   r*   rI   rJ   s   @r   rp   rp      s    < <r+   rp   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: rr   )r)   rx   r:   s     r   r*   z*ReportableErrorOvfInvalidMetadata.__init__   s    DWINOr+   )r;   r=   r>   r?   r*   rI   rJ   s   @r   rw   rw      s    P P P Pr+   rw   c                   <     e Zd Zdej                  ddf fdZ xZS )"ReportableErrorOvfParsingExceptionrX   r   Nc                B    |j                   }t        | 	  d|        y )Nzerror parsing ovf-env.xml: )msgrG   r*   )r)   rX   rx   r:   s      r   r*   z+ReportableErrorOvfParsingException.__init__   s!    --6wi@Ar+   )r;   r=   r>   ET
ParseErrorr*   rI   rJ   s   @r   r{   r{      s#    BR]] Bt B Br+   r{   c                   (     e Zd Zdeddf fdZ xZS )!ReportableErrorUnhandledExceptionrX   r   Nc                    t         |   d       dj                  t        j                  t        |      ||j                              }|j                  d      }|d d d   }dj                  |      }t        j                  |j                  d            j                  d      }t        |      | j                  d<   || j                  d<   y )Nzunhandled exception 
zutf-8rX   traceback_base64)rG   r*   join	tracebackformat_exceptionrh   __traceback__splitbase64	b64encodeencodedecoderb   r    )r)   rX   tracetrace_linesreversed_trace_linesreversed_tracetrace_base64r:   s          r   r*   z*ReportableErrorUnhandledException.__init__   s    ./&&YI,C,C

 kk$'*4R40#78''(=(=g(FGNN
 -1O[)3?/0r+   )r;   r=   r>   	Exceptionr*   rI   rJ   s   @r   r   r      s    @) @ @ @r+   r   c                         e Zd Zd fdZ xZS )!ReportableErrorProxyAgentNotFoundc                 $    t         |   d       y )Nzazure-proxy-agent not foundrr   rs   s    r   r*   z*ReportableErrorProxyAgentNotFound.__init__   s    67r+   rt   ru   rJ   s   @r   r   r      s    8 8r+   r   c                   <     e Zd Zdej                  ddf fdZ xZS )&ReportableErrorProxyAgentStatusFailurerX   r   Nc                     t         |   d       |j                  | j                  d<   |j                  | j                  d<   |j
                  | j                  d<   y )Nz azure-proxy-agent status failure	exit_codestdoutstderr)rG   r*   r   r    r   r   rm   s     r   r*   z/ReportableErrorProxyAgentStatusFailure.__init__   sS    ;<,5,?,?[))2)9)9X&)2)9)9X&r+   )r;   r=   r>   r   ProcessExecutionErrorr*   rI   rJ   s   @r   r   r      s!    :$"<"< : : :r+   r   c                   8     e Zd Zdddedee   ddf fdZ xZS )ReportableErrorVmIdentificationN)system_uuidrX   r   r   c                r    t         |   d       t        |      | j                  d<   || j                  d<   y )Nzfailure to identify Azure VM IDrX   r   rl   )r)   rX   r   r:   s      r   r*   z(ReportableErrorVmIdentification.__init__   s7     	:;,0O[).9]+r+   )r;   r=   r>   r   r	   r?   r*   rI   rJ   s   @r   r   r      s,    DH:%:4<SM:	: :r+   r   )|')+r   r   loggingr   r   r   r   r   typingr   r   r   r	   r
   	xml.etreer   r~   r]   	cloudinitr   r   cloudinit.url_helperr   	getLoggerr;   LOGr?   r   r   r   rC   rL   rP   rW   rd   rj   rp   rw   r{   r   r   r   r   rA   r+   r   <module>r      s  
  
   '  3 3 '  # )g! =@&
s)& #&69&& 0
i 0
f4? 46 6. .&4/ 40< <</ <<o <
P P
B B@ @(8 8
:_ ::o :r+   