U
    Ld                     @   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 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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subp
url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4c                 C   s   t d}t D ]}zVt| |d|id: 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_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   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   5   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   ?   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_sysinfoK   s    r#   c                   C   s   t  d dkrdS dS )Nr"   VultrTF)r#   r   r   r   r   is_baremetalS   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_vultrZ   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   i   s    
 r   c                   C   s   t  S N)r   Zget_interfaces_by_macr   r   r   r   get_interface_map   s    r/   c                 C   s   t  }| |krd S || S r.   )r/   get)macZmacs_to_nicr   r   r   get_interface_name   s    r2   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)primaryr7   Zunconfigured)lengenerate_interfacer!   ranger0   )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 )Nr1   .Interface: %s could not be found on the systemphysical)namer4   mac_addressr3   	accept-raZdhcpauto)r4   controlZ
ipv6_slaacsubnetsstaticipv4r5   netmaskr4   rF   r5   rJ   )r2   r   generate_interface_routes'generate_interface_additional_addresses)r>   r8   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mturD   routesrG   r   r   )r>   rO   r   r   r   rL      s    rL   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 )NrI   
additionalr   rH   rE   r5   rJ   rK   rP   rG   Zipv6Zstatic6z%s/%sr<   prefix)r4   rF   r5   )r9   r!   )r>   rO   Zadditional_countrQ   addr   r   r   rM      s.    rM   c                 C   sH   | d D ]:}|d dkrqt |d }|s:td|d  ||d< qd S )Nr7   r4   rA   rC   r@   rB   )r2   r   )rO   r>   rN   r   r   r   add_interface_names  s    rT   )N)F)!r   	functoolsr   Zrequestsr   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/   r2   r?   r:   rL   rM   rT   r   r   r   r   <module>   s2   
  



%#