
    x[h                        d dl Z 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 ]P  }	 t        | |d|ig      5  t        |||||      }	t	        j
                  |	      }
t        |
       |
cd d d        c S  |# 1 sw Y   nxY wb# 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_urls_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 $% 	 ).~ 
  #3+uM::b>!(+
  
 * O'
  
  
  &&''	
 	 II*C0I	s.   A81A+	A8+A4	0A88-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   5   s]    &'78H]!)*!5Hh-F**(#M2HX    c                     g } 	 d}t         j                  j                  |      rgt        j                  |dd      }|j                  j                         D ]2  }|j                         }t        |      dkD  s"| j                  |       4 | s/t        j                         D ]  }d|v r| j                  |        | S # t        $ r }t        j                  d|       Y d }~Wd }~ww xY w)Nz!/opt/vultr/find_candidate_nics.shT)captureshellr   z(find_candidate_nics script exception: %sdummy)ospathexistsr   stdout
splitlinesstriplenappend	Exceptionr   r   r   find_candidate_nics)ifaces
nic_scriptoutliner   es         r$   r   r   ?   s     F	A8
77>>*%))JDAC

--/ )

u:>MM%() ,,. 	!E%MM% 		! M  A		<a@@As   A4B? 9B? ?	C(C##C(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_sysinforE   \   s*    ))*?@""#9: r,   c                  &    t               d   dk7  ryy)NrA   VultrTF)rE   rD   r,   r$   is_baremetalrH   d   s    }^$/r,   c                  t    t               } | d   dk(  rydt        j                         j                         v ryy)NrA   rG   TvultrF)rE   r	   get_cmdlinesplit)sysinfos    r$   is_vultrrN   k   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   rQ   responses          r$   r   r   z   st    

C "-EBG!!H ;;=/#5x}}
 	
 ##%%r,   c                  *    t        j                         S N)r   get_interfaces_by_macrD   r,   r$   get_interface_mapr[      s    $$&&r,   c                 B    t               }| |vry |j                  |       S rY   )r[   get)macmacs_to_nics     r$   get_interface_namer`      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)primaryrg   unconfigured)r7   generate_interfacer8   ranger]   )
interfacesnetworkpublici	interfaceprivates         r$   generate_network_configrr      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 )Nr^   .Interface: %s could not be found on the systemphysical)namerd   mac_addressrb   	accept-radhcpauto)rd   control
ipv6_slaacsubnetsstaticipv4re   netmaskrd   r{   re   r   )r`   r   generate_interface_routes'generate_interface_additional_addresses)rp   rh   interface_namenetcfgs       r$   rj   rj      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mturx   routesr}   r   rD   )rp   r   s     r$   r   r      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 )Nr   
additionalr   r~   rz   re   r   r   r   r}   ipv6static6rm   /prefix)rd   r{   re   )r7   r8   )rp   r   additional_countr   adds        r$   r   r      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 )Nrg   rd   ru   rw   rt   rv   )r`   r   )r   rp   r   s      r$   add_interface_namesr     sa    H% 	+	V
*+Im,DE@M*+  +	&	+r,   rY   )F)"r   loggingr1   	functoolsr   requestsr   rP   r   r   r   r   r	   cloudinit.net.dhcpr
   cloudinit.net.ephemeralr   	getLogger__name__r   r%   r   r   rE   rH   rN   r   r[   r`   rr   rj   r   r   r   rD   r,   r$   <module>r      s   
   	   6 6 / 3 g! ?C @(:&0 ' '
 <"J	=*F
+r,   