o
    f                     @   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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}t D ]S}z1t| |d|id t|||||}	t|	}
t|
 |
W  d    W   S 1 s4w   Y  W q ttj	t t
jfyZ } ztd| |}W Y d }~qd }~ww |)NzFailed to DHCPurl)ifaceconnectivity_url_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exc r"   A/usr/lib/python3/dist-packages/cloudinit/sources/helpers/vultr.pyget_metadata   s0   

*r$   c                 C   sL   | d | d< | d | d< | d d }d| d v r| d d }|  | d< d S )Nzinstance-v2-idzinstance-idhostnamezlocal-hostnameregion
regioncodecountrycode)lower)r    r&   r"   r"   r#   r   4   s   r   c                  C   s*   g } t  D ]}d|v rq| | q| S )Ndummy)r   find_candidate_nicsappend)ifacesr   r"   r"   r#   r   >   s   r   c                   C   s   t dt ddS )Nzsystem-manufacturerzsystem-serial-number)manufacturersubid)r   read_dmi_datar"   r"   r"   r#   get_sysinfoJ   s   r1   c                   C   s   t  d dkr	dS dS )Nr.   VultrTF)r1   r"   r"   r"   r#   is_baremetalR   s   r3   c                  C   s.   t  } | d dkrdS dt  v rdS dS )Nr.   r2   TvultrF)r1   r   get_cmdlinesplit)sysinfor"   r"   r#   is_vultrY   s   r8   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   readurlokr   codecontentsdecode)r   r   r   r   r   r:   responser"   r"   r#   r   h   s   


r   c                   C   s   t  S N)r   get_interfaces_by_macr"   r"   r"   r#   get_interface_map   s   rC   c                 C   s   t  }| |vr	d S || S rA   )rC   get)macmacs_to_nicr"   r"   r#   get_interface_name   s   
rG   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r3q't|}|d
 | q'|S )N   
nameserverz108.61.10.10z2001:19f0:300:1704::6)typeaddress)versionconfigr   T)primaryrM   unconfigured)lengenerate_interfacer,   rangerD   )
interfacesnetworkpublici	interfaceprivater"   r"   r#   generate_network_config   s    
rY   Fc                 C   s   t | d }|std| d  |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 )NrE   .Interface: %s could not be found on the systemphysical)namerJ   mac_addressrH   	accept-radhcpauto)rJ   control
ipv6_slaacsubnetsstaticipv4rK   netmaskrJ   ra   rK   rf   )rG   r   generate_interface_routes'generate_interface_additional_addresses)rW   rN   interface_namenetcfgr"   r"   r#   rQ      s0   



	
rQ   c                 C   sL   d| v r
| d |d< d| v r| d |d< d| v r$| d |d d d< d S d S )Nmtur^   routesrc   r   r"   )rW   rk   r"   r"   r#   rh      s   rh   c                 C   s   t | d d }d| v r5|dkr5| d d D ]}dd|d |d d}d	|v r-|d	 |d	< |d
 | qt | d d }d| v rm|dkro| d d D ]%}ddd|d |d f d}d	|v re|d	 |d	< |d
 | qKd S d S d S )Nre   
additionalr   rd   r`   rK   rf   rg   rm   rc   ipv6static6z%s/%srT   prefix)rJ   ra   rK   )rP   r,   )rW   rk   additional_countrn   addr"   r"   r#   ri      s2   ri   c                 C   sH   | d D ]}|d dkrqt |d }|std|d  ||d< qd S )NrM   rJ   r[   r]   rZ   r\   )rG   r   )rk   rW   rj   r"   r"   r#   add_interface_names  s   
rt   rA   )F)!r   logging	functoolsr   requestsr   r9   r   r   r   r   r   cloudinit.net.dhcpr	   cloudinit.net.ephemeralr
   	getLogger__name__r   r$   r   r   r1   r3   r8   r   rC   rG   rY   rQ   rh   ri   rt   r"   r"   r"   r#   <module>   s2   
 



%#