
    x[h!                         S SK r S SKrS SKJr  S SKJrJrJr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr  \ R                   " \5      r " S S	\R&                  5      rg)
    N)Optional)netsubputil)	bsd_utils)
ResolvConf)renderer)NetworkStatec                       \ rS rSrSrSrSrSrSrS r	S r
SS jrS	 rS
 rS r  SS\S\\   SS4S jjrS rSS jrSS jrS rS rSrg)BSDRenderer   zetc/resolv.confzetc/rc.conf c                     [         R                  " U R                  U R                  5      n[        R
                  " XS9  g N)fn)r   target_pathtarget
rc_conf_fnr   get_rc_config_value)selfkeyr   s      3/usr/lib/python3/dist-packages/cloudinit/net/bsd.pyr   BSDRenderer.get_rc_config_value   s*    dkk4??;%%c1    c                     [         R                  " U R                  U R                  5      n[        R
                  " XUS9  g r   )r   r   r   r   r   set_rc_config_value)r   r   valuer   s       r   r   BSDRenderer.set_rc_config_value   s,    dkk4??;%%cR8r   Nc                 n    U(       d  0 nS U l         0 U l        0 U l        UR                  SS5      U l        g )NpostcmdsT)r   interface_configurationsinterface_configurations_ipv6get	_postcmds)r   configs     r   __init__BSDRenderer.__init__   s3    F(*%-/*J5r   c           
      h   [         R                  " 5       nUR                  5        GH  nUR                  S5      nUR                  S5      nU(       a  [        R
                  " SU5      (       a  MK  XR;  a  [        R                  SU5        OFU(       a;  U(       a4  X%   nXd:w  a*  [        R                  SUU5         U R                  Xd5        OOX%   n[        R                  SU5        UR                  S/ 5       GH  nUR                  S	5      S
:X  a  UR                  S5      (       d'  [        R                  SUR                  S5      5        MV  [        R                  SUUR                  S5      UR                  S5      5        UR                  S5      UR                  S5      UR                  S5      =(       d    UR                  S5      S.U R                  U'   M  UR                  S	5      S:X  a  UR                  S5      (       d(  [        R                  SUR                  S5      5        GM9  [        R                  SUUR                  S5      UR                  S5      5        UR                  S5      UR                  S5      UR                  S5      =(       d    UR                  S5      S.U R                  U'   GM  UR                  S	5      S:X  d  UR                  S	5      S:X  d  GM  SU R                  U'   GM	     GM     g ! [         a    [        R                  S5        Un GN]f = f)Nnamemac_addressz^lo\d+$z"Cannot find any device with MAC %sz,netif service will rename interface %s to %sz.Interface renaming is not supported on this OSzConfiguring interface %ssubnetstypestaticnetmaskz+Skipping IP %s, because there is no netmaskaddresszConfiguring dev %s with %s / %smtu)r/   r.   r0   static6prefixz*Skipping IP %s, because there is no prefix)r/   r2   r0   dhcpdhcp4DHCP)r   get_interfaces_by_maciter_interfacesr#   rematchLOGinforename_interfaceNotImplementedErrorerrordebugr!   r"   )r   settingsifname_by_mac	interfacedevice_name
device_maccur_namesubnets           r   _ifconfig_entriesBSDRenderer._ifconfig_entries'   s   113!113I#--/K"}5Jrxx
K@@.=zJ(4*HHF #
/--hD + ,7HH/=#--	26::f%1!::i00		I"JJy1 !II9#

9-

9-	 $*::i#8#)::i#8%zz%0HIMM%4HBD11+> ZZ'94!::h//		H"JJy1 !II9#

9-

8,	 $*::i#8"(**X"6%zz%0HIMM%4HGD66{C JJv&&0zz&)W4AGD11+>Y 79 4" / /		L '/	/s   <L!L10L1c                 p   [        UR                  5       5      nUR                  5        H  nUR                  S/ 5      nU H  nUR                  S5      S:X  aL  UR                  S5      nU(       a3  [	        UR                  S5      5      S:X  a  UR                  SSUS.5        OcUR                  S5      S	:X  aL  UR                  S5      nU(       a3  [	        UR                  S
5      5      S:  a  UR                  SSUS.5        OM  X%R                  S/ 5      -  nM     M     U H  nUR                  S5      nU(       d  [        R                  S5        M2  UR                  S5      (       a  UR                  S5      OUR                  S5      n	UR                  S5      nU R                  XU5        M     g )Nr+   r,   r-   gateway.   z0.0.0.0)networkr.   rJ   r1   :   z::0)rM   r2   rJ   routesrM   zSkipping a bad route entryr.   r2   )
listiter_routesr7   r#   lensplitappendr:   r?   	set_route)
r   r@   rQ   rB   r+   rF   rJ   routerM   r.   s
             r   _route_entriesBSDRenderer._route_entriess   s{   h**,-!113ImmIr2G!::f%1$jj3G3w}}S'9#:a#?+4+4+2 ZZ'94$jj3G3w}}S'9#:Q#>+/*-+2 **Xr22/ " 46 Eii	*G		67 99Y'' 		)$YYx( 
 ii	*GNN7W5 r   c           	      n   UR                   nUR                  nUR                  5        HR  nUR                  S/ 5       H9  nSU;   a  UR	                  US   5        SU;   d  M%  UR	                  US   5        M;     MT      [        [        R                  " [        R                  " U R                  U R                  5      5      5      nUR                  5         [!        U5       H  n UR#                  U5        M     [!        U5       H  n UR'                  U5        M     [        R(                  " [        R                  " U R                  U R                  5      [+        U5      S5        g ! [         ac    [        R                  " [        S[        R                  " U R                  U R                  5      5        [        S5      nUR                  5          Nf = f! [$         a!    [        R                  " [        SU5         GM"  f = f! [$         a!    [        R                  " [        SU5         GM,  f = f)	Nr+   dns_nameservers
dns_searchz&Failed to parse %s, use new empty filer   zFailed to add nameserver %szFailed to add search domain %si  )r\   dns_searchdomainsr7   r#   extendr   r   load_text_filer   r   r   resolv_conf_fnparseIOErrorlogexcr:   setadd_nameserver
ValueErroradd_search_domain
write_filestr)	r   r@   nameserverssearchdomainsrB   rF   
resolvconfserverdomains	            r   _resolve_confBSDRenderer._resolve_conf   s   .. 22!113I#--	26$.&&v.?'@A6)!(()=>	 7 4	###$$T[[$2E2EFJ
  +&FH))&1 ' -(FK,,V4 )
 	T[[$*=*=>
O	
-  	KK8  d.A.AB
 $BJ	  HC!>GGH  KC!A6JJKs8    AE+ 'GH	+A*GG&HH	&H43H4network_state	templatesreturnc                     U(       a  X0l         U R                  US9  U R                  US9  U R                  US9  U R	                  5         U R                  U R                  S9  g )N)r@   )run)r   rG   rY   rp   write_configstart_servicesr$   )r   rr   rs   r   s       r   render_network_state BSDRenderer.render_network_state   s`      K6]3M2/r   c                     U R                   R                  nU" 5        VVs/ s H  u  p#US:X  d  M  UPM     snn$ s  snnf )Nr5   )r!   items)r   ickvs       r   dhcp_interfacesBSDRenderer.dhcp_interfaces   s5    **00 d2ddaa6kd222s   ;;c                     [        5       eNr=   )r   rv   s     r   rx   BSDRenderer.start_services       !##r   c                     [        5       er   r   )r   r   s     r   rw   BSDRenderer.write_config   r   r   c                     [        5       er   r   )r   rE   rC   s      r   r<   BSDRenderer.rename_interface   r   r   c                     [        5       er   r   )r   rM   r.   rJ   s       r   rW   BSDRenderer.set_route   r   r   )r$   r!   r"   r   r   )NN)F)__name__
__module____qualname____firstlineno__ra   r   interface_routesroute_namesroute6_namesr   r   r&   rG   rY   rp   r
   r   dictry   r   rx   rw   r<   rW   __static_attributes__ r   r   r   r      s    &NJKL296JHX(6T,
b %)	0#0 D>0
 
03$$$$r   r   )loggingr8   typingr   	cloudinitr   r   r   cloudinit.distrosr   %cloudinit.distros.parsers.resolv_confr   cloudinit.netr	   cloudinit.net.network_stater
   	getLoggerr   r:   Rendererr   r   r   r   <module>r      sF     	  % % ' < " 4!X$(## X$r   