
­­­­­­­­­­­­­­­­­­
<!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}xt 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rxR| d d D ]B}ddd|d |d f d}d	|kr|d	 |d	< |d
 j| qW 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,   



%#