U
    AdK                     @   s  d dl Z d dlmZ d dlm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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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)log)netnetinfosubp
url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4c                 C   s   t d}t D ]}zlt|d| i|dP t| s>W 5 Q R  W qt| ||||}t|}	t|	 |	W  5 Q R  W   S Q R X W q tt	j
t tjfk
r }
 ztd|
 |
}W 5 d }
~
X Y qX q|d S )NzFailed to DHCPurl)ifaceZconnectivity_url_datatmp_dirzDHCP Exception: %s)RuntimeErrorget_interface_listr   check_routeread_metadatajsonloadsrefactor_metadatar   r   ZProcessExecutionErrorr   ZRequestExceptionLOGerror)r   timeoutretriessec_betweenagentr   Z	exceptionr   Zv1metadataexc r   A/usr/lib/python3/dist-packages/cloudinit/sources/helpers/vultr.pyget_metadata   s.    

 r!   c                 C   sL   | d | d< | d | d< | d d }d| d kr<| d d }|  | d< d S )Nzinstance-v2-idzinstance-idZhostnamezlocal-hostnameregionZ
regioncodeZcountrycode)lower)r   r"   r   r   r    r   7   s    r   c                  C   s*   g } t  D ]}d|krq| | q| S )NZdummy)r   Zfind_candidate_nicsappend)Zifacesr   r   r   r    r   A   s    r   c                 C   s<   t  }d|krdS |d D ]}|dd | kr dS qdS )Nipv4FZdestinationT)r   Z
route_infoget)r   routesZrouter   r   r    r   N   s    r   c                   C   s   t dt ddS )Nzsystem-manufacturerzsystem-serial-number)manufacturerZsubid)r   Zread_dmi_datar   r   r   r    get_sysinfo_   s    r)   c                   C   s   t  d dkrdS dS )Nr(   VultrTF)r)   r   r   r   r    is_baremetalg   s    r+   c                  C   s.   t  } | d dkrdS dt  kr*dS dS )Nr(   r*   TZvultrF)r)   r
   Zget_cmdlinesplit)Zsysinfor   r   r    is_vultrn   s    r-   c                 C   sH   d|  } d|d}t j| ||||d}| s>td|  |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   }   s    
 r   c                   C   s   t  S N)r   Zget_interfaces_by_macr   r   r   r    get_interface_map   s    r5   c                 C   s   t  }| |krd S || S r4   )r5   r&   )macZmacs_to_nicr   r   r    get_interface_name   s    r7   c                 C   s   ddddgdgd}t | dkr@t| d dd	}|d
 | tdt | D ].}| | }|drfqNt|}|d
 | qN|S )N   Z
nameserverz108.61.10.10z2001:19f0:300:1704::6)typeaddress)versionconfigr   T)primaryr<   Zunconfigured)lengenerate_interfacer$   ranger&   )Z
interfacesnetworkZpublici	interfaceZprivater   r   r    generate_network_config   s     
rD   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 )Nr6   .Interface: %s could not be found on the systemphysical)namer9   mac_addressr8   	accept-raZdhcpauto)r9   controlZ
ipv6_slaacsubnetsstaticr%   r:   netmaskr9   rK   r:   rN   )r7   r   generate_interface_routes'generate_interface_additional_addresses)rC   r=   interface_namenetcfgr   r   r    r?      s0    


	

r?   c                 C   sH   d| kr| d |d< d| kr(| d |d< d| krD| d |d d d< d S )NZmturI   r'   rL   r   r   )rC   rS   r   r   r    rP      s    rP   c                 C   s   t | d d }d| krj|dkrj| d d D ]<}dd|d |d d}d	|krZ|d	 |d	< |d
 | q,t | d d }d| kr|dkr| d d D ]B}ddd|d |d f d}d	|kr|d	 |d	< |d
 | qd S )Nr%   
additionalr   rM   rJ   r:   rN   rO   r'   rL   Zipv6Zstatic6z%s/%srA   prefix)r9   rK   r:   )r>   r$   )rC   rS   Zadditional_countrT   addr   r   r    rQ      s.    rQ   c                 C   sH   | d D ]:}|d dkrqt |d }|s:td|d  ||d< qd S )Nr<   r9   rF   rH   rE   rG   )r7   r   )rS   rC   rR   r   r   r    add_interface_names  s    rW   )N)F)#r   	functoolsr   Zrequestsr   r.   r   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   r5   r7   rD   r?   rP   rQ   rW   r   r   r   r    <module>   s2   
"



%#