
    f                        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       Zd Zd	 Zd
 Zd Zd Zd Z e       d        Zd Zd ZddZd Zd Zd Z y)    N)	lru_cache)
exceptions)dminetsubp
url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4c           	         t        d      }t               D ]O  }	 t        | |d|i      5  t        |||||      }	t	        j
                  |	      }
t        |
       |
cd d d        c S  |# 1 sw Y   nxY wa# t        t        j                  t         t        j                  f$ r"}t        j                  d|       |}Y d }~d }~ww xY 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excs               A/usr/lib/python3/dist-packages/cloudinit/sources/helpers/vultr.pyget_metadatar%      s    
 -.I $% 	 ',cl 
  #3+uM::b>!(+
  
 * O'
  
  
  &&''	
 	 II*C0I	s.   A71A*	A7*A3	/A77-C$CCc                 x    | d   | d<   | d   | d<   | d   d   }d| d   v r| d   d   }|j                         | d<   y )Nzinstance-v2-idzinstance-idhostnamezlocal-hostnameregion
regioncodecountrycode)lower)r"   r(   s     r$   r   r   4   s]    &'78H]!)*!5Hh-F**(#M2HX    c                  h    g } t        j                         D ]  }d|v r| j                  |        | S )Ndummy)r   find_candidate_nicsappend)ifacesr   s     r$   r   r   >   s=    F((* ee	 Mr,   c                  X    t        j                  d      t        j                  d      dS )Nzsystem-manufacturerzsystem-serial-number)manufacturersubid)r   read_dmi_data r,   r$   get_sysinfor7   J   s*    ))*?@""#9: r,   c                  &    t               d   dk7  ryy)Nr3   VultrTF)r7   r6   r,   r$   is_baremetalr:   R   s    }^$/r,   c                  t    t               } | d   dk(  rydt        j                         j                         v ryy)Nr3   r9   TvultrF)r7   r	   get_cmdlinesplit)sysinfos    r$   is_vultrr@   Y   s;    mG~') $""$**,,r,   c                     d| z  } d|d}t        j                  | ||||      }|j                         st        d| z  |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   readurlokr   codecontentsdecode)r   r   r   r   r   rC   responses          r$   r   r   h   st    

C "-EBG!!H ;;=/#5x}}
 	
 ##%%r,   c                  *    t        j                         S N)r   get_interfaces_by_macr6   r,   r$   get_interface_maprM      s    $$&&r,   c                 B    t               }| |vry |j                  |       S rK   )rM   get)macmacs_to_nics     r$   get_interface_namerR      s$    #%K
+??3r,   c                     ddddgdgd}t        |       dkD  r$t        | d   d	      }|d
   j                  |       t        dt        |             D ]8  }| |   }|j	                  d      rt        |      }|d
   j                  |       : |S )N   
nameserverz108.61.10.10z2001:19f0:300:1704::6)typeaddress)versionconfigr   T)primaryrY   unconfigured)lengenerate_interfacer0   rangerO   )
interfacesnetworkpublici	interfaceprivates         r$   generate_network_configre      s     %*,CD
G :#JqM4@  ( 1c*o& *qM	 ==($Y/  )* Nr,   c                     t        | d         }|st        d| d   z        |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 )NrP   .Interface: %s could not be found on the systemphysical)namerV   mac_addressrT   	accept-radhcpauto)rV   control
ipv6_slaacsubnetsstaticipv4rW   netmaskrV   rn   rW   rs   )rR   r   generate_interface_routes'generate_interface_additional_addresses)rc   rZ   interface_namenetcfgs       r$   r]   r]      s    '	%(89N<y?OO
 	

  'F {/!f5
y
  !!$V,Y7$V,Y7	
y i0+Iv> Mr,   c                 Z    d| v r| d   |d<   d| v r| d   |d<   d| v r| d   |d   d   d<   y y )Nmturk   routesrp   r   r6   )rc   rx   s     r$   ru   ru      sU    	!%(ui'4{9)28)<y!X& r,   c                 `   t        | d   d         }d| v r?|dkD  r:| d   d   D ]/  }dd|d   |d   d}d	|v r|d	   |d	<   |d
   j                  |       1 t        | d   d         }d| v rE|dkD  r?| d   d   D ]3  }dd|d   d|d   d}d	|v r|d	   |d	<   |d
   j                  |       5 y y y )Nrr   
additionalr   rq   rm   rW   rs   rt   r{   rp   ipv6static6r`   /prefix)rV   rn   rW   )r\   r0   )rc   rx   additional_countr}   adds        r$   rv   rv      s   9V,\:;/!3#F+L9 	*J !%i0%i0	C :% *8 4H9$$S)	* 9V,\:;/!3#F+L9 	*J!!i(*X*>@C :% *8 4H9$$S)	*  4r,   c                 v    | d   D ]1  }|d   dk7  rt        |d         }|st        d|d   z        ||d<   3 y )NrY   rV   rh   rj   rg   ri   )rR   r   )rx   rc   rw   s      r$   add_interface_namesr     sa    H% 	+	V
*+Im,DE@M*+  +	&	+r,   rK   )F)!r   logging	functoolsr   requestsr   rB   r   r   r   r   r	   cloudinit.net.dhcpr
   cloudinit.net.ephemeralr   	getLogger__name__r   r%   r   r   r7   r:   r@   r   rM   rR   re   r]   ru   rv   r   r6   r,   r$   <module>r      s   
     6 6 / 3 g! ?C @(&0 ' '
 <"J	=*F
+r,   