o
    f                  	   @   s  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mZ d dl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)dS ),    N)datetime)StringIO)AnyDictListOptionalTuple)ElementTree)subpversion)identity)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                   @   s^   e Zd Zdddedeeeef  ddfddZ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 | _zt	
 | _W d S  ty= } zd|| _W Y d }~d S d }~w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_errorr   r   r   __init__(   s   
zReportableError.__init__c                 C   sd   dd| j  d| j g}|dd | j D 7 }|d| j 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>F   s    z5ReportableError.as_encoded_report.<locals>.<listcomp>zvm_id=z
timestamp=zdocumentation_url=)	r!   r#   r    itemsr(   r&   	isoformatr$   r   )r*   r   r   r   r   as_encoded_report>   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__O   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__W   s   
zReportableError.__repr__)r:   
__module____qualname__strr   r   r   r,   r4   boolr7   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 interfacerC   superr,   r    )r*   rC   r9   r   r   r,   a   s   z-ReportableErrorDhcpInterfaceNotFound.__init__)r:   r=   r>   floatr,   __classcell__r   r   rF   r   rB   `       rB   c                       s.   e Zd Zdedee ddf fddZ  ZS )ReportableErrorDhcpLeaserC   	interfacer   Nc                    s$   t  d || jd< || jd< d S )Nzfailure to obtain DHCP leaserC   rK   rD   )r*   rC   rK   rF   r   r   r,   h   s   
z!ReportableErrorDhcpLease.__init__)r:   r=   r>   rG   r   r?   r,   rH   r   r   rF   r   rJ   g   s    &rJ   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 )
(ReportableErrorDhcpOnNonPrimaryInterfacerK   driver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 interfacerK   rM   rN   rO   rP   rD   )r*   rK   rM   rN   rO   rP   rF   r   r   r,   p   s   	



z1ReportableErrorDhcpOnNonPrimaryInterface.__init__)r:   r=   r>   r   r?   r   r   r   r   r,   rH   r   r   rF   r   rL   o   s    
rL   c                       *   e Zd Zdededdf fddZ  ZS )ReportableErrorImdsUrlError	exceptionrC   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_coderC   rS   url)r5   causerequestsConnectTimeoutConnectionErrorReadTimeoutcoderE   r,   r    reprrU   )r*   rS   rC   r!   rF   r   r   r,      s   
z$ReportableErrorImdsUrlError.__init__)r:   r=   r>   r   rG   r,   rH   r   r   rF   r   rR          "rR   c                       rQ   )"ReportableErrorImdsInvalidMetadatakeyvaluer   Nc                   s.   t  d|  || jd< t|| jd< d S )Nzinvalid IMDS metadata for key=r_   r`   )rE   r,   r    r\   )r*   r_   r`   rF   r   r   r,      s   
z+ReportableErrorImdsInvalidMetadata.__init__)r:   r=   r>   r?   r   r,   rH   r   r   rF   r   r^      r]   r^   c                       rA   )+ReportableErrorImdsMetadataParsingExceptionrS   r   Nc                   s   t  d t|| jd< d S )Nzerror parsing IMDS metadatarS   )rE   r,   r\   r    r*   rS   rF   r   r   r,      s   z4ReportableErrorImdsMetadataParsingException.__init__)r:   r=   r>   
ValueErrorr,   rH   r   r   rF   r   ra      rI   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rE   r,   r;   rF   r   r   r,         z(ReportableErrorOsDiskPpsFailure.__init__r   Nr:   r=   r>   r,   rH   r   r   rF   r   re          re   c                       rA   )!ReportableErrorOvfInvalidMetadatamessager   Nc                    s   t  d|  d S )Nz)unexpected metadata parsing ovf-env.xml: rg   )r*   rm   rF   r   r   r,      s   z*ReportableErrorOvfInvalidMetadata.__init__)r:   r=   r>   r?   r,   rH   r   r   rF   r   rl      rI   rl   c                       (   e Zd Zdejddf fddZ  ZS )"ReportableErrorOvfParsingExceptionrS   r   Nc                   s   |j }t d|  d S )Nzerror parsing ovf-env.xml: )msgrE   r,   )r*   rS   rm   rF   r   r   r,      s   z+ReportableErrorOvfParsingException.__init__)r:   r=   r>   r	   
ParseErrorr,   rH   r   r   rF   r   ro           ro   c                       rA   )!ReportableErrorUnhandledExceptionrS   r   Nc                    sX   t  d dtt|||j}t|	d
d}t|| jd< || jd< d S )Nzunhandled exception zutf-8rS   traceback_base64)rE   r,   join	tracebackformat_exceptiontype__traceback__base64	b64encodeencodedecoder\   r    )r*   rS   tracetrace_base64rF   r   r   r,      s   z*ReportableErrorUnhandledException.__init__)r:   r=   r>   r)   r,   rH   r   r   rF   r   rs      rI   rs   c                       rd   )!ReportableErrorProxyAgentNotFoundr   Nc                    rf   )Nzazure-proxy-agent not foundrg   r;   rF   r   r   r,      rh   z*ReportableErrorProxyAgentNotFound.__init__ri   rj   r   r   rF   r   r      rk   r   c                       rn   )&ReportableErrorProxyAgentStatusFailurerS   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)rE   r,   r   r    r   r   rb   rF   r   r   r,      s   z/ReportableErrorProxyAgentStatusFailure.__init__)r:   r=   r>   r
   ProcessExecutionErrorr,   rH   r   r   rF   r   r      rr   r   )r   r   )*r{   r   loggingrw   r   r   r   typingr   r   r   r   r   	xml.etreer	   rW   	cloudinitr
   r   cloudinit.sources.azurer   cloudinit.url_helperr   	getLoggerr:   LOGr?   r   r)   r   rB   rJ   rL   rR   r^   ra   re   rl   ro   rs   r   r   r   r   r   r   <module>   sH   

9