Ë
    x[hÌ  ã                   ó  — 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mZ  ej"                  e«      Z e«       	 dd„«       Zd„ Zd	„ Zd
„ Zd„ Zd„ Zd„ Z e«       d„ «       Zd„ Zd„ Zdd„Zd„ Zd„ Z d„ Z!y)é    N)Ú	lru_cache)Ú
exceptions)ÚdmiÚnetÚsubpÚ
url_helperÚutil)ÚNoDHCPLeaseError)ÚEphemeralDHCPv4c           	      ó”  — t        d«      }t        «       D ]P  }	 t        | |d|ig¬«      5  t        |||||«      }	t	        j
                  |	«      }
t        |
«       |
cd d d «       c S  |‚# 1 sw Y   nxY wŒb# t        t        j                  t         t        j                  f$ r"}t        j                  d|«       |}Y d }~Œ¬d }~ww xY w)NzFailed to DHCPÚurl)ÚifaceÚconnectivity_urls_datazDHCP Exception: %s)ÚRuntimeErrorÚget_interface_listr   Úread_metadataÚjsonÚloadsÚrefactor_metadatar
   r   ÚProcessExecutionErrorr   ÚRequestExceptionÚLOGÚerror)Údistror   ÚtimeoutÚretriesÚsec_betweenÚagentÚtmp_dirÚ	exceptionr   Úv1ÚmetadataÚexcs               úA/usr/lib/python3/dist-packages/cloudinit/sources/helpers/vultr.pyÚget_metadatar%      sÓ   € ô
 Ð-Ó.€Iô $Ó%ò ˆð	Ü ØØØ).°¨ ~ôñ 
 ô # 3¨°¸+ÀuÓM�äŸ:™: b›>�Ü! (Ô+Ø÷
 ó 
 ðð* €O÷'
 ð 
 úð 
 øô Ü×&Ñ&ÜÜ×'Ñ'ð	
ò 	ô �I‰IÐ*¨CÔ0Ø�Iûð	ús.   šA8«1A+Á	A8Á+A4	Á0A8Á8-CÂ%CÃCc                 óx   — | d   | d<   | d   | d<   | d   d   }d| d   v r| d   d   }|j                  «       | d<   y )Nzinstance-v2-idzinstance-idÚhostnamezlocal-hostnameÚregionÚ
regioncodeÚcountrycode)Úlower)r"   r(   s     r$   r   r   5   s]   € Ø&Ð'7Ñ8€Hˆ]ÑØ!)¨*Ñ!5€HÐÑØ�hÑ Ñ-€FØ˜ Ñ*Ñ*Ø˜(Ñ# MÑ2ˆØŸ™›€HˆXÒó    c                  óÖ  — g } 	 d}t         j                  j                  |«      rgt        j                  |dd¬«      }|j                  j                  «       D ]2  }|j                  «       }t        |«      dkD  sŒ"| j                  |«       Œ4 | s/t        j                  «       D ]  }d|v rŒ| j                  |«       Œ | S # t        $ r }t        j                  d|«       Y d }~ŒWd }~ww xY w)Nz!/opt/vultr/find_candidate_nics.shT)ÚcaptureÚshellr   z(find_candidate_nics script exception: %sÚdummy)ÚosÚpathÚexistsr   ÚstdoutÚ
splitlinesÚstripÚlenÚappendÚ	Exceptionr   r   r   Úfind_candidate_nics)ÚifacesÚ
nic_scriptÚoutÚliner   Úes         r$   r   r   ?   sÕ   € ð €Fð	AØ8ˆ
Ü�7‰7�>‰>˜*Ô%Ü—)‘)˜J°¸DÔAˆCØŸ
™
×-Ñ-Ó/ò )�ØŸ
™
›�Ü�u“: “>Ø—M‘M %Õ(ð)ñ Ü×,Ñ,Ó.ò 	!ˆEà˜%ÑØØ�M‰M˜%Õ ð		!ð €Møô ò AÜ�	‰	Ð<¸a×@Ñ@ûðAús   „A4B? Á9B? Â?	C(ÃC#Ã#C(c                  óX   — t        j                  d«      t        j                  d«      dœS )Nzsystem-manufacturerzsystem-serial-number)ÚmanufacturerÚsubid)r   Úread_dmi_data© r,   r$   Úget_sysinforE   \   s*   € ä×)Ñ)Ð*?Ó@Ü×"Ñ"Ð#9Ó:ñð r,   c                  ó&   — t        «       d   dk7  ryy)NrA   ÚVultrTF)rE   rD   r,   r$   Úis_baremetalrH   d   s   € Üƒ}�^Ñ$¨Ò/ØØr,   c                  ót   — t        «       } | d   dk(  rydt        j                  «       j                  «       v ryy)NrA   rG   TÚvultrF)rE   r	   Úget_cmdlineÚsplit)Úsysinfos    r$   Úis_vultrrN   k   s;   € ä‹m€Gàˆ~Ñ 'Ò)Øð ”$×"Ñ"Ó$×*Ñ*Ó,Ñ,Øàr,   c                 óÐ   — d| z  } d|dœ}t        j                  | ||||¬«      }|j                  «       st        d| z  |j                  «      ‚|j
                  j                  «       S )Nz
%s/v1.jsonÚ	cloudinit)zMetadata-Tokenz
User-Agent)r   r   Úheadersr   z!Failed to connect to %s: Code: %s)r   ÚreadurlÚokr   ÚcodeÚcontentsÚdecode)r   r   r   r   r   rQ   Úresponses          r$   r   r   z   st   € Ø
˜Ñ
€Cð "-¸EÑB€Gä×!Ñ!ØØØØØô€Hð �;‰;Œ=ÜØ/°#Ñ5°x·}±}ó
ð 	
ð ×Ñ×#Ñ#Ó%Ð%r,   c                  ó*   — t        j                  «       S ©N)r   Úget_interfaces_by_macrD   r,   r$   Úget_interface_mapr[   ’   s   € ä×$Ñ$Ó&Ð&r,   c                 óB   — t        «       }| |vry |j                  | «      S rY   )r[   Úget)ÚmacÚmacs_to_nics     r$   Úget_interface_namer`   ˜   s$   € Ü#Ó%€Kà
�+ÑØà�?‰?˜3ÓÐr,   c                 ó   — ddddgdœgdœ}t        | «      dkD  r$t        | d   d¬	«      }|d
   j                  |«       t        dt        | «      «      D ]8  }| |   }|j	                  d«      rŒt        |«      }|d
   j                  |«       Œ: |S )Né   Ú
nameserverz108.61.10.10z2001:19f0:300:1704::6)ÚtypeÚaddress)ÚversionÚconfigr   T)Úprimaryrg   Úunconfigured)r7   Úgenerate_interfacer8   Úranger]   )Ú
interfacesÚnetworkÚpublicÚiÚ	interfaceÚprivates         r$   Úgenerate_network_configrr   ¢   s¯   € àð %Ø*Ð,CÐDñð
ñ€Gô ˆ:ƒ˜ÒÜ# J¨q¡M¸4Ô@ˆØ�Ñ× Ñ  Ô(ô �1”c˜*“oÓ&ò *ˆØ˜q‘Mˆ	ð �=‰=˜Ô(Øä$ YÓ/ˆØ�Ñ× Ñ  Õ)ð*ð €Nr,   c                 óä   — t        | d   «      }|st        d| d   z  «      ‚|d| d   dœ}|rd|d<   ddd	œd
dd	œg|d<   |sdd| d   d   | d   d   dœg|d<   t        | |«       t        | |«       |S )Nr^   ú.Interface: %s could not be found on the systemÚphysical)Únamerd   Úmac_addressrb   ú	accept-raÚdhcpÚauto)rd   ÚcontrolÚ
ipv6_slaacÚsubnetsÚstaticÚipv4re   Únetmask©rd   r{   re   r€   )r`   r   Úgenerate_interface_routesÚ'generate_interface_additional_addresses)rp   rh   Úinterface_nameÚnetcfgs       r$   rj   rj   À   sÅ   € Ü'¨	°%Ñ(8Ó9€NÙÜØ<¸yÈÑ?OÑOó
ð 	
ð
 ØØ  Ñ'ñ€Fñ Øˆˆ{Ñà¨Ñ/Ø!¨fÑ5ð
ˆˆyÑñ
 ð !Ø!Ø$ VÑ,¨YÑ7Ø$ VÑ,¨YÑ7ñ	ð
ˆˆyÑô ˜i¨Ô0Ü+¨I°vÔ>ð €Mr,   c                 óZ   — d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d   d   d<   y y )NÚmturx   Úroutesr}   r   rD   )rp   r…   s     r$   r‚   r‚   å   sU   € à�	ÑØ! %Ñ(ˆˆu‰à�iÑØ'¨Ñ4ˆˆ{Ñà�9ÑØ)2°8Ñ)<ˆˆyÑ˜!Ñ˜XÒ&ð r,   c                 ó`  — t        | d   d   «      }d| v r?|dkD  r:| d   d   D ]/  }dd|d   |d   dœ}d	|v r|d	   |d	<   |d
   j                  |«       Œ1 t        | d   d   «      }d| v rE|dkD  r?| d   d   D ]3  }dd|d   ›d|d   ›�dœ}d	|v r|d	   |d	<   |d
   j                  |«       Œ5 y y y )Nr   Ú
additionalr   r~   rz   re   r€   r�   rˆ   r}   Úipv6Ústatic6rm   ú/Úprefix)rd   r{   re   )r7   r8   )rp   r…   Úadditional_countrŠ   Úadds        r$   rƒ   rƒ   ñ   s  € ä˜9 VÑ,¨\Ñ:Ó;ÐØ�ÑÐ/°!Ò3Ø# FÑ+¨LÑ9ò 	*ˆJà Ø!Ø% iÑ0Ø% iÑ0ñ	ˆCð ˜:Ñ%Ø *¨8Ñ 4��H‘à�9Ñ×$Ñ$ SÕ)ð	*ô ˜9 VÑ,¨\Ñ:Ó;ÐØ�ÑÐ/°!Ò3Ø# FÑ+¨LÑ9ò 	*ˆJà!Ø!à˜iÓ(¨*°XÒ*>ð@ñˆCð ˜:Ñ%Ø *¨8Ñ 4��H‘à�9Ñ×$Ñ$ SÕ)ñ	*ð  4Ðr,   c                 óv   — | d   D ]1  }|d   dk7  rŒt        |d   «      }|st        d|d   z  «      ‚||d<   Œ3 y )Nrg   rd   ru   rw   rt   rv   )r`   r   )r…   rp   r„   s      r$   Úadd_interface_namesr’     sa   € Ø˜HÑ%ò 	+ˆ	Ø�VÑ 
Ò*ØÜ+¨I°mÑ,DÓEˆÙÜØ@Ø˜MÑ*ñ+óð ð +ˆ	�&Òñ	+r,   rY   )F)"r   Úloggingr1   Ú	functoolsr   Úrequestsr   rP   r   r   r   r   r	   Úcloudinit.net.dhcpr
   Úcloudinit.net.ephemeralr   Ú	getLoggerÚ__name__r   r%   r   r   rE   rH   rN   r   r[   r`   rr   rj   r‚   rƒ   r’   rD   r,   r$   ú<module>rš      s¤   ðó
 Û Û 	Ý å ç 6Õ 6Ý /Ý 3ð €g×Ñ˜Ó!€ñ ƒà?Còó ðò@(òò:òòò&ñ0 ƒñ'ó ð'ò
 òó<"òJ	=ò*óF
+r,   