o
    thL                  	   @   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dee ddf fddZ  ZS )ReportableErrorDhcpLeaserA   	interfacer   Nc                    s$   t  d || jd< || jd< d S )Nzfailure to obtain DHCP leaserA   rI   rB   )r(   rA   rI   rD   r   r   r)   a   s   
z!ReportableErrorDhcpLease.__init__)r8   r;   r<   rE   r   r=   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 )
(ReportableErrorDhcpOnNonPrimaryInterfacerI   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 interfacerI   rK   rL   rM   rN   rB   )r(   rI   rK   rL   rM   rN   rD   r   r   r)   i   s   	



z1ReportableErrorDhcpOnNonPrimaryInterface.__init__)r8   r;   r<   r   r=   r   r	   r   r   r)   rF   r   r   rD   r   rJ   h   s    
rJ   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   rQ   url)r3   causerequestsConnectTimeoutConnectionErrorReadTimeoutcoderC   r)   r    reprrS   )r(   rQ   rA   r!   rD   r   r   r)   |   s   
z$ReportableErrorImdsUrlError.__init__)r8   r;   r<   r   rE   r)   rF   r   r   rD   r   rP   {       "rP   c                       rO   )"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?   )+ReportableErrorImdsMetadataParsingExceptionrQ   r   Nc                   s   t  d t|| jd< d S )Nzerror parsing IMDS metadatarQ   rC   r)   rZ   r    r(   rQ   rD   r   r   r)      s   z4ReportableErrorImdsMetadataParsingException.__init__)r8   r;   r<   
ValueErrorr)   rF   r   r   rD   r   r`      rG   r`   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   re          re   c                       r?   )!ReportableErrorOvfInvalidMetadatamessager   Nc                    s   t  d|  d S )Nz)unexpected metadata parsing ovf-env.xml: rg   )r(   rm   rD   r   r   r)      s   z*ReportableErrorOvfInvalidMetadata.__init__)r8   r;   r<   r=   r)   rF   r   r   rD   r   rl      rG   rl   c                       (   e Zd Zdejddf fddZ  ZS )"ReportableErrorOvfParsingExceptionrQ   r   Nc                   s   |j }t d|  d S )Nzerror parsing ovf-env.xml: )msgrC   r)   )r(   rQ   rm   rD   r   r   r)      s   z+ReportableErrorOvfParsingException.__init__)r8   r;   r<   ET
ParseErrorr)   rF   r   r   rD   r   ro           ro   c                       r?   )!ReportableErrorUnhandledExceptionrQ   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-8rQ   traceback_base64)rC   r)   join	tracebackformat_exceptionr_   __traceback__splitbase64	b64encodeencodedecoderZ   r    )r(   rQ   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   rt      rG   rt   c                       rd   )!ReportableErrorProxyAgentNotFoundr   Nc                    rf   )Nzazure-proxy-agent not foundrg   r9   rD   r   r   r)      rh   z*ReportableErrorProxyAgentNotFound.__init__ri   rj   r   r   rD   r   r      rk   r   c                       rn   )&ReportableErrorProxyAgentStatusFailurerQ   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   rb   rD   r   r   r)      s   z/ReportableErrorProxyAgentStatusFailure.__init__)r8   r;   r<   r   ProcessExecutionErrorr)   rF   r   r   rD   r   r      rs   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_uuidrQ   r   r   c                   s(   t  d t|| jd< || jd< d S )Nzfailure to identify Azure VM IDrQ   r   ra   )r(   rQ   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   loggingrz   r   r   r   r   typingr   r   r   r   r	   	xml.etreer
   rq   rU   	cloudinitr   r   cloudinit.url_helperr   	getLoggerr8   LOGr=   r   r   r   r@   rH   rJ   rP   r\   r`   re   rl   ro   rt   r   r   r   r   r   r   r   <module>   sH   

3		