
    x[h                        S SK r S SKrS SKrS SKJr  S SKJr  S SKJrJ	r	J
r
JrJr  S SKJr  S SKJr  \R"                  " \5      r\" 5        SS j5       rS rS	 rS
 rS rS rS r\" 5       S 5       rS rS rSS jrS rS r S r!g)    N)	lru_cache)
exceptions)dminetsubp
url_helperutil)NoDHCPLeaseError)EphemeralDHCPv4c           	         [        S5      n[        5        HL  n [        U USU0/S9   [        XX4U5      n	[        R
                  " U	5      n
[        U
5        U
sS S S 5        s  $    Ue! , (       d  f       Ma  = f! [        [        R                  [         [        R                  4 a#  n[        R                  SU5        Un S nAM  S nAff = f)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	s4   A:0A(	A:(
A7	2A:7A::.C(CCc                 |    U S   U S'   U S   U S'   U S   S   nSU S   ;   a  U S   S   nUR                  5       U S'   g )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                     / n  Sn[         R                  R                  U5      (       ai  [        R                  " USSS9nUR                  R                  5        H5  nUR                  5       n[        U5      S:  d  M$  U R                  U5        M7     U (       d5  [        R                  " 5        H  nSU;   a  M  U R                  U5        M     U $ ! [         a   n[        R                  SU5         S nANcS nAff = f)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%( 0 ,,.E%MM% 	 / M  A		<a@@As   A6C >C 
C;C66C;c                  \    [         R                  " S5      [         R                  " S5      S.$ )Nzsystem-manufacturerzsystem-serial-number)manufacturersubid)r   read_dmi_data r,   r$   get_sysinforE   \   s*    ))*?@""#9: r,   c                  (    [        5       S   S:w  a  gg)NrA   VultrTF)rE   rD   r,   r$   is_baremetalrH   d   s    }^$/r,   c                  |    [        5       n U S   S:X  a  gS[        R                  " 5       R                  5       ;   a  gg)NrA   rG   TvultrF)rE   r	   get_cmdlinesplit)sysinfos    r$   is_vultrrN   k   s;    mG~') $""$**,,r,   c                     SU -  n SUS.n[         R                  " U UUUUS9nUR                  5       (       d  [        SU -  UR                  5      eUR
                  R                  5       $ )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   sv    

C "-EBG!!H ;;==/#5x}}
 	
 ##%%r,   c                  ,    [         R                  " 5       $ N)r   get_interfaces_by_macrD   r,   r$   get_interface_mapr[      s    $$&&r,   c                 D    [        5       nX;  a  g UR                  U 5      $ rY   )r[   get)macmacs_to_nics     r$   get_interface_namer`      s"    #%K
??3r,   c                 *   SSSS/S./S.n[        U 5      S:  a!  [        U S   SS	9nUS
   R                  U5        [        S[        U 5      5       H>  nX   nUR	                  S5      (       a  M  [        U5      nUS
   R                  U5        M@     U$ )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&M	 ==(($Y/  ) ' Nr,   c                     [        U S   5      nU(       d  [        SU S   -  5      eUSU S   S.nU(       a  SUS'   SSS	.S
SS	./US'   U(       d  SSU S   S   U S   S   S./US'   [        X5        [        X5        U$ )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+I> Mr,   c                 f    SU ;   a  U S   US'   SU ;   a  U S   US'   SU ;   a  U S   US   S   S'   g g )Nmturx   routesr}   r   rD   )rp   r   s     r$   r   r      sU    	!%(ui'4{9)28)<y!X& r,   c                    [        U S   S   5      nSU ;   aD  US:  a>  U S   S    H2  nSSUS   US   S.nS	U;   a  US	   US	'   US
   R                  U5        M4     [        U S   S   5      nSU ;   aL  US:  aE  U S   S    H8  nSSUS   < SUS   < 3S.nS	U;   a  US	   US	'   US
   R                  U5        M:     g g g )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9J !%i0%i0	C :% *8 4H9$$S) : 9V,\:;/!3#F+L9J!!i(*X*>@C :% *8 4H9$$S) :  4r,   c                     U S    H8  nUS   S:w  a  M  [        US   5      nU(       d  [        SUS   -  5      eX!S'   M:     g )Nrg   rd   ru   rw   rt   rv   )r`   r   )r   rp   r   s      r$   add_interface_namesr     sZ    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 ! ?C @(:&0 ' '
 <"J	=*F
+r,   