509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
\¼meœ  ã               @   sê   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d„ƒZd	d
„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zeƒ dd„ ƒZdd„ Zdd„ Zd%dd„Zdd„ Zd d!„ Zd"d#„ Z dS )&é    N)Ú	lru_cache)Ú
exceptions)ÚdmiÚnetÚsubpÚ
url_helperÚutil)ÚNoDHCPLeaseError)ÚEphemeralDHCPv4c             C   s¤   t dƒ}x’tƒ D ]ˆ}yDt| |d|id��( t|||||ƒ}	tj|	ƒ}
t|
ƒ |
S Q R X W q ttj	t t
jfk
r– } ztjd|ƒ |}W Y d d }~X qX qW |‚d S )NzFailed to DHCPÚurl)ÚifaceZconnectivity_url_datazDHCP Exception: %s)ÚRuntimeErrorÚget_interface_listr
   Úread_metadataÚjsonÚloadsÚrefactor_metadatar	   r   ZProcessExecutionErrorr   ZRequestExceptionÚLOGÚerror)Zdistror   ÚtimeoutÚretriesÚsec_betweenÚagentZtmp_dirZ	exceptionr   Zv1ÚmetadataÚexc© r   ú/usr/lib/python3.6/vultr.pyÚget_metadata   s&    
r   c             C   sL   | d | d< | d | d< | d d }d| d kr<| d d }|j ƒ | d< d S )Nzinstance-v2-idzinstance-idZhostnamezlocal-hostnameÚregionZ
regioncodeZcountrycode)Úlower)r   r   r   r   r   r   4   s    r   c              C   s.   g } x$t jƒ D ]}d|krq| j|ƒ qW | S )NZdummy)r   Zfind_candidate_nicsÚappend)Zifacesr   r   r   r   r   >   s    r   c               C   s   t jdƒt jdƒdœS )Nzsystem-manufacturerzsystem-serial-number)ÚmanufacturerZsubid)r   Zread_dmi_datar   r   r   r   Úget_sysinfoJ   s    r"   c               C   s   t ƒ d dkrdS dS )Nr!   ÚVultrTF)r"   r   r   r   r   Úis_baremetalR   s    r$   c              C   s.   t ƒ } | d dkrdS dtjƒ jƒ kr*dS dS )Nr!   r#   TZvultrF)r"   r   Zget_cmdlineÚsplit)Zsysinfor   r   r   Úis_vultrY   s    r&   c             C   sH   d|  } d|dœ}t j| ||||d�}|jƒ s>td|  |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   ZreadurlÚokr   ÚcodeÚcontentsÚdecode)r   r   r   r   r   r(   Zresponser   r   r   r   h   s    
r   c               C   s   t jƒ S )N)r   Zget_interfaces_by_macr   r   r   r   Úget_interface_map€   s    r-   c             C   s   t ƒ }| |krd S |j| ƒS )N)r-   Úget)ÚmacZmacs_to_nicr   r   r   Úget_interface_name†   s    r0   c             C   s†   ddddgdœgdœ}t | ƒdkr@t| d dd	�}|d
 j|ƒ x@tdt | ƒƒD ].}| | }|jdƒrhqPt|ƒ}|d
 j|ƒ qPW |S )Né   Z
nameserverz108.61.10.10z2001:19f0:300:1704::6)ÚtypeÚaddress)ÚversionÚconfigr   T)Úprimaryr5   Zunconfigured)ÚlenÚgenerate_interfacer    Úranger.   )Z
interfacesÚnetworkZpublicÚiÚ	interfaceZprivater   r   r   Úgenerate_network_config�   s    
r=   Fc             C   s”   t | d ƒ}|s td| d  ƒ‚|d| d dœ}|rTd|d< ddd	œd
dd	œg|d< |s|dd| d d | d d dœg|d< t| |ƒ t| |ƒ |S )Nr/   z.Interface: %s could not be found on the systemÚphysical)Únamer2   Úmac_addressr1   z	accept-raZdhcpÚauto)r2   ÚcontrolZ
ipv6_slaacÚsubnetsÚstaticÚipv4r3   Únetmask)r2   rB   r3   rF   )r0   r   Úgenerate_interface_routesÚ'generate_interface_additional_addresses)r<   r6   Úinterface_nameÚnetcfgr   r   r   r8   ®   s&    


r8   c             C   sH   d| kr| d |d< d| kr(| d |d< d| krD| d |d d d< d S )NZmtuz	accept-raÚroutesrC   r   r   )r<   rJ   r   r   r   rG   Ó   s    rG   c             C   sæ   t | d d ƒ}d| krn|dkrnxL| d d D ]<}dd|d |d dœ}d	|kr\|d	 |d	< |d
 j|ƒ q.W t | d d ƒ}d| krâ|dkrâxR| d d D ]B}ddd|d |d f dœ}d	|krÐ|d	 |d	< |d
 j|ƒ qœW d S )NrE   Ú
additionalr   rD   rA   r3   rF   )r2   rB   r3   rF   rK   rC   Zipv6Zstatic6z%s/%sr:   Úprefix)r2   rB   r3   )r7   r    )r<   rJ   Zadditional_countrL   Úaddr   r   r   rH   ß   s(    rH   c             C   sL   xF| d D ]:}|d dkrq
t |d ƒ}|s<td|d  ƒ‚||d< q
W d S )Nr5   r2   r>   r@   z.Interface: %s could not be found on the systemr?   )r0   r   )rJ   r<   rI   r   r   r   Úadd_interface_names  s    rO   )N)F)!r   ZloggingÚ	functoolsr   Zrequestsr   r'   r   r   r   r   r   Zcloudinit.net.dhcpr	   Zcloudinit.net.ephemeralr
   Z	getLoggerÚ__name__r   r   r   r   r"   r$   r&   r   r-   r0   r=   r8   rG   rH   rO   r   r   r   r   Ú<module>   s,   



%#