o
    i                  	   @   s  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eZ		d,d
ee dededefddZG dd deZG dd deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd deZ$G d d! d!eZ%G d"d# d#eZ&G d$d% d%eZ'G d&d' d'eZ(G d(d) d)eZ)G d*d+ d+eZ*dS )-    N)datetimetimezone)StringIO)AnyDictListOptionalTuple)ElementTree)subpversion)UrlError|'data	delimiter	quotecharreturnc                 C   sP   t  }tj|||tjd|  |  W  d   S 1 s!w   Y  dS )zEncode report data with csv.)r   r   quotingN)r   csvwriterQUOTE_MINIMALwriterowgetvaluerstrip)r   r   r   io r   @/usr/lib/python3/dist-packages/cloudinit/sources/azure/errors.pyencode_report   s   
$r   c                   @   sf   e Zd Zdddedeeeef  ddfddZdee defd	d
Zde	fddZ
defddZdS )ReportableErrorN)supporting_datareasonr    r   c                C   s@   dt   | _d| _|| _|r|| _ni | _ttj	| _
d S )NzCloud-Init/z%https://aka.ms/linuxprovisioningerror)r   version_stringagentdocumentation_urlr!   r    r   nowr   utc	timestamp)selfr!   r    r   r   r   __init__'   s   zReportableError.__init__vm_idc                C   sb   dd| j  d| j g}|dd | j D 7 }|d| d| j  d| j g7 }t|S )	Nzresult=errorzreason=zagent=c                 S   s   g | ]\}}| d | qS )=r   ).0kvr   r   r   
<listcomp>?   s    z5ReportableError.as_encoded_report.<locals>.<listcomp>zvm_id=z
timestamp=zdocumentation_url=)r!   r#   r    itemsr'   	isoformatr$   r   )r(   r*   r   r   r   r   as_encoded_report5   s   


z!ReportableError.as_encoded_reportc                 C   s.   t |to| j|jko| j|jko| j|jkS )N)
isinstancer   r'   r!   r    )r(   otherr   r   r   __eq__H   s   



zReportableError.__eq__c                 C   s&   | j j d| j d| j d| j dS )Nz(reason=z, timestamp=z, supporting_data=))	__class____name__r!   r'   r    r(   r   r   r   __repr__P   s   
zReportableError.__repr__)r8   
__module____qualname__strr   r   r   r)   r2   boolr5   r:   r   r   r   r   r   &   s     

r   c                       &   e Zd Zdeddf fddZ  ZS )$ReportableErrorDhcpInterfaceNotFounddurationr   Nc                    s   t  d || jd< d S )Nzfailure to find DHCP interfacerA   superr)   r    )r(   rA   r7   r   r   r)   Z   s   z-ReportableErrorDhcpInterfaceNotFound.__init__)r8   r;   r<   floatr)   __classcell__r   r   rD   r   r@   Y       r@   c                
       s>   e Zd Zdee dedee dee ddf
 fddZ  ZS )	ReportableErrorDhcpLeasedriverrA   	interfacemac_addressr   Nc                    s8   t  d || jd< || jd< || jd< || jd< d S )Nzfailure to obtain DHCP leaserI   rA   rJ   rK   rB   )r(   rI   rA   rJ   rK   rD   r   r   r)   a   s
   


z!ReportableErrorDhcpLease.__init__)r8   r;   r<   r   r=   rE   r)   rF   r   r   rD   r   rH   `   s    rH   c                       sZ   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d	Z	  Z
S )
(ReportableErrorDhcpOnNonPrimaryInterfacerJ   rI   routerstatic_routesleaser   Nc                   sB   t  d || jd< || jd< || jd< || jd< || jd< d S )Nz&failure to find primary DHCP interfacerJ   rI   rM   rN   rO   rB   )r(   rJ   rI   rM   rN   rO   rD   r   r   r)   q   s   	



z1ReportableErrorDhcpOnNonPrimaryInterface.__init__)r8   r;   r<   r   r=   r   r	   r   r   r)   rF   r   r   rD   r   rL   p   s    
rL   c                       *   e Zd Zdededdf fddZ  ZS )ReportableErrorImdsUrlError	exceptionrA   r   Nc                   s   t |jtjr
d}n!t |jtjrd}nt |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
< d S )Nz connection timeout querying IMDSzconnection error querying IMDSzread timeout querying IMDSzhttp error z querying IMDSzunexpected error querying IMDS	http_coderA   rR   url)r3   causerequestsConnectTimeoutConnectionErrorReadTimeoutcoderC   r)   r    reprrT   )r(   rR   rA   r!   rD   r   r   r)      s   
z$ReportableErrorImdsUrlError.__init__)r8   r;   r<   r   rE   r)   rF   r   r   rD   r   rQ          "rQ   c                       rP   )"ReportableErrorImdsInvalidMetadatakeyvaluer   Nc                   s:   t  d|  || jd< || jd< t|j| jd< d S )Nzinvalid IMDS metadata for key=r^   r_   type)rC   r)   r    r`   r8   )r(   r^   r_   rD   r   r   r)      s   

z+ReportableErrorImdsInvalidMetadata.__init__)r8   r;   r<   r=   r   r)   rF   r   r   rD   r   r]      r\   r]   c                       r?   )+ReportableErrorImdsMetadataParsingExceptionrR   r   Nc                   s   t  d t|| jd< d S )Nzerror parsing IMDS metadatarR   rC   r)   r[   r    r(   rR   rD   r   r   r)      s   z4ReportableErrorImdsMetadataParsingException.__init__)r8   r;   r<   
ValueErrorr)   rF   r   r   rD   r   ra      rG   ra   c                          e Zd Zd fddZ  ZS )ReportableErrorOsDiskPpsFailurer   Nc                       t  d d S )Nzerror waiting for host shutdownrC   r)   r9   rD   r   r   r)         z(ReportableErrorOsDiskPpsFailure.__init__r   Nr8   r;   r<   r)   rF   r   r   rD   r   rf          rf   c                       r?   )!ReportableErrorOvfInvalidMetadatamessager   Nc                    s   t  d|  d S )Nz)unexpected metadata parsing ovf-env.xml: rh   )r(   rn   rD   r   r   r)      s   z*ReportableErrorOvfInvalidMetadata.__init__)r8   r;   r<   r=   r)   rF   r   r   rD   r   rm      rG   rm   c                       (   e Zd Zdejddf fddZ  ZS )"ReportableErrorOvfParsingExceptionrR   r   Nc                   s   |j }t d|  d S )Nzerror parsing ovf-env.xml: )msgrC   r)   )r(   rR   rn   rD   r   r   r)      s   z+ReportableErrorOvfParsingException.__init__)r8   r;   r<   ET
ParseErrorr)   rF   r   r   rD   r   rp           rp   c                       r?   )!ReportableErrorUnhandledExceptionrR   r   Nc                    sz   t  d dtt|||j}|d}|d d d }d|}t	|
dd}t|| jd< || jd< d S )Nzunhandled exception 
zutf-8rR   traceback_base64)rC   r)   join	tracebackformat_exceptionr`   __traceback__splitbase64	b64encodeencodedecoder[   r    )r(   rR   tracetrace_linesreversed_trace_linesreversed_tracetrace_base64rD   r   r   r)      s   

z*ReportableErrorUnhandledException.__init__)r8   r;   r<   	Exceptionr)   rF   r   r   rD   r   ru      rG   ru   c                       re   )!ReportableErrorProxyAgentNotFoundr   Nc                    rg   )Nzazure-proxy-agent not foundrh   r9   rD   r   r   r)      ri   z*ReportableErrorProxyAgentNotFound.__init__rj   rk   r   r   rD   r   r      rl   r   c                       ro   )&ReportableErrorProxyAgentStatusFailurerR   r   Nc                    s4   t  d |j| jd< |j| jd< |j| jd< d S )Nz azure-proxy-agent status failure	exit_codestdoutstderr)rC   r)   r   r    r   r   rc   rD   r   r   r)      s   z/ReportableErrorProxyAgentStatusFailure.__init__)r8   r;   r<   r   ProcessExecutionErrorr)   rF   r   r   rD   r   r      rt   r   c                       s4   e Zd Zdddedee ddf fddZ  ZS )ReportableErrorVmIdentificationN)system_uuidrR   r   r   c                   s(   t  d t|| jd< || jd< d S )Nzfailure to identify Azure VM IDrR   r   rb   )r(   rR   r   rD   r   r   r)      s   z(ReportableErrorVmIdentification.__init__)r8   r;   r<   r   r   r=   r)   rF   r   r   rD   r   r      s    r   )r   r   )+r   r   loggingr{   r   r   r   r   typingr   r   r   r   r	   	xml.etreer
   rr   rV   	cloudinitr   r   cloudinit.url_helperr   	getLoggerr8   LOGr=   r   r   r   r@   rH   rL   rQ   r]   ra   rf   rm   rp   ru   r   r   r   r   r   r   r   <module>   sH   

3		