o
    x[hÓ  ã                	   @   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 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Útimezone)Ú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 tj	¡| _
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   Únowr   ÚutcÚ	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.   r6   Úboolr9   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 interfacerE   ©Úsuperr.   r!   )r,   rE   ©r;   r   r   r.   a   s   z-ReportableErrorDhcpInterfaceNotFound.__init__)r<   r?   r@   Úfloatr.   Ú__classcell__r   r   rH   r   rD   `   ó    rD   c                       s.   e Zd Zdedee ddf‡ fdd„Z‡  ZS )ÚReportableErrorDhcpLeaserE   Ú	interfacer   Nc                    s$   t ƒ  d¡ || jd< || jd< d S )Nzfailure to obtain DHCP leaserE   rM   rF   )r,   rE   rM   rH   r   r   r.   h   s   
z!ReportableErrorDhcpLease.__init__)r<   r?   r@   rI   r   rA   r.   rJ   r   r   rH   r   rL   g   s    &rL   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 )
Ú(ReportableErrorDhcpOnNonPrimaryInterfacerM   Ú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 interfacerM   rO   rP   rQ   rR   rF   )r,   rM   rO   rP   rQ   rR   rH   r   r   r.   p   s   	



z1ReportableErrorDhcpOnNonPrimaryInterface.__init__)r<   r?   r@   r   rA   r   r	   r   r   r.   rJ   r   r   rH   r   rN   o   s    ýüûú
ùørN   c                       ó*   e Zd Zdededdf‡ fdd„Z‡  ZS )ÚReportableErrorImdsUrlErrorÚ	exceptionrE   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_coderE   rU   Úurl)r7   ÚcauseÚrequestsÚConnectTimeoutÚConnectionErrorÚReadTimeoutÚcoderG   r.   r!   ÚreprrW   )r,   rU   rE   r"   rH   r   r   r.   ƒ   s   
z$ReportableErrorImdsUrlError.__init__)r<   r?   r@   r   rI   r.   rJ   r   r   rH   r   rT   ‚   ó    "rT   c                       rS   )Ú"ReportableErrorImdsInvalidMetadataÚkeyÚvaluer   Nc                   s.   t ƒ  d|› �¡ || jd< t|ƒ| jd< d S )Nzinvalid IMDS metadata for key=ra   rb   )rG   r.   r!   r^   )r,   ra   rb   rH   r   r   r.   ›   s   
z+ReportableErrorImdsInvalidMetadata.__init__)r<   r?   r@   rA   r   r.   rJ   r   r   rH   r   r`   š   r_   r`   c                       rC   )Ú+ReportableErrorImdsMetadataParsingExceptionrU   r   Nc                   s   t ƒ  d¡ t|ƒ| jd< d S )Nzerror parsing IMDS metadatarU   )rG   r.   r^   r!   ©r,   rU   rH   r   r   r.   £   s   z4ReportableErrorImdsMetadataParsingException.__init__)r<   r?   r@   Ú
ValueErrorr.   rJ   r   r   rH   r   rc   ¢   rK   rc   c                       ó   e Zd Zd‡ fdd„Z‡  ZS )ÚReportableErrorOsDiskPpsFailurer   Nc                    ó   t ƒ  d¡ d S )Nzerror waiting for host shutdown©rG   r.   r=   rH   r   r   r.   ª   ó   z(ReportableErrorOsDiskPpsFailure.__init__©r   N©r<   r?   r@   r.   rJ   r   r   rH   r   rg   ©   ó    rg   c                       rC   )Ú!ReportableErrorOvfInvalidMetadataÚmessager   Nc                    s   t ƒ  d|› �¡ d S )Nz)unexpected metadata parsing ovf-env.xml: ri   )r,   ro   rH   r   r   r.   ¯   s   z*ReportableErrorOvfInvalidMetadata.__init__)r<   r?   r@   rA   r.   rJ   r   r   rH   r   rn   ®   rK   rn   c                       ó(   e Zd Zdejddf‡ fdd„Z‡  ZS )Ú"ReportableErrorOvfParsingExceptionrU   r   Nc                   s   |j }tƒ  d|› �¡ d S )Nzerror parsing ovf-env.xml: )ÚmsgrG   r.   )r,   rU   ro   rH   r   r   r.   ´   s   z+ReportableErrorOvfParsingException.__init__)r<   r?   r@   ÚETÚ
ParseErrorr.   rJ   r   r   rH   r   rq   ³   ó     rq   c                       rC   )Ú!ReportableErrorUnhandledExceptionrU   r   Nc                    sX   t ƒ  d¡ d t t|ƒ||j¡¡}t | 	d¡¡ 
d¡}t|ƒ| jd< || jd< d S )Nzunhandled exceptionÚ zutf-8rU   Útraceback_base64)rG   r.   ÚjoinÚ	tracebackÚformat_exceptionÚtypeÚ__traceback__Úbase64Ú	b64encodeÚencodeÚdecoder^   r!   )r,   rU   ÚtraceÚtrace_base64rH   r   r   r.   º   s   ÿÿz*ReportableErrorUnhandledException.__init__)r<   r?   r@   r+   r.   rJ   r   r   rH   r   rv   ¹   rK   rv   c                       rf   )Ú!ReportableErrorProxyAgentNotFoundr   Nc                    rh   )Nzazure-proxy-agent not foundri   r=   rH   r   r   r.   É   rj   z*ReportableErrorProxyAgentNotFound.__init__rk   rl   r   r   rH   r   r„   È   rm   r„   c                       rp   )Ú&ReportableErrorProxyAgentStatusFailurerU   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)rG   r.   r†   r!   r‡   rˆ   rd   rH   r   r   r.   Î   s   z/ReportableErrorProxyAgentStatusFailure.__init__)r<   r?   r@   r   ÚProcessExecutionErrorr.   rJ   r   r   rH   r   r…   Í   ru   r…   )r   r   ),r~   r   Úloggingrz   r   r   r   r   Útypingr   r   r   r   r	   Ú	xml.etreer
   rs   rY   Ú	cloudinitr   r   Úcloudinit.sources.azurer   Úcloudinit.url_helperr   Ú	getLoggerr<   ÚLOGrA   r   r+   r    rD   rL   rN   rT   r`   rc   rg   rn   rq   rv   r„   r…   r   r   r   r   Ú<module>   sH   
ÿÿÿÿ
þ9