o
    w7e                     @   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 ]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   5   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_sysinfoK   s   r2   c                   C   s   t  d dkr	dS dS )Nr/   VultrTF)r2   r#   r#   r#   r$   is_baremetalS   s   r4   c                  C   s.   t  } | d dkrdS dt  v rdS dS )Nr/   r3   TvultrF)r2   r	   get_cmdlinesplit)sysinfor#   r#   r$   is_vultrZ   s   r9   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   i   s   


r   c                   C   s   t  S N)r   get_interfaces_by_macr#   r#   r#   r$   get_interface_map   s   rD   c                 C   s   t  }| |vr	d S || S rB   )rD   get)macmacs_to_nicr#   r#   r$   get_interface_name   s   
rH   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)primaryrN   unconfigured)lengenerate_interfacer-   rangerE   )
interfacesnetworkpublici	interfaceprivater#   r#   r$   generate_network_config   s    
rZ   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 )NrF   .Interface: %s could not be found on the systemphysical)namerK   mac_addressrI   	accept-radhcpauto)rK   control
ipv6_slaacsubnetsstaticipv4rL   netmaskrK   rb   rL   rg   )rH   r   generate_interface_routes'generate_interface_additional_addresses)rX   rO   interface_namenetcfgr#   r#   r$   rR      s0   



	
rR   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_   routesrd   r   r#   )rX   rl   r#   r#   r$   ri      s   ri   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 )Nrf   
additionalr   re   ra   rL   rg   rh   rn   rd   ipv6static6z%s/%srU   prefix)rK   rb   rL   )rQ   r-   )rX   rl   additional_countro   addr#   r#   r$   rj      s2   rj   c                 C   sH   | d D ]}|d dkrqt |d }|std|d  ||d< qd S )NrN   rK   r\   r^   r[   r]   )rH   r   )rl   rX   rk   r#   r#   r$   add_interface_names  s   
ru   rB   )F)!r   	functoolsr   requestsr   r:   r   r   r   r   r   r	   cloudinit.net.dhcpr
   cloudinit.net.ephemeralr   	getLogger__name__r   r%   r   r   r2   r4   r9   r   rD   rH   rZ   rR   ri   rj   ru   r#   r#   r#   r$   <module>   s4   
 



%#